SEC EDGAR API: 10-K, 10-Q, 8-K & XBRL Financials avatar

SEC EDGAR API: 10-K, 10-Q, 8-K & XBRL Financials

Pricing

from $1.05 / 1,000 company resolveds

Go to Apify Store
SEC EDGAR API: 10-K, 10-Q, 8-K & XBRL Financials

SEC EDGAR API: 10-K, 10-Q, 8-K & XBRL Financials

Look up US companies by ticker, CIK or name and get SEC EDGAR 10-K, 10-Q and 8-K filings with document URLs, plus XBRL company facts (revenue, net income, EPS, assets) as JSON rows. For research tools and AI agents. $1.50 per 1,000 companies, $1 per 1,000 filings. Not investment advice.

Pricing

from $1.05 / 1,000 company resolveds

Rating

0.0

(0)

Developer

Fairquery

Fairquery

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

SEC EDGAR API: 10-K, 10-Q, 8-K Filings & XBRL Financials

What does it do?

This SEC EDGAR API turns the SEC's public EDGAR data into clean JSON rows. Look up a company by ticker, CIK or name and get its official entity data, recent 10-K, 10-Q and 8-K filings with document URLs, 8-K item codes, Form 4 insider transactions, EDGAR full-text search hits, new-filing alerts, XBRL company facts (Assets, Revenues, NetIncomeLoss, diluted EPS and more) and, optionally, plain-text excerpts from the filing.

Every row carries the SEC source URL, a timestamp and a schema version, and errors come back as machine-readable codes. It reads only the SEC's own public endpoints (www.sec.gov, data.sec.gov, efts.sec.gov), within the SEC's fair-access limit. Not investment advice.

How much does it cost?

Pay per event, no subscription. Prices per 1,000 rows:

EventFree planStarter (Bronze)Scale (Silver)Business (Gold)
company-resolved (primary)$1.50$1.35$1.20$1.05
filing$1.00$1.00$1.00$1.00
financial-fact$0.20$0.20$0.20$0.20
text-excerpt (optional)$2.00$2.00$2.00$2.00
insider-transaction$1.00$1.00$1.00$1.00
eight-k-item$0.50$0.50$0.50$0.50
search-hit$2.00$2.00$2.00$2.00

The Apify Free plan includes $5 of usage every month, no credit card needed, and this Actor's event charges come out of that $5. A company with 5 filings and 16 fact rows costs under $0.01 ($9.70 per 1,000 such companies), so $5 covers about 500 companies like that a month. Error rows are never charged; each run also pays a start fee of $0.05 per 1,000 runs.

Example (Free-plan prices): Apple and Microsoft, 5 filings and 16 fact rows each: 2 × ($1.50/1,000) + 10 × ($1.00/1,000) + 32 × ($0.20/1,000) = about $0.02 ($19.40 per 1,000 such runs). One company and 5 Form 4 transaction rows is $6.50 per 1,000 such runs. One company and 3 current-report rows is $3.00 per 1,000 such runs. 20 full-text hits is $40.00 per 1,000 such runs. onlyNew uses the company-resolved and filing prices; a check with no new filing is $1.50 per 1,000 companies.

Paid Apify plans get the Store discount automatically: Starter = Bronze, Scale = Silver, Business = Gold. Set a maximum cost per run in the run options and the Actor stops cleanly at that limit.

How to use it

  1. Enter Companies as tickers, CIKs or names (for example AAPL, 0000789019, Tesla).
  2. Pick a Mode: filings, facts, both, insider (Form 4), 8k_items, search (set Full-text search query), or onlyNew for a scheduled alert. Choose form types, a start date and the XBRL metrics you want.
  3. Click Start and export the rows as JSON, CSV or Excel, or call it from an AI agent through Apify's MCP server.

Example input

{
"companies": [
"AAPL"
],
"mode": "both",
"formTypes": [
"10-K"
],
"maxFilingsPerCompany": 1,
"metrics": [
"Assets"
],
"maxFactsPerMetric": 1
}

