SEC EDGAR Financials & Filings API (10-K, 10-Q, 8-K) avatar

SEC EDGAR Financials & Filings API (10-K, 10-Q, 8-K)

Pricing

from $2.00 / 1,000 company-period financials rows

Go to Apify Store
SEC EDGAR Financials & Filings API (10-K, 10-Q, 8-K)

SEC EDGAR Financials & Filings API (10-K, 10-Q, 8-K)

Financials and SEC EDGAR filings for US public companies, built for AI agents: one clean row per company and fiscal period (revenue, net income, EPS, assets, cash flow) with a source-filing link, plus filing lists and full-text search. Not affiliated with the SEC. By Harlo.

Pricing

from $2.00 / 1,000 company-period financials rows

Rating

0.0

(0)

Developer

Michael Rice

Michael Rice

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Security

Limited permissions

Share

US Public Company Financials & SEC Filings API for AI Agents

Get financial statements for US public companies as one clean JSON row per company and fiscal period: revenue, gross profit, operating income, net income, EPS, assets, liabilities, equity, cash, debt, operating cash flow, capex and free cash flow. Every row links to the source SEC filing, so an AI agent (or an analyst) can cite it. The Actor also lists a company's SEC filings (10-K, 10-Q, 8-K with plain-English item labels, 20-F, proxy statements, registration statements …) and runs full-text search across EDGAR filings. Turn on "Only new since last run" and it becomes a scheduled monitor for new filings or new fiscal periods.

Not affiliated with, endorsed by, or operated by the U.S. Securities and Exchange Commission (SEC). "SEC" and "EDGAR" are used only to describe the data source. Data comes from the SEC's documented public data APIs (data.sec.gov submissions and XBRL company facts, plus the company ticker file) and, for search mode, the SEC's EDGAR full-text search service. Data is returned as filed.

Not investment advice. Figures are provided for information only, may contain filer errors or omissions, and should be verified against the linked filing before you rely on them.

