diff --git a/news/finished_projecta.rst b/news/finished_projecta.rst
new file mode 100644
index 00000000..3b9843bc
--- /dev/null
+++ b/news/finished_projecta.rst
@@ -0,0 +1,12 @@
+**Added:**
+    * Flags to l_projecta to get projecta that finished within a date range
+
+**Changed:** None
+
+**Deprecated:** None
+
+**Removed:** None
+
+**Fixed:** None
+
+**Security:** None
diff --git a/regolith/helpers/l_projectahelper.py b/regolith/helpers/l_projectahelper.py
index 735b9362..06033e49 100644
--- a/regolith/helpers/l_projectahelper.py
+++ b/regolith/helpers/l_projectahelper.py
@@ -8,7 +8,7 @@ import dateutil.parser as date_parser
 from dateutil.relativedelta import relativedelta
 import sys
 
-from regolith.dates import get_due_date
+from regolith.dates import get_due_date, get_dates
 from regolith.helpers.basehelper import SoutHelperBase
 from regolith.fsclient import _id_key
 from regolith.tools import (
@@ -21,7 +21,6 @@ HELPER_TARGET = "l_projecta"
 ALLOWED_STATI = ["proposed", "started", "finished", "back_burner", "paused", "cancelled"]
 
 
-
 def subparser(subpi):
     subpi.add_argument("-v", "--verbose", action="store_true", help='increase verbosity of output')
     subpi.add_argument("-l", "--lead",
@@ -34,6 +33,18 @@ def subparser(subpi):
                        help=f"List of stati for the project that you want returned,"
                             f"from {ALLOWED_STATI}.  Default is proposed and started"
                        )
+    subpi.add_argument("-e", "--ended", action="store_true",
+                       help="Lists projects that have ended. Use the -d and -r flags to specify"
+                            "from one date and how many days"
+                       )
+    subpi.add_argument("-d", "--date",
+                       help="projecta with end_date within RANGE before this date will be listed."
+                            "Default is today"
+                       )
+    subpi.add_argument("-r", "--range",
+                       help="date range back from DATE to search over in days. If no "
+                            "range is specified, search will be 7 days"
+                       )
     return subpi
 
 
@@ -73,15 +84,25 @@ class ProjectaListerHelper(SoutHelperBase):
         gtx["str"] = str
         gtx["zip"] = zip
 
-
     def sout(self):
         rc = self.rc
+        if rc.date:
+            desired_date = date_parser.parse(rc.date).date()
+        else:
+            desired_date = dt.date.today()
+
+        if rc.range:
+            num_of_days = int(rc.range)
+        else:
+            num_of_days = 7
+
         bad_stati = ["finished", "cancelled", "paused", "back_burner"]
         projecta = []
+        end_projecta = []
         if rc.lead and rc.person:
             raise RuntimeError(f"please specify either lead or person, not both")
         for projectum in self.gtx["projecta"]:
-            if isinstance(projectum.get('group_members'),str):
+            if isinstance(projectum.get('group_members'), str):
                 projectum['group_members'] = [projectum.get('group_members')]
             if rc.lead and projectum.get('lead') != rc.lead:
                 continue
@@ -96,14 +117,35 @@ class ProjectaListerHelper(SoutHelperBase):
                         good_p.append(i)
                 if len(good_p) == 0:
                     continue
-            if not rc.stati and projectum.get('status') in bad_stati:
+            if not rc.ended and not rc.stati and projectum.get('status') in bad_stati:
                 continue
             if rc.stati and projectum.get('status') not in rc.stati:
                 continue
+            if rc.ended and not projectum.get('end_date'):
+                continue
+            if rc.ended:
+                end_date = projectum.get('end_date')
+                if isinstance(end_date, str):
+                    end_date = date_parser.parse(end_date).date()
+                low_range = desired_date - dt.timedelta(days=num_of_days)
+                high_range = desired_date + dt.timedelta(days=num_of_days)
+                if low_range <= end_date <= high_range:
+                    end_projecta.append(projectum)
+                    continue
             projecta.append(projectum["_id"])
 
+        if rc.ended:
+            for p in end_projecta:
+                members, collaborators = None, None
+                if p.get("group_members"):
+                    members = ', '.join(p.get("group_members"))
+                if p.get("collaborators"):
+                    collaborators = ', '.join(p.get("collaborators"))
+                print("{}    {}\n    Lead: {}    Members: {}    Collaborators: {}".format(p.get("_id"),
+                                                                                          p.get("description"),
+                                                                                          p.get("lead"), members,
+                                                                                          collaborators))
         projecta.sort()
         for i in projecta:
             print(i)
         return
-
diff --git a/regolith/schemas.py b/regolith/schemas.py
index b3d09f8b..5616cf03 100644
--- a/regolith/schemas.py
+++ b/regolith/schemas.py
@@ -630,6 +630,7 @@ EXEMPLARS = {
             "status": "finalized"
         },
         "description": "My first projectum",
+        "end_date": "2020-06-05",
         "grants": "SymPy-1.1",
         "group_members": ["ascopatz"],
         "kickoff": {

Update projecta lister to list finished projecta
diff --git a/tests/outputs/a_projectum/projecta.yaml b/tests/outputs/a_projectum/projecta.yaml
index 8c91300d..c75d37dd 100644
--- a/tests/outputs/a_projectum/projecta.yaml
+++ b/tests/outputs/a_projectum/projecta.yaml
@@ -67,6 +67,7 @@
       - not needed for paper submissions
     status: finalized
   description: My first projectum
+  end_date: '2020-06-05'
   grants: SymPy-1.1
   group_members:
     - ascopatz
diff --git a/tests/test_helpers.py b/tests/test_helpers.py
index 96cbf27f..2cd6ac48 100644
--- a/tests/test_helpers.py
+++ b/tests/test_helpers.py
@@ -4,7 +4,6 @@ import pytest
 
 from regolith.main import main
 
-
 helper_map = [
     (["helper", "hello", "--person", "Simon"], "hello Simon\n"),
     (["helper", "a_proprev", "A. Einstein", "nsf", "2020-04-08", "-q",
@@ -32,6 +31,9 @@ helper_map = [
     (["helper", "l_projecta", "--verbose", "-p", "ascopatz"],
      "20ly_newprojectum\n20sb_firstprojectum\n"
      ),
+    (["helper", "l_projecta", "--ended", "-d", "2020-06-02"],
+     "20sb_firstprojectum    My first projectum\n    Lead: ascopatz    Members: ascopatz    Collaborators: aeinstein, pdirac\n"
+     ),
     (["helper", "l_grants", "-c", "-d", "2020-05-25"],
      "sym2.0, awardnr: , acctn: , 2019-06-01 to 2030-12-31\n, awardnr: , acctn: GG012345, 2015-10-01 to 2025-09-30\n"
      ),

pip install -e .
parse_log_pytest
requirements.txt
pytest
3.8
requirements/run.txt requirements/test.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
bibtexparser==1.4.3
Cerberus==1.3.7
certifi==2025.1.31
charset-normalizer==3.4.1
codecov==2.1.13
coverage==7.6.1
docutils==0.20.1
et_xmlfile==2.0.0
exceptiongroup==1.2.2
idna==3.10
iniconfig==2.1.0
Jinja2==3.1.6
MarkupSafe==2.1.5
nameparser==1.1.3
numpy==1.24.4
openpyxl==3.1.5
packaging==24.2
pandas==2.0.3
pluggy==1.5.0
pyparsing==3.1.4
pytest==8.3.5
python-dateutil==2.9.0.post0
pytz==2025.2
-e git+https://github.com/regro/regolith.git@4149d00ec65788806dde114d405d5f1cc07d4609#egg=regolith
requests==2.32.3
rever==0.3.3
ruamel.yaml==0.18.10
ruamel.yaml.clib==0.2.8
six==1.17.0
tomli==2.2.1
tzdata==2025.2
urllib3==2.2.3
xonsh==0.14.0

name: regolith
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=24.2=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - bibtexparser==1.4.3
      - cerberus==1.3.7
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - codecov==2.1.13
      - coverage==7.6.1
      - docutils==0.20.1
      - et-xmlfile==2.0.0
      - exceptiongroup==1.2.2
      - idna==3.10
      - iniconfig==2.1.0
      - jinja2==3.1.6
      - markupsafe==2.1.5
      - nameparser==1.1.3
      - numpy==1.24.4
      - openpyxl==3.1.5
      - packaging==24.2
      - pandas==2.0.3
      - pluggy==1.5.0
      - pyparsing==3.1.4
      - pytest==8.3.5
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.32.3
      - rever==0.3.3
      - ruamel-yaml==0.18.10
      - ruamel-yaml-clib==0.2.8
      - six==1.17.0
      - tomli==2.2.1
      - tzdata==2025.2
      - urllib3==2.2.3
      - xonsh==0.14.0
prefix: /opt/conda/envs/regolith

tests/test_helpers.py::test_helper_python[hm3] tests/test_helpers.py::test_helper_python[hm9]
tests/test_helpers.py::test_helper_python[hm0] tests/test_helpers.py::test_helper_python[hm1] tests/test_helpers.py::test_helper_python[hm2] tests/test_helpers.py::test_helper_python[hm4] tests/test_helpers.py::test_helper_python[hm5] tests/test_helpers.py::test_helper_python[hm6] tests/test_helpers.py::test_helper_python[hm7] tests/test_helpers.py::test_helper_python[hm8] tests/test_helpers.py::test_helper_python[hm10] tests/test_helpers.py::test_helper_python[hm11] tests/test_helpers.py::test_helper_python[hm12] tests/test_helpers.py::test_helper_python[hm13]
news/finished_projecta.rst regolith/helpers/l_projectahelper.py regolith/schemas.py
news/finished_projecta.rst regolith/helpers/l_projectahelper.py regolith/schemas.py