Example output (2 rows from a real run on 2026-10-19, shortened to the main fields):

[
{
"type": "filing",
"ticker": "AAPL",
"cik": "0000320193",
"form": "10-K",
"filing_date": "2025-10-31",
"report_date": "2025-09-27",
"accession_number": "0000320193-25-000079",
"document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm",
"source_url": "https://data.sec.gov/submissions/CIK0000320193.json"
},
{
"type": "fact",
"ticker": "AAPL",
"concept": "Assets",
"unit": "USD",
"value": 383266000000,
"end": "2026-06-27",
"form": "10-Q",
"fy": 2026,
"fp": "Q3",
"source_url": "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json"
}
]

FAQ

Is there a free SEC EDGAR API?

Yes: the SEC publishes free JSON endpoints at data.sec.gov, with a fair-access limit and no API key. This Actor reads those endpoints and returns tidy rows, so you skip writing the ticker-to-CIK mapping, paging and XBRL parsing yourself. On Apify's Free plan, $5 of usage a month covers roughly 500 company lookups with filings and facts.

How do I get 10-K and 10-Q filings as JSON?

Enter the ticker, set formTypes to 10-K and 10-Q, and each filing comes back as one JSON row with its accession number, dates and document URL.

Can I get revenue, net income and EPS from XBRL?

Yes. Set metrics (for example Revenues, NetIncomeLoss, EarningsPerShareDiluted) and each reported value becomes a fact row with its period and unit.

Does it give stock prices or real-time quotes?

No. It covers SEC filings and XBRL facts only, not market data, options or non-US registries.

Can I get Form 4 insider transactions?

Yes. Set mode to insider. Each transaction or holding on the Form 4 XML becomes one row with the reporting owner, trade date, transaction code, shares, price, and shares owned afterward. The default form list is 10-K, 10-Q, and 8-K; insider mode still reads Form 4 and 4/A unless you name Form 3, 4, or 5 yourself.

Can I filter 8-Ks by item, or alert only on new filings?

Yes. mode: "8k_items" returns one row per 8-K with item_codes such as 2.02 and 5.02. itemCodes keeps filings that contain at least one of those codes. mode: "onlyNew" (or onlyNew: true on filings, 8-K, or insider runs) stores a per-company cursor in edgar-filing-alerts and returns what was accepted after the previous run.

Can I search the text of filings without a monthly plan?

Yes. mode: "search" calls the SEC full-text index and charges search-hit for each hit returned ($2.00 per 1,000). Leave companies empty to search all filers. The index does not include the document body; use document_url to open the file.

Limits

Data comes from SEC EDGAR as published, with no warranty of completeness. Not investment advice.

When to use this (LLM / tool selection)

Use this Actor when an agent needs:

  • Map a ticker, CIK, or company name → official SEC CIK / entity metadata
  • Recent SEC filings (10-K, 10-Q, 8-K, …) with document URLs
  • Form 4 insider transactions (mode: "insider") and 8-K item codes (mode: "8k_items")
  • EDGAR full-text search (mode: "search"), charged per hit
  • New filings since the last run (mode: "onlyNew" or onlyNew: true), including an 8-K item filter
  • XBRL company facts (Assets, NetIncomeLoss, EPS, …) from companyfacts
  • Optional plain-text excerpts from primary filing documents

Do not use it for realtime quotes, options chains, Form 13F holdings, or non-US registries.

MCP connection (Apify hosted)

Connect any MCP client to Apify’s MCP server with this Actor scoped in:

{
"mcpServers": {
"fairquery-edgar": {
"type": "http",
"url": "https://mcp.apify.com/?tools=fetch-actor-details,fairquery/edgar-company-facts-filings"
}
}
}

Clients without OAuth can add "headers": {"Authorization": "Bearer <APIFY_TOKEN>"}.