What this Actor does

  • Financials, de-duplicated. Raw XBRL "company facts" repeat every number under every later filing (Apple's FY2025 10-K also carries FY2024 and FY2023 revenue). This Actor keeps each value only from the filing that reports that period as its own, so you get exactly one row per fiscal year or quarter, with sourceFilingUrl, accessionNumber, form and filed for citation. If an amendment (10-K/A, 10-Q/A) re-files a value, the amended value wins and amendedBy names it.
  • Annual or quarterly. Annual rows come from 10-K, 20-F and 40-F. Quarterly rows come from 10-Q; fiscal Q4 and year-to-date-only cash flows are derived (for example FY minus 9 months) and listed in derivedMetrics, never silently mixed in.
  • Stable, flat schema for agents. Every metric key is always present. A metric the company doesn't report is null, never a missing key, and conceptsUsed shows the exact XBRL concept behind each number (with fallbacks such as Revenues → RevenueFromContractWithCustomerExcludingAssessedTax). One reporting currency per company (USD, or e.g. TWD/EUR for foreign 20-F filers).
  • Filings list. One row per filing with the primary document link, filing index link, filing and period dates, acceptance timestamp, and 8-K item codes with labels (e.g. 2.02 → "Results of Operations and Financial Condition"). Filter by form type and date range.
  • Full-text search. Search the text of SEC filings since 2001 for a phrase ("going concern", "material weakness", "share repurchase"), optionally limited to companies, forms and dates. One row per matching filing with a link to the matched document.
  • Monitor mode. Opt-in onlyNewSinceLastRun returns only new filings, new fiscal periods or new search hits since the previous run with the same filters, so scheduled runs cost you only for genuinely new rows.
  • Company-level data only. Insider and private-offering filings with personal data (Forms 3, 4, 5, 144 and D) are permanently excluded: they are never returned, can't be requested, and individual filers can't be looked up. Beneficial-ownership schedules (SC 13D/13G) and SEC correspondence are also not returned.
  • Polite by design. A single shared rate limiter keeps the Actor at at most 4 requests per second per run (the SEC's fair-access limit is 10 requests per second per user, counted across all machines), with a declared User-Agent and contact, and backoff on HTTP 429/403/5xx. Avoid running many copies in parallel: batch companies into one run instead (up to 25). No login, no API key, no proxies.

Who it's for

  • AI agents and LLM apps answering "What were Microsoft's revenue and net income for the last 4 years?" or "List Tesla's 8-Ks since June" with citable numbers
  • Analysts, researchers and students who want fundamentals in CSV, Excel or Google Sheets without parsing XBRL
  • Compliance, IR and competitive-intelligence teams monitoring peers' new 10-Ks, 10-Qs and 8-Ks
  • Developers who need a stable company-financials API on top of SEC EDGAR data

Quick start

  1. Click Try for free and run the prefilled input: Apple (AAPL), annual, last 4 fiscal years (4 rows).
  2. Put your own tickers in companies (up to 25), choose periodType (annual or quarterly) and periods.
  3. For a filing list, set mode to filings (optionally forms: ["8-K"] and dateFrom). For text search, set mode to search and query.
  4. To monitor, turn on onlyNewSinceLastRun and add an Apify Schedule (daily works well).

An empty input {} works too. It behaves exactly like the prefill (AAPL, annual, 4 periods), never an unbounded crawl.

Input

FieldTypeModesNotes
modeenumallfinancials (default), filings, search
companiesstring[]allTicker (AAPL, BRK.B), CIK (320193) or exact company name (Apple Inc.). Up to 25. Empty in financials/filings = AAPL
periodTypeenumfinancialsannual (default) or quarterly
periodsintfinancialsMost recent fiscal periods per company, 1–20 (default 4)
formsenum[]filings, search10-K, 10-Q, 8-K, 20-F, 40-F, 6-K, S-1, S-3, S-4, S-8, F-1, F-3, F-4, 424B, DEF 14A, DEFA14A, PRE 14A, 11-K, ARS, SD, 10-12B, 8-A12B, NT 10-K, NT 10-Q, 25-NSE, 10-KT, 10-QT. Each includes its /A amendment. Empty = all of them
querystringsearchRequired in search mode. Words, or an exact phrase in double quotes
dateFrom / dateToYYYY-MM-DDfilings, searchFiling date range
maxItemsintallMax rows per run, 1–1000 (default 20). In financials mode the cap applies across all companies (companies × periods), so raise it when you ask for many companies. Companies cut by the cap are never dropped silently (see below)
onlyNewSinceLastRunboolallMonitor mode (default false)
lookbackHoursintallDelta safety window for late-indexed filings, 0–720 (default 48)

How maxItems works with several companies. Rows are returned company by company, and the default maxItems of 20 covers 5 companies × 4 periods. For more, set maxItems to at least companies × periods (for example 6 × 4 = 24) or split the call. If the cap cuts the result, the Actor never drops a company silently. It logs a warning naming the skipped or partial companies, sets the run status message, and writes truncationNote (for example "truncated: 1 company skipped, raise maxItems … Skipped: CVX."), skippedCompanies, partialCompanies and a per-company entry in notes to the OUTPUT run summary. If the run's maximum cost per run stops it first, the same fields are filled but the note says max total charge per run reached, not maxItems, and each entry's reason is maxTotalCharge instead of maxItems.

Input examples

Annual financials for three companies:

{ "companies": ["MSFT", "GOOGL", "AMZN"], "periodType": "annual", "periods": 5 }

Last 8 quarters for one company:

{ "companies": ["NVDA"], "periodType": "quarterly", "periods": 8 }

Recent 8-Ks for two companies:

{ "mode": "filings", "companies": ["TSLA", "MSFT"], "forms": ["8-K"], "dateFrom": "2026-06-01", "maxItems": 20 }

Full-text search:

{ "mode": "search", "query": "\"material weakness\"", "forms": ["10-K", "10-Q"], "dateFrom": "2026-01-01", "maxItems": 20 }

Output example

Financials row (rowType: "financials"; abbreviated conceptsUsed):

{
"rowType": "financials",
"ticker": "AAPL",
"tickerNote": null,
"cik": "0000320193",
"companyName": "Apple Inc.",
"periodType": "annual",
"fiscalYear": 2025,
"fiscalPeriod": "FY",
"periodStart": "2024-09-29",
"periodEnd": "2025-09-27",
"form": "10-K",
"filed": "2025-10-31",
"accessionNumber": "0000320193-25-000079",
"sourceFilingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm",
"filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm",
"amendedBy": null,
"currency": "USD",
"taxonomy": "us-gaap",
"revenue": 416161000000,
"costOfRevenue": 220960000000,
"grossProfit": 195201000000,
"operatingIncome": 133050000000,
"netIncome": 112010000000,
"epsBasic": 7.49,
"epsDiluted": 7.46,
"weightedAverageDilutedShares": 15004697000,
"totalAssets": 359241000000,
"totalLiabilities": 285508000000,
"stockholdersEquity": 73733000000,
"cashAndEquivalents": 35934000000,
"longTermDebt": 78328000000,
"operatingCashFlow": 111482000000,
"capitalExpenditures": 12715000000,
"sharesOutstanding": 14776353000,
"sharesOutstandingDate": "2025-10-17",
"freeCashFlow": 98767000000,
"derivedMetrics": ["freeCashFlow"],
"conceptsUsed": { "revenue": "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax", "netIncome": "us-gaap:NetIncomeLoss", "freeCashFlow": "derived:operatingCashFlow-capitalExpenditures" },
"filingAcceptedAt": "2025-10-31T14:01:26Z",
"dataSource": "SEC EDGAR XBRL company facts (data.sec.gov)"
}

Filing row (rowType: "filing"; search hits use the same fields with rowType: "searchHit" and matchedDocumentType):

{
"rowType": "filing",
"ticker": "AAPL",
"tickerNote": null,
"cik": "0000320193",
"companyName": "Apple Inc.",
"form": "8-K",
"formFamily": "8-K",
"filingDate": "2026-07-30",
"reportDate": "2026-07-30",
"acceptedAt": "2026-07-31T00:30:28Z",
"accessionNumber": "0000320193-26-000018",
"description": "8-K",
"itemCodes": ["2.02", "9.01"],
"itemLabels": ["Results of Operations and Financial Condition", "Financial Statements and Exhibits"],
"isXBRL": true,
"filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/aapl-20260730.htm",
"filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/0000320193-26-000018-index.htm",
"sicDescription": "Electronic Computers",
"matchedDocumentType": null,
"dataSource": "SEC EDGAR submissions (data.sec.gov)"
}

Every row also has tickerNote (usually null). It explains a missing or re-pointed ticker, for example when you pass a predecessor's CIK that is no longer in the SEC ticker file.

The run summary is saved as OUTPUT in the run's key-value store: row and charge counts, resolved and unresolved companies, how many person-form filings were filtered out, truncated, incomplete (plus truncationNote, skippedCompanies and partialCompanies when maxItems or the maximum cost per run cut companies), SEC request statistics and, in monitor mode, watermark details. truncated means more rows exist beyond maxItems; incomplete is true whenever this run returned fewer rows than were available (maxItems or the maximum cost per run). Check truncationNote for details.

Only new since last run (monitor mode)

Set onlyNewSinceLastRun: true and schedule the Actor. The first run is a baseline: it returns the newest rows (up to maxItems) and remembers everything that exists now. Each later run with the same companies and filters returns only rows that appeared since: new filings (filings mode), new fiscal periods (financials mode) or new matching filings (search mode; if you set no dateFrom, the search window is chosen automatically). A run with nothing new is a successful run that costs only the start fee. State lives in the key-value store company-financials-sec-filings-state in your own Apify account, one record per filter set. Delete the record to start over. In financials mode a fiscal period counts as delivered once: a later amendment (10-K/A, 10-Q/A) for a period you already received is not re-delivered. Run without monitor mode to get the amended values. If your max-charge limit cuts a monitor run, the oldest new rows are returned first and the rest arrive on the next run.

Use with AI agents / MCP

This Actor is built to be an agent tool: small inputs, an enum for every choice, a fixed flat output schema, and a source link on every row.

Apify MCP server. Add it as a tool on the hosted server (https://mcp.apify.com):

https://mcp.apify.com?tools=brightish_ascent/company-financials-sec-filings

MCP client config (Claude Desktop, Cursor, VS Code and other MCP clients). You sign in to Apify with OAuth on first connect:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=brightish_ascent/company-financials-sec-filings"
}
}
}
  • The tool is named brightish_ascent--company-financials-sec-filings. Its arguments are the input fields above.
  • A call returns the run status and a datasetId. The agent reads rows with get-dataset-items (limit, offset, fields).
  • With the default tool set, an agent can also run it via call-actor with actor: "brightish_ascent/company-financials-sec-filings".
  • Local stdio server: npx @apify/actors-mcp-server --tools brightish_ascent/company-financials-sec-filings, with APIFY_TOKEN set.

