DEV Community

juhwandad
juhwandad

Posted on

How to Get Clean SEC EDGAR Filing Data (Without Getting Rate-Limited)

If you've ever tried to pull U.S. company filings straight from SEC EDGAR, you know the pain. The data is free and public — but using it in a real app is a different story.

Here's the problem, and a shortcut I built to get around it.

The problem with raw EDGAR

SEC's official API at data.sec.gov is great until you actually depend on it:

  1. Rate limits. You're capped at 10 requests/second, and if you cross it your IP is blocked for ~10 minutes. That's fine for a script, brutal for a production feature.
  2. Inconsistent shape. Every form type and endpoint returns a slightly different JSON structure. Parsing becomes a maintenance tax.
  3. Missing metadata. You get a CIK and a raw SIC code — but no sector, no industry, no exchange, and no idea what an 8-K "item 2.02" actually means.

So you end up writing a crawler, a cache, a rate-limiter, a SIC→sector map, and an 8-K item lookup table… just to answer "what did Apple just file?"

The shortcut

I got tired of rebuilding that every project, so I packaged it into a small API that crawls, caches, and enriches EDGAR for you. It's served entirely from a cache (refreshed every 6 hours), so you never hit SEC's rate limits, and every response uses one consistent schema.

Four endpoints:

  • GET /companies/{ticker} — enriched company: CIK, exchange, sector, industry
  • GET /companies/{ticker}/filings — a company's filings, filter by form (8-K, 10-K, 10-Q…)
  • GET /filings/latest — latest 8-K feed, filter by sector
  • GET /funds/{cik}/13f/latest — parsed 13F institutional holdings

Quick example

Grab a free key from the listing page, then:

curl "https://sec-edgar-data-api1.p.rapidapi.com/companies/AAPL" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sec-edgar-data-api1.p.rapidapi.com"
Enter fullscreen mode Exit fullscreen mode
{
  "cik": "0000320193",
  "ticker": "AAPL",
  "name": "Apple Inc.",
  "exchange": "Nasdaq",
  "sic": "3571",
  "sic_description": "Electronic Computers",
  "sector": "Information Technology",
  "industry": "Industrial Machinery & Computer Equipment",
  "fiscal_year_end": "0926"
}
Enter fullscreen mode Exit fullscreen mode

Note the sector and industry fields — SEC doesn't give you those. They're derived from the SIC code so you can filter and group companies without maintaining your own mapping.

In Python:

import requests

BASE = "https://sec-edgar-data-api1.p.rapidapi.com"
HEADERS = {
    "X-RapidAPI-Key": "YOUR_KEY",
    "X-RapidAPI-Host": "sec-edgar-data-api1.p.rapidapi.com",
}

# Latest 8-K filings in Health Care, with plain-English item labels
r = requests.get(f"{BASE}/filings/latest",
                 headers=HEADERS,
                 params={"form": "8-K", "sector": "Health Care", "limit": 5})

for f in r.json()["filings"]:
    print(f["ticker"], f["filing_date"], f["item_descriptions"])
Enter fullscreen mode Exit fullscreen mode
LLY  2026-04-30  ['Results of Operations and Financial Condition', 'Financial Statements and Exhibits']
MRK  2026-04-29  ['Other Events', 'Financial Statements and Exhibits']
...
Enter fullscreen mode Exit fullscreen mode

That item_descriptions field is the other bit of enrichment — instead of decoding 2.02 and 9.01 yourself, you get what the 8-K actually reports.

Institutional holdings (13F)

curl "https://sec-edgar-data-api1.p.rapidapi.com/funds/1067983/13f/latest" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sec-edgar-data-api1.p.rapidapi.com"
Enter fullscreen mode Exit fullscreen mode

Returns Berkshire Hathaway's latest 13F with holdings parsed out of the information table — issuer, CUSIP, value, and share count — so you don't have to fetch and parse the XML yourself.

Pricing

There's a free tier (500 calls/month) to try it, then paid tiers for higher volume. Billing runs through RapidAPI, so you just need a RapidAPI key.

Fair warning

This is an independent project and is not affiliated with or endorsed by the U.S. SEC. The data comes from public EDGAR filings, and nothing here is financial advice — always verify against the primary source for anything that matters.


I built this to scratch my own itch, and I'd genuinely like it to be useful to others building screeners, alerts, or research tools. What filing types or fields would make this actually fit your workflow? Let me know in the comments — I'm actively adding to it.

👉 SEC EDGAR Data API on RapidAPI

Top comments (0)