MCP URL: https://mcp.apify.com/?tools=fetch-actor-details,fairquery/edgar-company-facts-filings

Actor id: fairquery/edgar-company-facts-filings (lowercase).

Example agent prompts

  • "Using the EDGAR tool, get Apple's and Microsoft's 10-K and 10-Q filings since 2023 and their latest Assets, NetIncomeLoss and diluted EPS."
  • "Find the CIK for Nvidia and list its last five 8-K filings with links."

Data sources (SEC fair access)

ResourceURL
Tickers maphttps://www.sec.gov/files/company_tickers.json
Submissionshttps://data.sec.gov/submissions/CIK##########.json
Company factshttps://data.sec.gov/api/xbrl/companyfacts/CIK##########.json
Form 4 ownership XMLhttps://www.sec.gov/Archives/edgar/data/{cik}/{accession}/ (raw XML, then the complete submission text if needed)
Full-text searchhttps://efts.sec.gov/LATEST/search-index

The Actor sends User-Agent: Fairquery info@getfairquery.com and throttles to ≤ 5 requests/second on every SEC host, including full-text search and Form 4 documents. That limit is unchanged.

Input

FieldTypeDefaultDescription
companiesstring[]—Tickers (AAPL), CIKs (320193), or name fragments (Apple). Required except for search, where empty means all filers
modefilings | facts | both | insider | 8k_items | search | onlyNewbothWhich rows to emit. filings, facts, and both are unchanged. Resolved companies still emit a company row except in search
formTypesstring[]["10-K","10-Q","8-K"]Form filter (case-insensitive); pass [] for all forms. insider uses Form 4 and 4/A when this list has no Form 3/4/5. 8k_items uses 8-K and 8-K/A
sinceYYYY-MM-DD—Keep filings with filingDate >= since. On a first onlyNew run this backfills; omit it (and sinceTimestamp) to record a baseline
untilYYYY-MM-DD—Keep filings and search hits on or before this filing date
onlyNewboolfalseAlso applied by mode: "onlyNew". Cursor is stored per company in the named store edgar-filing-alerts
sinceTimestampISO timestamp—onlyNew floor. The later of this instant and the saved cursor wins
stateKeystringderivedCursor name for one schedule. A new key starts a new baseline
itemCodesstring[]—8-K item filter (2.02, 5.02). Empty means no item filter
searchQuerystring—Required for mode: "search". SEC full-text syntax
maxSearchHitsint (1–200)20Search hits to return and charge
maxFilingsPerCompanyint (1–200)5Cap per company. onlyNew is oldest-first so the next run continues; other modes stay newest-first
metricsstring[]["Assets","NetIncomeLoss","EarningsPerShareDiluted","Revenues"]XBRL concept names (case-insensitive); [] uses a curated 10-concept us-gaap set
maxFactsPerMetricint (1–50)4Most-recent values per concept/unit
includeTextExcerptboolfalseFetch primary document text
excerptMaxCharsint (200–20,000)2000Excerpt length cap in characters

Example input

{
"companies": ["AAPL", "MSFT"],
"mode": "both",
"formTypes": ["10-K", "10-Q"],
"since": "2023-01-01",
"maxFilingsPerCompany": 5,
"metrics": ["Assets", "NetIncomeLoss", "EarningsPerShareDiluted"],
"includeTextExcerpt": false
}

Minimal:

{"companies":["AAPL"],"mode":"both","formTypes":["10-K"],"metrics":["Assets","NetIncomeLoss"]}

Form 4 transactions, 8-K items, full-text search, and a new-filing alert:

{"companies":["AAPL"],"mode":"insider","maxFilingsPerCompany":5}
{"companies":["AAPL"],"mode":"8k_items","itemCodes":["5.02"],"since":"2024-01-01"}
{"mode":"search","searchQuery":"\"material cybersecurity incident\"","formTypes":["8-K"],"since":"2024-01-01","maxSearchHits":20}
{"companies":["AAPL"],"mode":"onlyNew","formTypes":["8-K"],"itemCodes":["2.02"],"stateKey":"aapl-earnings-8k"}