Agent frameworks. LangChain: ApifyActorsTool("brightish_ascent/company-financials-sec-filings") from langchain-apify. CrewAI: ApifyActorsTool(actor_name="brightish_ascent/company-financials-sec-filings") from crewai_tools. OpenAI Agents SDK: MCPServerStreamableHttp with the MCP URL above and an Authorization: Bearer <APIFY_TOKEN> header. These tools return every row inline, so keep maxItems and periods small.

Example agent prompts:

What were Microsoft's revenue, net income and free cash flow for the last 4 fiscal years? Use the company financials tool with companies: ["MSFT"], periodType: "annual", periods: 4, and cite sourceFilingUrl for each year.

Compare Coca-Cola and PepsiCo gross margin over the last 8 quarters. Use companies: ["KO", "PEP"], periodType: "quarterly", periods: 8, and compute grossProfit / revenue.

Did Tesla file any 8-Ks about material agreements since June? Use mode: "filings", companies: ["TSLA"], forms: ["8-K"], dateFrom: "2026-06-01", maxItems: 10, and read itemLabels.

Cost per call. $0.00005 per run, plus $0.002 per financials row (company-period) or $0.001 per filing / search row:

CallRowsCost
1 company × 4 annual periods (the prefill)4≈ $0.008
3 companies × 4 annual periods12≈ $0.024
1 company × 8 quarters8≈ $0.016
20 filings or search hits (default maxItems)20≈ $0.020

