Home / Guides / Enforcement
Enforcement

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:

FieldMeaning
publishedAtPublication time
titleRespondents: a company, an individual, or both
releaseNoEvery number the action carries, including the AAER number
url, documentsThe 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.

Next steps

More enforcement guides

Run this guide with your own key

500 free API calls a month. Every example on this page works on the free plan.

Get free API key →