Accounting and Auditing Enforcement Releases (AAER)
List SEC Accounting and Auditing Enforcement Releases as JSON, count them by year and separate actions against auditors from actions against companies.
Accounting and Auditing Enforcement Releases (AAERs) are the SEC's enforcement actions involving financial reporting: misstated financial statements, improper revenue recognition, and auditors who failed to follow professional standards. Researchers use them as a list of known accounting misconduct cases. /v1/enforcement/aaer returns them as JSON, newest first, 100 per page.
Most AAERs are issued together with an administrative proceeding or a litigation release, so a single action carries several numbers, for example 33-11450, 34-106568, AAER-4604.
Fields
Each release has the same shape as the other enforcement endpoints:
| Field | Meaning |
|---|---|
publishedAt | Publication time |
title | Respondents: a company, an individual, or both |
releaseNo | Every number the action carries, including the AAER number |
url, documents | The order or complaint, usually a PDF |
The code
import os
import re
from collections import Counter
import requests
BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}
aaers, page = [], 0
while True:
r = requests.get(f"{BASE}/v1/enforcement/aaer", params={"page": page}, headers=HEADERS, timeout=120)
r.raise_for_status()
rows = r.json()["releases"]
aaers += rows
if not rows or rows[-1]["publishedAt"] < "2025-01-01":
break
page += 1
aaers = [a for a in aaers if a["publishedAt"] >= "2025-01-01"]
print(len(aaers), "AAER releases since 2025-01-01")
def aaer_no(rel):
m = re.search(r"AAER-(\d+)", rel.get("releaseNo") or "")
return int(m.group(1)) if m else None
nums = [n for n in map(aaer_no, aaers) if n]
print(f"AAER numbers {min(nums)} to {max(nums)}")
print("\nPer year:")
for year, n in sorted(Counter(a["publishedAt"][:4] for a in aaers).items()):
print(f" {year} {n}")
cpa = [a for a in aaers if re.search(r"\bCPA\b", a["title"])]
print(f"\nReleases naming a CPA as respondent: {len(cpa)} of {len(aaers)}")
paired = [a for a in aaers if re.search(r"\b33-\d+|\b34-\d+", a.get("releaseNo") or "")]
print(f"Also numbered as Securities Act or Exchange Act releases: {len(paired)}")
print("\nLatest five:")
for a in aaers[:5]:
print(f" {a['publishedAt'][:10]} AAER-{aaer_no(a)} {a['title'][:50]}")
The loop stops once a page reaches releases older than the start date, then trims to the window.
Output
Run on 2026-10-13.
45 AAER releases since 2025-01-01
AAER numbers 4555 to 4605
Per year:
2025 22
2026 23
Releases naming a CPA as respondent: 27 of 45
Also numbered as Securities Act or Exchange Act releases: 41
Latest five:
2026-10-08 AAER-4605 Carlos Lopez, CPA
2026-10-01 AAER-4604 Latch, Inc.
2026-09-30 AAER-4603 Travel + Leisure Co.
2026-09-23 AAER-4602 L&L Energy, Inc. and Dickson Lee, CPA (Order Grant
2026-09-22 AAER-4601 Nihat Cardak
Reading the result
- AAER numbers are sequential, so the range (4555 to 4605) is a quick count check against the list.
- Most releases in this window name a CPA. Many are follow-on orders under Rule 102(e) of the SEC's Rules of Practice that suspend an accountant from appearing before the Commission.
- 41 of 45 also carry a Securities Act or Exchange Act release number: the AAER label is attached to an action brought under those statutes.
Variations
- Match to filings: for company respondents, look up the CIK with
/v1/mapping/name?name=<company>and pull its 10-K and 10-K/A history to see restatements. - Restatement signal: combine with 8-K Item 4.02 restatements.
- Older history: keep paging past 2025; each page covers about 100 releases.