DEV Community

NexGenData
NexGenData

Posted on • Originally published at thenextgennexus.com

SEC Enforcement Actions API: Build a Compliance Watchlist

TL;DR. The SEC publishes every formal enforcement action as a Litigation Release (LR) on sec.gov, plus the underlying Administrative Proceedings (AP) and Civil Action complaints. These are public, free, and unstructured HTML. For compliance watchlists, AML name screening, law-firm conflict checks, or empirical research, you need them as structured data with defendants, charges, monetary sanctions, and case citations extracted. This guide covers the SEC's enforcement publication structure, the charge taxonomy that matters for downstream filtering, and a working Python pipeline using the SEC Litigation Releases actor.

How the SEC publishes enforcement actions

The SEC's Division of Enforcement issues three main public artifacts:

  • Litigation Releases (LR-XXXXX) — short narrative summaries of civil actions filed in federal court. New ones land at sec.gov/litigation/litreleases typically within 1–2 business days of filing.
  • Administrative Proceeding Releases (AP-XXXXX or Release No. XXXXX) — for actions resolved within the SEC's in-house administrative tribunal (cease-and-desist orders, suspensions, bars).
  • Complaint PDFs and Order PDFs — the underlying legal documents, linked from each release page.

The SEC's enforcement actions data page provides some aggregate statistics but does not expose a per-action JSON API. The release pages themselves are clean HTML — the parsing problem is moderate (defendant names, case citations, charge codes are not in consistent fields) but tractable.

The charge taxonomy that matters

For compliance watchlist use, you typically care about which statute and which conduct. The SEC's most-cited charging statutes:

  • Securities Act §17(a) — fraud in the offer or sale of securities
  • Exchange Act §10(b) / Rule 10b-5 — fraud in connection with the purchase or sale (insider trading, accounting fraud)
  • Investment Advisers Act §206 — fraud or deceit on advisory clients
  • Investment Company Act §17 — affiliated transactions, custody
  • FCPA — Exchange Act §13(b)(2) — books-and-records and internal-controls for foreign bribery cases
  • Whistleblower retaliation — Exchange Act §21F

For AML and law-firm conflict screening, the defendant identity matters more than the charge — you want clean entity and individual extraction with normalization (Smith vs. Smith Jr. vs. John A. Smith).

Working Python example

The SEC Litigation Releases actor normalizes defendants, extracts charging statutes, and parses monetary sanctions. Curl:


    curl -X POST "https://api.apify.com/v2/acts/nexgendata~sec-litigation-releases/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"since": "2026-01-01", "includeDefendants": true, "maxResults": 500}'

Enter fullscreen mode Exit fullscreen mode

Python — daily compliance watchlist match:


    import os, json, urllib.request

    APIFY_TOKEN = os.environ["APIFY_TOKEN"]
    ACTOR = "nexgendata~sec-litigation-releases"

    # Your firm's counterparty / customer list
    watchlist = {"acme capital management", "redwood securities llc", "john m doe"}

    payload = json.dumps({
        "since": "2026-05-01",
        "includeDefendants": True,
    }).encode("utf-8")

    url = f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items?token={APIFY_TOKEN}"
    req = urllib.request.Request(url, data=payload, method="POST",
                                  headers={"Content-Type": "application/json"})

    with urllib.request.urlopen(req, timeout=600) as r:
        releases = json.loads(r.read())

    for rel in releases:
        defendants = {d.lower() for d in rel.get("defendants", [])}
        hits = defendants & watchlist
        if hits:
            print(f"HIT: {rel['releaseNumber']} -- {hits}")
            print(f"   {rel['headline']}")
            print(f"   {rel['url']}")

Enter fullscreen mode Exit fullscreen mode

