getregdata
Free agent skillsec-edgar-us

SEC EDGAR API

The SEC EDGAR APIs are the official US government endpoints for public-company filings. They need no key and no registration - only a declarative User-Agent header. You get company submissions, filing history and XBRL financial facts as JSON, covering SEC-registered issuers only.

Free. No key, no registration, no per-call charge. US government work in the public domain - free reuse, no licence fee. Read-only. Official docs: SEC EDGAR APIs.

Install the skill
npx skills add Nolpak14/getregdata -g -y

Teaches your agent the endpoints, the auth pattern and the failure modes below - so it runs the check correctly rather than guessing. Read SKILL.md

What the API returns

What you get, for free

Company submissions
CIK, legal name, tickers and exchanges, SIC code and description, EIN, state of incorporation, business and mailing addresses, and former names.
Filing history
The statutory filing stream - 10-K annual, 10-Q quarterly, 8-K material events, Form 4 insider trades - with filing date, report date, accession number and primary document.
XBRL financial facts
Machine-readable financials tagged to US-GAAP and DEI concepts such as Assets, Revenues and NetIncomeLoss, each as a time series of period-end values taken from the filings.
Full-text search
Keyword search across filing bodies from 2001 to the present, filterable by form type and date range.
Authentication

Getting an API key

  1. There is no key and nothing to register.
  2. The SEC requires a declarative User-Agent naming your application and a contact email, in the form "Sample Company Name AdminContact@example.com".
  3. A missing, empty or non-declarative User-Agent returns 403 Forbidden on every endpoint.
export SEC_UA="getregdata-skill admin@example.com"

curl -H "User-Agent: $SEC_UA" \
  "https://data.sec.gov/submissions/CIK0000320193.json"

Fair-access limit is 10 requests per second with no burst allowance. Sustained abuse triggers a temporary IP block.

Reference

Endpoints

Purpose Call
Full-text search (2001-present) GET efts.sec.gov/LATEST/search-index?q={term}&forms={form}
Company submissions by CIK GET data.sec.gov/submissions/CIK{10-digit}.json
All XBRL company facts GET data.sec.gov/api/xbrl/companyfacts/CIK{10-digit}.json
A single XBRL concept GET data.sec.gov/api/xbrl/companyconcept/CIK{10}/{taxonomy}/{tag}.json
Ticker to CIK map GET www.sec.gov/files/company_tickers.json
Workflow

Running a KYB check end to end

  1. 1
    Resolve identity

    From a ticker, read company_tickers.json and zero-pad cik_str. From a name, use full-text search and read _source.cik from the hits. Skip if you already hold a CIK.

  2. 2
    Confirm it is a live filer

    Pull submissions and capture name, tickers, exchanges, sicDescription, stateOfIncorporation and EIN. A filer with no recent filings may be dormant or deregistered.

  3. 3
    Read what it has filed

    filings.recent holds parallel arrays - form, filingDate, reportDate, accessionNumber, primaryDocument, isXBRL. The latest 10-K is the annual report; 8-K clusters signal material events; Form 4 is insider trading.

  4. 4
    Pull the numbers

    Fetch one concept with companyconcept, or everything at once with companyfacts, then take the latest units.USD entry for the current figure.

Failure modes

What bites people

The CIK must be zero-padded to 10 digits

Every data.sec.gov path wants CIK0000320193.json, not CIK320193.json. company_tickers.json returns cik_str as an un-padded integer, so you have to pad it yourself before building the URL. This is the single most common cause of a 404 here.

EDGAR has no active/dissolved flag

Unlike a company register, submissions tells you about a filer rather than a status. There is no field that says the company is alive. Your liveness signal is the newest filingDate in filings.recent - a company that deregistered, went private or was acquired simply goes quiet.

XBRL units.USD is a time series, not one number

Each concept holds many entries of end, val, accn, fy, fp and form across years and periods. Sort by end or fy and take the latest for the current figure, and mind fp - FY is a full year while Q1 to Q3 are quarters. Do not sum overlapping periods.

filings.recent caps at about 1,000 filings

For a long-lived filer, older filings are paginated into filings.files, where each entry points at a further JSON page you fetch separately. Walk those pages only if you genuinely need full history; most KYB checks do not.

403 almost always means the User-Agent

A 403 Forbidden on any endpoint is usually a missing, empty or non-declarative User-Agent. Set it before diagnosing anything else. A 403 that appears only after many calls means you crossed 10 requests per second - back off, there is no burst allowance.

Full-text search starts at 2001

It returns Elasticsearch-shaped JSON - read hits.total.value for the count and iterate hits.hits._source. Pre-2001 filings will never appear; use submissions for those.

Where the free API stops

The jurisdictions with no free equivalent

The UK is the outlier. Most European registers publish through portals built for people, not a general-purpose API - so the next jurisdiction you need probably has no free option. These read the official source live and return the same shape of structured record.

United States · Private California company recordsPoland · Beneficial owners (UBO)Germany · Company, officers and capitalFrance · Directors, financials, shareholdersSpain · Company directory, NIF and officersItaly · Full profile, P.IVA and certified PEC
FAQ

Does the SEC EDGAR API need an API key?

No. There is no key and nothing to register. The one requirement is a declarative User-Agent header naming your application and a contact email. Without it every endpoint returns 403 Forbidden, which is why so many first attempts fail.

What is the SEC EDGAR rate limit?

Ten requests per second, with no burst allowance. Sustained abuse triggers a temporary IP block. Throttle deliberately rather than relying on retries.

Can I get financial statements from EDGAR as JSON?

Yes, through the XBRL endpoints. companyconcept returns one tagged concept such as us-gaap/Assets; companyfacts returns everything the filer has tagged. Both come back as time series, so sort by period end and mind whether an entry is a full year or a quarter.

Does EDGAR cover private US companies?

No. EDGAR covers SEC-registered issuers - public companies and large filers. Private US companies and small businesses are absent entirely, which is what the California Secretary of State and UCC lookups cover instead.

How do I tell whether a company is still trading?

EDGAR will not tell you directly. Check the newest filingDate in filings.recent: a filer that has stopped filing has deregistered, gone private or been acquired. For a real status flag you need a company register, not a filings system.

All agent skills Paid registry coverage