The first onlyNew run with no since and no sinceTimestamp records a baseline and emits no filing rows. The input form prefills since as 2023-01-01; clear that field when you want a baseline instead of a backfill. Later runs emit filings accepted after the saved cursor. onlyNew walks oldest-first up to maxFilingsPerCompany, so a large backlog continues on the next run instead of being skipped.

Output

One dataset row per company, filing, fact, text excerpt, Form 4 record, 8-K, search hit, or error. Every row includes:

  • schema_version — currently 1.0.0
  • type — company | filing | fact | text_excerpt | insider_transaction | eight_k | search_hit | error
  • source_url — SEC URL the row came from
  • scraped_at — ISO timestamp

insider_transaction rows are one per Form 4 transaction or holding (joint owners stay on the same row). shares is the trade size; holdings leave shares empty and report the position in shares_owned_following. Transaction code S is an open-market or private sale, P a purchase, A a grant, M an exercise or conversion. eight_k rows carry item_codes (for example 2.02, 5.02) and item_summary. search_hit rows are one matching EDGAR file. The SEC index does not return document text, so each hit has the filing identity, item codes when the form is an 8-K, and document_url.

Error rows (machine-readable)

{
"schema_version": "1.0.0",
"type": "error",
"code": "COMPANY_NOT_FOUND",
"message": "Could not resolve company query: ZZNOTREAL",
"retryable": false,
"query": "ZZNOTREAL",
"source_url": "https://data.sec.gov/"
}

Codes include: INPUT_EMPTY, SEARCH_QUERY_EMPTY, INVALID_MODE, INVALID_SINCE_TIMESTAMP, COMPANY_NOT_FOUND, RESOLVE_FAILED, SUBMISSIONS_FETCH_FAILED, FACTS_FETCH_FAILED, EXCERPT_FETCH_FAILED, INSIDER_FETCH_FAILED, SEARCH_FETCH_FAILED, ALERT_STATE_FAILED.

Run summary

Key-value store record RUN_SUMMARY with counts (including insider, 8-K, and search hits), SEC request total, echoed input, and the onlyNew cursor key when alerts ran. The cursor itself is in the named store edgar-filing-alerts, one record per stateKey, with each company's acceptance time. Deleting that store starts the next run from a new baseline.

Fact order: for each concept and unit, fact rows are sorted by period end date (newest first), then by filing date. A value that later filings re-report (for example the prior-year column of a 10-Q) is returned once, from the latest filing, so maxFactsPerMetric gives you the most recent periods.

Pricing

No subscription. You pay for these events:

EventPriceWhen
company-resolved$1.50 per 1,000Each successfully resolved company row (not charged for search)
filing$1.00 per 1,000Each filing row, including onlyNew alerts
financial-fact$0.20 per 1,000Each XBRL fact row
text-excerpt$2.00 per 1,000Each primary-document text excerpt row
insider-transaction$1.00 per 1,000Each Form 4 transaction or holding row
eight-k-item$0.50 per 1,000Each 8-K row (item_codes included)
search-hit$2.00 per 1,000Each full-text hit returned (not each match in the index)
apify-actor-start$0.05 per 1,000 runsOnce per run, per GB of memory (Apify default event)

Error rows (COMPANY_NOT_FOUND, FACTS_FETCH_FAILED, …) are not charged.

Worked example: {"companies": ["AAPL", "MSFT"], "mode": "both", "maxFilingsPerCompany": 5, "metrics": ["Assets", "NetIncomeLoss", "EarningsPerShareDiluted", "Revenues"], "maxFactsPerMetric": 4} returns 2 company rows, up to 10 filing rows and up to 32 fact rows: 2 × ($1.50/1,000) + 10 × ($1.00/1,000) + 32 × ($0.20/1,000) = $0.02 at most, plus $0.05 per 1,000 runs. Turning on includeTextExcerpt adds $2.00 per 1,000 filings.