Unresolved tickers, rejected inputs and runs with nothing new cost only the start fee. With call-actor, you can also cap spend with maxTotalChargeUsd.

Tips for agents:

  • Prefer tickers. If a ticker is ambiguous or new, pass the CIK.
  • Keep periods at 4–8. In financials mode set maxItems to at least companies × periods (the default 20 covers 5 companies × 4 periods). If companies were cut, OUTPUT.truncationNote and the run status message name them.
  • Make one call with several companies (up to 25) instead of many parallel calls. Each run is limited to 4 requests per second, and the SEC's 10 requests per second limit applies to all runs together.
  • null means "not reported under the concepts we map", not zero. Check conceptsUsed and derivedMetrics before comparing companies.
  • Quarterly EPS is not derived for fiscal Q4 (EPS isn't additive), so Q4 epsBasic, epsDiluted and weightedAverageDilutedShares are usually null.
  • Always cite sourceFilingUrl (financials) or filingUrl (filings). Not investment advice.

Pricing

Pay per event (PAY_PER_EVENT) only, no "+ usage" fees:

EventPrice (USD)When
Actor start (apify-actor-start)$0.00005Per run, per GB of memory (1 event at the default 256 MB)
Company-period row (company-period-row)$0.002Per financials row returned (one company × one fiscal period)
Filing row (filing-row)$0.001Per filing or full-text search row returned

You're charged only for rows actually returned. Filtered rows, excluded forms, unresolved companies and already-seen rows (monitor mode) are never charged.

FAQ

Is this the official SEC API? No. It's an independent client for the SEC's documented data APIs (data.sec.gov) and its public EDGAR full-text search service. It isn't made by, affiliated with, or endorsed by the SEC.

Is this investment advice? No. The data is returned as filed by companies, for information only. Verify against the linked filing.

Why does my company show null for some metrics? Companies tag their statements differently. We map each metric to a short list of standard XBRL concepts and return null rather than guess. Banks, insurers and some foreign filers often have no costOfRevenue/grossProfit; companies with several share classes may have no sharesOutstanding.

Why are some quarterly values marked as derived? 10-Qs report cash flows year-to-date only, and the fourth quarter appears only in the annual report. The Actor derives those quarters by subtraction (for example FY minus 9 months) and lists them in derivedMetrics; conceptsUsed shows the exact calculation.

Can I get insider trades (Form 4), Form 144 or Form D? No. Those filings contain personal data about individuals and are permanently excluded. You also can't look up an individual filer's CIK. Beneficial-ownership schedules (SC 13D/13G) and SEC correspondence aren't returned either.

Does it return people's names? It returns company filings only and isn't a people-search tool. Filing titles and exhibit descriptions are company disclosures and can name officers or directors (for example an employment agreement exhibit), as published by the company.

Does it download filings or exhibits? No. It returns metadata and links (sourceFilingUrl, filingUrl, filingIndexUrl). Open the link to read the document.

Which companies are covered? Any SEC registrant with a ticker in the SEC's company ticker file, or any company CIK. Financials need XBRL data, which US filers have provided since about 2009–2011. Foreign 20-F/40-F filers are covered when they file XBRL (often IFRS, in their own currency).

What happens with a bad ticker? The run still succeeds. The ticker is listed in OUTPUT.unresolvedCompanies with a hint, and you pay only the start fee.

How fast is it? About 2 requests per company (financials) at no more than 4 requests per second per run, so a 1-company call usually finishes in a few seconds. Don't run many copies in parallel: the SEC's limit of 10 requests per second applies to all runs together.

Limitations (honest list)

  • Numbers are as filed. Filer tagging errors, restatements in later years, and unusual concepts are not corrected. Values come from the filing that reports each period as its own (or its amendment), not from later comparatives.
  • Only non-dimensional (consolidated, whole-company) XBRL facts are used. Segment data and per-class share counts aren't included.
  • A ticker can briefly point to a new holding company that has no XBRL history yet (e.g. after a reorganization). The run then says so in OUTPUT.notes; pass the predecessor's CIK to get its history (for example ExxonMobil: CIK 34088).
  • Fiscal Q4 EPS (epsBasic, epsDiluted) and weightedAverageDilutedShares are left null in quarterly mode unless the company tags the 3-month figure itself. They aren't additive, so subtracting 9-month EPS from full-year EPS would be wrong.
  • Full-text search uses the JSON service behind sec.gov's EDGAR Full-Text Search page. The SEC doesn't document it as an API, so it may change without notice.
  • Full-text search covers filings since 2001, returns at most the first 1,000 matching documents per run, and is ranked by relevance (use dateFrom/dateTo to focus on recent filings).
  • In financials mode, rows are filled company by company up to maxItems; companies past the cap are reported in OUTPUT.truncationNote and the status message, not returned.
  • In filings mode, maxItems keeps the newest filings across all requested companies; only a company with no filing returned is reported in truncationNote. In a monitor baseline run, rows past maxItems are remembered as known and are not delivered later.
  • Price data, ratios, analyst estimates and earnings-call transcripts aren't included.

License

MIT (Actor code). SEC EDGAR data is public information; see the SEC's website policies and fair-access guidance.