Returned shape:


    {
      "releaseNumber": "LR-26031",
      "releaseDate": "2026-05-15",
      "headline": "SEC Charges Acme Capital and Its CEO with Securities Fraud",
      "defendants": ["Acme Capital Management LLC", "Jane Doe"],
      "charges": ["Securities Act 17(a)", "Exchange Act 10(b)", "Rule 10b-5"],
      "sanctions": {"disgorgement": 4500000, "civil_penalty": 2000000},
      "court": "S.D.N.Y.",
      "url": "https://www.sec.gov/litigation/litreleases/2026/lr26031.htm",
      "complaintUrl": "https://www.sec.gov/litigation/complaints/2026/comp26031.pdf"
    }

Enter fullscreen mode Exit fullscreen mode

What you can build on top

  • AML name-screening append — augment your existing OFAC / sanctions screening with SEC enforcement defendants. Catches recently charged entities before they hit traditional adverse-media providers.
  • Law firm intake conflict check — automatic search of new clients against the past 24 months of SEC litigation.
  • Compliance trend monitoring — track which charging statutes are trending YoY (e.g., crypto-related Securities Act §17(a) cases since 2022, marketing rule enforcement since the 2024 amendments).
  • Empirical legal research — sanction-amount distributions by charge type, judge / jurisdiction patterns, settlement-vs-trial rates.

Comparison: SEC enforcement data sources

Source Coverage Structured fields Cost
SEC.gov Litigation Releases (raw HTML) Every LR + AP, back to 1995 Headline, date, URL — you parse the rest Free
Westlaw / Lexis SEC No-Action Includes underlying complaints and orders Yes $200–$600/seat/mo
NERA / Cornerstone empirical reports Aggregate stats only Yes — but aggregated Public reports free; per-case data not redistributed
SEC Action Tracker (Stanford Securities Class Action Clearinghouse) Securities class actions specifically Yes Free (academic)
SEC Litigation Releases actor All LRs + linked APs Defendants, charges, sanctions, court PPE per release

Practical compliance pattern

Most RegTech compliance setups pair SEC enforcement data with FINRA BrokerCheck disclosures, OFAC sanctions, and adverse media. A nightly job pulling the past 30 days of LRs, deduping by release number, and intersecting against your watchlist is ~50 lines of Python and runs in under a minute.

Defendant-name normalization is the hard part

The SEC's litigation releases are written by enforcement staff and do not follow a single naming convention. "Acme Capital Management LLC" might also appear in another release as "Acme Capital Mgmt LLC" or "Acme Capital." Individual defendants get treated similarly — middle initials drop in and out, "Jr." appears in some releases and not others. For meaningful watchlist matching:

  • Normalize both the watchlist and the extracted defendant names: lowercase, strip punctuation, expand common abbreviations ("Mgmt" → "Management", "LLC" → "Llc" or stripped), drop trailing entity-type tokens for the comparison pass
  • Use fuzzy matching (Jaro-Winkler ≥ 0.92 is a sensible default) for the second pass
  • Always preserve the original strings for human review — never silently match
  • For individuals, include known aliases and prior names where you have them

The actor's defendants field is already post-normalized to a canonical form, which removes most of this work — but for high-stakes compliance (e.g., regulated bank AML programs) you'll still want a human review queue on every match.

Coverage of administrative proceedings

Litigation Releases cover SEC civil actions filed in federal court. Administrative Proceedings — actions resolved within the SEC's own administrative tribunal — are published separately as Releases No. (Securities Act, Exchange Act, Advisers Act, or Investment Company Act) and as orders. The bulk of SEC enforcement by case count actually settles through APs, not federal court, so for comprehensive compliance coverage you want both. The actor surfaces both streams.

For 8-K material-event surveillance alongside enforcement tracking, see our SEC 8-K filings guide. For monitoring private-placement issuers via Form D filings — useful for spotting suspect offerings before enforcement hits — see the Form D guide.

This same enforcement-watchlist pattern is what powers event-driven trading workflows on press release feeds — same architecture, different source.

Get started: Pull the past 90 days of SEC Litigation Releases at the actor page.

Related Reading

More from this series:

From the press release / event-driven series:

Top comments (0)