To cap spend, use mode: "facts" or "filings", lower maxFilingsPerCompany / maxFactsPerMetric / maxSearchHits, or set a maximum cost per run in the run options (the Actor stops cleanly at the limit). Company, filing, fact, and excerpt prices are from the Store pricing tab (October 2026). Insider, 8-K, and search use the per-1,000 rates in this table. onlyNew does not add an event.

Memory / runtime

Default 256 MB, timeout 300s. HTTP-only (no browser).

Troubleshooting

SymptomCause and fix
Run fails with INPUT_EMPTYcompanies is empty and the mode is not search. The sample ticker in the Console form is prefill only and is not sent with API calls.
COMPANY_NOT_FOUNDThe ticker, CIK or name fragment is not in the SEC ticker map (for example a non-US or delisted company). Try the CIK. These rows are free.
Fewer filings than expectedformTypes defaults to 10-K, 10-Q and 8-K. Pass [] for all forms, and check since and maxFilingsPerCompany.
A metric is missing from the factsThe company does not report that us-gaap concept (for example Revenues vs RevenueFromContractWithCustomerExcludingAssessedTax). Use the exact XBRL concept name. Some concepts stop being reported: Apple's Revenues values end in 2018, while RevenueFromContractWithCustomerExcludingAssessedTax is current.
SUBMISSIONS_FETCH_FAILED / FACTS_FETCH_FAILED / INSIDER_FETCH_FAILED / SEARCH_FETCH_FAILEDSEC servers were slow or rate-limiting (retryable: true). The Actor stays at or below 5 requests/second; re-run later.
onlyNew emitted no filingsThe first run with no since and no sinceTimestamp only records a baseline. The form prefills since as 2023-01-01; clear it for a baseline, or leave it to backfill. A later run emits acceptances after the cursor in edgar-filing-alerts.
SEARCH_QUERY_EMPTYmode is search and searchQuery is blank.

FAQ

Where does the data come from?

From the SEC's public EDGAR endpoints (ticker map, submissions, companyfacts, filing archives, and the full-text search index), fetched with a declared User-Agent under SEC fair-access rules. The Actor stays at or below 5 requests per second.

Is this investment advice?

No. It is a structured mirror of public SEC data for research and tooling.

Does it include real-time prices or non-US companies?

No. It covers SEC registrants only, with no market data.

How much does a run cost?

$1.50 per 1,000 resolved companies on the free plan (lower on paid Apify plans), plus $1.00 per 1,000 filing rows, $0.20 per 1,000 fact rows and $2.00 per 1,000 excerpts. Form 4 rows are $1.00 per 1,000, 8-K item rows are $0.50 per 1,000, and full-text hits are $2.00 per 1,000 returned. A two-company example with filings and facts costs about $0.02. onlyNew uses the company and filing prices.

Can an AI agent call it?

Yes, through Apify MCP (see the scoped URL in the MCP section above).

Fairquery family

Other Fairquery tools on the Apify Store. Each one returns structured rows with machine-readable error codes, and error rows are never charged:

All Fairquery Actors: https://apify.com/fairquery

Data handling, security and support

  • Data retention: Each run keeps only its own storages in your Apify account (INPUT, the results dataset and a counts-only RUN_SUMMARY), under your Apify plan's retention. It queries only the SEC's public endpoints. You can delete run storages and named stores at any time in Apify Console or through the API. Fairquery's code sends nothing to Fairquery.
  • Security reports: email info@getfairquery.com.
  • Support: the Issues tab on this page or info@getfairquery.com. We aim to reply within 3 business days (a target, not an SLA).

Disclaimer

Data originates from the U.S. Securities and Exchange Commission EDGAR system. Fairquery and this Actor provide no warranty of completeness or fitness for trading decisions. This is not investment advice.