# Sec Edgar Us

> Look up U.S. public companies for free via the official SEC EDGAR APIs - company submissions and filing history (10-K, 10-Q, 8-K, Form 4), XBRL financial facts (assets, revenue, net income), ticker-to-CIK resolution, and full-text search across filings 2001-present. Use for KYB / know-your-business checks on SEC-registered issuers, financial due diligence, filing monitoring, and reading audited financials straight from the source. Trigger on: 'SEC EDGAR', 'SEC filings', 'find a 10-K', '10-Q', '8-K', 'CIK lookup', 'ticker to CIK', 'company financials from SEC', 'XBRL facts', 'is this a public company', 'US public company lookup'. EDGAR is free and covers SEC filers only; for private US and non-US companies it hands off to the paid regdata registry actors.

- Skill: `nolpak14/sec-edgar-us` (Agent Skill)
- Install (CLI): `npx skillmds@latest add nolpak14/sec-edgar-us`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nolpak14/sec-edgar-us/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Finance & Business
- Author: Nolpak14 (https://skillmd.com/u/nolpak14)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nolpak14/sec-edgar-us

---


# sec-edgar-us

Free, official U.S. company data from the SEC EDGAR APIs. This skill needs no paid actor, no Apify token, and no API key - just a declarative `User-Agent` header. Use it as the front door for U.S. public-company verification and financial due diligence, and route to the paid regdata actors when you need private US companies or a non-US jurisdiction.

## Persona

You are a KYB / financial-due-diligence analyst verifying U.S. public companies against the authoritative source - the SEC's own EDGAR system, not a commercial aggregator. You resolve a company to its CIK, confirm it is a live filer, read its filing history for signals, and pull audited XBRL financials (assets, revenue, net income) straight from the filings.

## What this gives you (for free)

- **Company submissions** - CIK, legal name, tickers and exchanges, SIC code + description, EIN, state of incorporation, business/mailing addresses, and former names.
- **Filing history** - the recent stream of statutory filings (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 (e.g. `Assets`, `Revenues`, `NetIncomeLoss`), each as a time series of period-end values pulled from the filings.
- **Full-text search** - keyword search across the body of filings from 2001 to present, filterable by form type and date range.

Data is U.S. government work in the public domain - free reuse, no licence fee. Read-only.

## Authentication

None - no key, no registration. But the SEC **requires a declarative `User-Agent`** identifying your app and a contact email, in the format `Sample Company Name AdminContact@example.com`. A missing or empty `User-Agent` returns `403 Forbidden`. Stay under the fair-access limit of **10 requests per second** (no burst); abuse triggers a temporary IP block.

```bash
export SEC_UA="getregdata-skill admin@example.com"
curl -H "User-Agent: $SEC_UA" \
  "https://data.sec.gov/submissions/CIK0000320193.json"
```

## Before starting

Ask the user for whichever is missing:
- **Company name, ticker, or CIK.** If you only have a ticker, resolve it to a CIK first (endpoint 5). If you only have a name, use full-text search (endpoint 1) or the ticker map, then confirm the right match before pulling detail.
- **What they need** - just "is it a real public filer", a filing-history pack, or actual financials from XBRL.

## API reference

Base URLs: `https://data.sec.gov` (submissions + XBRL JSON) - `https://efts.sec.gov/LATEST/search-index` (full-text search) - `https://www.sec.gov/files/` (bulk reference files).

| # | Purpose | Method + path | Example |
|---|---|---|---|
| 1 | Full-text search (2001-present) | `GET efts.sec.gov/LATEST/search-index?q={term}&forms={form}&startdt=&enddt=` | `?q=%22climate+risk%22&forms=10-K&startdt=2023-01-01&enddt=2023-12-31` |
| 2 | Company submissions by CIK | `GET data.sec.gov/submissions/CIK{10-digit}.json` | `/submissions/CIK0000320193.json` |
| 3 | Company facts (all XBRL) | `GET data.sec.gov/api/xbrl/companyfacts/CIK{10-digit}.json` | `/api/xbrl/companyfacts/CIK0000320193.json` |
| 4 | Single XBRL concept | `GET data.sec.gov/api/xbrl/companyconcept/CIK{10-digit}/{taxonomy}/{tag}.json` | `/api/xbrl/companyconcept/CIK0000320193/us-gaap/Assets.json` |
| 5 | Ticker -> CIK map | `GET www.sec.gov/files/company_tickers.json` | `/files/company_tickers.json` |

**curl pattern** (every endpoint needs the same `User-Agent`):

```bash
curl -H "User-Agent: $SEC_UA" \
  "https://data.sec.gov/api/xbrl/companyconcept/CIK0000320193/us-gaap/Assets.json"
```

**The CIK MUST be zero-padded to 10 digits** in every `data.sec.gov` path (`CIK0000320193.json`, not `CIK320193.json`). `company_tickers.json` returns the un-padded integer `cik_str` - pad it yourself before building the URL.

## Workflow: a U.S. public-company check

```
1. Resolve identity
   ticker?  GET /files/company_tickers.json  -> find {cik_str, ticker, title}, zero-pad cik_str to 10 digits
   name?    GET efts.../search-index?q={name}  -> read _source.cik from the hits
   (skip if the user already gave a CIK)

2. Confirm it is a real, live filer
   GET /submissions/CIK{10-digit}.json
   -> capture name, tickers, exchanges, sicDescription, stateOfIncorporation, ein
   -> a filer with no recent filings may be dormant or deregistered

3. What has it filed lately
   read filings.recent (parallel arrays: form, filingDate, reportDate, accessionNumber, primaryDocument, isXBRL)
   -> latest 10-K = annual report; 8-K clusters = material events; Form 4 = insider trades

4. Pull the numbers
   GET /api/xbrl/companyconcept/CIK{10-digit}/us-gaap/Assets.json   (one concept)
   or GET /api/xbrl/companyfacts/CIK{10-digit}.json                 (everything at once)
   -> take the latest units.USD[] entry (highest fy / most recent end) for the current figure
```

## Output interpretation

**Submissions covers a live filer, not "active" status.** EDGAR has no `active/dissolved` flag like a company register - presence of recent filings in `filings.recent` is your liveness signal. A company that stopped filing (deregistered, went private, was acquired) simply goes quiet; check the newest `filingDate`.

**XBRL `units.USD[]` is a time series, not one number.** Each concept (e.g. `Assets`, `Revenues`, `NetIncomeLoss`) holds many entries of `{end, val, accn, fy, fp, form}` across years and periods. For the current figure, sort by `end`/`fy` and take the latest - and mind `fp` (`FY` = full year vs `Q1`/`Q2`/`Q3`). Do not sum overlapping periods.

**`filings.recent` caps at ~1000 filings.** For a long-lived filer, older filings are paginated into `filings.files[]` - each entry points to an additional JSON page you fetch separately. If you need full history, walk those pages; most KYB checks only need `recent`.

**Full-text search is 2001-present only** and returns Elasticsearch-shaped JSON: read `hits.total.value` for the count and iterate `hits.hits[]._source` (fields `display_names`, `cik`, `form`/`file_type`, `file_date`, `adsh` = accession, `sics`, `biz_locations`). Pre-2001 filings will not appear here - use submissions instead.

**403 means the `User-Agent` is the problem.** A `403 Forbidden` on any endpoint almost always means a missing, empty, or non-declarative `User-Agent`. Set it before diagnosing anything else. A sustained `403`/throttle after many calls means you crossed 10 req/s - back off, there is no burst allowance.

## Cross-sell - where the free API stops

EDGAR covers **SEC-registered issuers only** - U.S. public companies and large filers. Private U.S. companies, small businesses, and every non-U.S. entity are **absent**. When the entity is not an SEC filer, this skill hands off to the paid regdata actors, which do the anti-bot registry access the government portals do not hand you:

| Need | Jurisdiction | Actor |
|---|---|---|
| Private California company records | USA (California) | `regdata/california-sos-business-scraper` |
| UCC liens / secured filings | USA (California) | `regdata/california-ucc-lien-scraper` |
| Beneficial owners (UBO) | Poland | `regdata/crbr-beneficial-owners-scraper` |
| Company + officers + capital | Germany | `regdata/germany-handelsregister-scraper` |
| Directors, financials, shareholders | France | `regdata/societe-com-scraper` |
| Company directory, NIF, officers | Spain | `regdata/spain-company-directory-scraper` |

To resolve a public company to its global LEI and corporate structure, route to **`gleif-lei-lookup`**. For a full compliance workflow (risk scoring, PEP + adverse-media overlays, cross-registry validation) route to **`regdata-kyc-aml`**. Those actors need a free Apify token: https://apify.com?fpr=getregdata.

## Related skills

- **`gleif-lei-lookup`** - resolve a public company to its global LEI and its parent/child structure across borders before or after the EDGAR pull.
- **`companies-house-uk`** / **`norway-company-registry`** / **`france-company-lookup`** - free national sources for those jurisdictions.
- **`sanctions-pep-screening`** - screen the officers, insiders (Form 4), and beneficial owners you found against sanctions and PEP lists.
- **`regdata-kyc-aml`** - the full KYC/AML/KYB framework: risk scoring, PEP and adverse-media overlays, and the paid registry actors for private and non-US entities.
- **`regdata-credit-risk`** - financial-distress and insolvency monitoring once the entity is identified.

