SEC Company Financials Scraper — Revenue, Net Income, EPS
Pricing
from $0.70 / 1,000 result items
SEC Company Financials Scraper — Revenue, Net Income, EPS
Standardized financial statements for any US-listed company from SEC XBRL data: revenue, net income, EPS, total assets, liabilities, cash, shares outstanding by quarter and year. Lookup by ticker or CIK. Clean JSON for AI agents. No API key.
Pricing
from $0.70 / 1,000 result items
Rating
0.0
(0)
Developer
Samat Makatov
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Standardized financial data for any SEC filer — US companies (10-K/10-Q) and foreign private issuers (20-F/6-K such as TSM, ASML, SAP) — straight from the SEC's official XBRL APIs (companyfacts, companyconcept, frames). Get the long history of any of 85 curated concepts, ready-made statement rows with margins, ROE, free cash flow, the full trail of one concept, or a cross-company screen ("every filer's revenue for CY2025"). Lookup by ticker or CIK. No API key, no proxy, no browser.
Every value comes with the period (start/end, durationDays, periodType), the filing that reported it (form, filed, accession), the unit, and the exact SEC URL it was read from. Restated duplicates are collapsed to the most recently filed value.
Use cases
- Fundamental screening —
framesmode: all SEC filers ranked by revenue, net income, assets or any concept for one calendar period. - Peer comparison / comps tables —
statementsmode for a ticker list: revenue, margins, EPS, debt/equity, ROE per fiscal year side by side. - Due diligence & credit checks — 10 years of assets, liabilities, cash, debt and operating cash flow of a counterparty, with filing references.
- Earnings monitoring — schedule a quarterly run with
form: "10-Q", periodTypes: ["quarter"]and diff the newestenddate against your store. - AI-agent research — an LLM asks "what was NVIDIA's gross margin trend?" → one
statementsrun returns clean JSON with formulas already applied. - Dataset building — long-format
factsfor time series / ML features, keyed by stableid.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
mode | select | facts | facts (long: metric × period), statements (wide: company × period + ratios), concept (one concept, all periods & units), frames (one concept × period across all companies). |
tickers | string[] | — (Console example ["AAPL"]) | Tickers (AAPL, BRK-B, brk.b) or CIKs (320193, CIK0000320193); letter case and spaces do not matter. Resolved via company_tickers.json. Required except in frames mode, where it filters the frame to these filers. Unknown tickers are listed in SUMMARY.notFound (not charged). The same filer twice (AAPL and 320193) is read once. |
metricPreset | select | — (core, or custom when only metrics is given) | core (9 headline metrics), incomeStatement (21), balanceSheet (38), cashFlow (16), perShare (10, incl. share counts & dei), all (85), custom (only metrics). A preset is unioned with metrics. Left out (API, MCP, schedules): custom when metrics is set, else core. The Console form starts at core — pick custom there to get only your metrics. |
metrics | string[] | [] | Any XBRL concept: GrossProfit, dei:EntityPublicFloat, ifrs-full:Revenue, or a friendly alias (revenue, netIncome, capex, …). See Reference. |
periods | integer 1–200 | 12 | facts: newest N periods per metric. statements: newest N rows per company. Ignored in concept/frames (use maxItems). |
form | select | all | all, 10-K, 10-Q, 20-F, 40-F, 6-K, 8-K. Amendments (10-K/A) match their base form. Foreign private issuers use 20-F/6-K — a 10-K filter on TSM returns nothing. |
periodTypes | string[] | [] (statements: ["annual","quarter"]) | Any of instant, quarter, ytd, annual (any letter case; another value stops the run before any request, with a "did you mean"). In statements mode this chooses which rows to emit; balance-sheet instants are always read and attached to annual/quarter rows with the same end date. |
startYear / endYear | integer | — | Filter by calendar year of the period end date. |
includeAmendments | boolean | true | false drops /A forms entirely. |
taxonomy | select | auto | auto = us-gaap → ifrs-full → dei; or force us-gaap, ifrs-full, dei. |
currency | string | auto | auto prefers USD, else the filer's currency (EUR for ASML). Force with an ISO code (TWD). Share counts and pure ratios are unaffected. |
concept | string | Revenues (frames) | Concept for concept/frames modes. concept mode: aliases, any letter case, taxonomy prefixes. frames mode: SEC's exact concept name (the 85 curated concepts are matched in any letter case); a prefix such as dei: picks the taxonomy. |
period | string | — | Frames period: CY2025, CY2025Q1, CY2025Q4I (instantaneous — required for balance-sheet concepts). Required in frames mode. |
unit | string | USD | Frames unit: USD, shares, USD/shares, pure, or another currency (EUR, EUR/shares…), in any letter case (usd/shares, USD-per-shares work too). Other units are sent to SEC as typed. |
excludeSuspected | boolean | false | Frames only: drop rows flagged suspectedReportingError before ranking (see Frames: suspected reporting errors). |
maxItems | integer | 1000 | Hard cap on rows per run. In frames mode results are sorted by value desc, so maxItems: 50 = top 50. The run also stops at your max cost per run. |
fields | string[] | [] (all) | Keep only these columns, in this order, e.g. ["ticker", "end", "revenue", "roe"] (statements). id is always kept (first, unless you place it). Letter case and spaces do not matter (net income = netIncome); a name that is not a column of the chosen mode is skipped with a note in the status; if none is, the run stops before any request. Columns: Output. |
How periods are classified
periodType | Rule | Typical source |
|---|---|---|
instant | no start | balance sheet (Assets, Liabilities, Equity, Cash, shares outstanding) |
quarter | duration ≤ 100 days | 10-Q quarter, Q4 derived in 10-K |
ytd | any other duration (≈180 / ≈270 days) | 6-month / 9-month year-to-date figures in 10-Q and 6-K |
annual | 340–380 days | 10-K / 20-F fiscal year |
Do not sum ytd and quarter rows. Note that SEC's fy/fp fields describe the filing's fiscal year/period, not the fact's period (a 10-K for FY2018 also re-reports FY2016 with fy: 2018) — filter on end / startYear instead. SEC's frame field (e.g. CY2025Q4) is the calendar frame the SEC aligned the fact to, present only on the canonical (non-duplicate) fact.
Reference
Curated concept dictionary (85, all verified in Apple and Microsoft company facts)
Income statement
| Concept | Title |
|---|---|
Revenues | Revenues (total) |
RevenueFromContractWithCustomerExcludingAssessedTax | Revenue from contracts with customers (ASC 606) |
SalesRevenueNet | Net sales (legacy tag, pre-2018) |
RevenuesNetOfInterestExpense | Revenues net of interest expense (banks) |
CostOfRevenue | Cost of revenue |
CostOfGoodsAndServicesSold | Cost of goods and services sold |
GrossProfit | Gross profit |
OperatingExpenses | Operating expenses (total) |
ResearchAndDevelopmentExpense | Research and development expense |
SellingGeneralAndAdministrativeExpense | Selling, general and administrative expense |
SellingAndMarketingExpense | Selling and marketing expense |
GeneralAndAdministrativeExpense | General and administrative expense |
OperatingIncomeLoss | Operating income (loss) |
NonoperatingIncomeExpense | Non-operating income (expense) |
InterestExpense | Interest expense |
IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest | Pre-tax income (continuing operations) |
IncomeTaxExpenseBenefit | Income tax expense (benefit) |
NetIncomeLoss | Net income (loss) |
ComprehensiveIncomeNetOfTax | Comprehensive income, net of tax |
DepreciationDepletionAndAmortization | Depreciation, depletion and amortization |
ShareBasedCompensation | Share-based compensation |
Balance sheet
| Concept | Title |
|---|---|
Assets | Total assets |
AssetsCurrent | Current assets |
AssetsNoncurrent | Non-current assets |
CashAndCashEquivalentsAtCarryingValue | Cash and cash equivalents |
CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents | Cash incl. restricted cash |
MarketableSecuritiesCurrent | Marketable securities, current |
MarketableSecuritiesNoncurrent | Marketable securities, non-current |
ShortTermInvestments | Short-term investments |
AccountsReceivableNetCurrent | Accounts receivable, net |
InventoryNet | Inventory, net |
OtherAssetsCurrent | Other current assets |
OtherAssetsNoncurrent | Other non-current assets |
PropertyPlantAndEquipmentNet | Property, plant and equipment, net |
OperatingLeaseRightOfUseAsset | Operating lease right-of-use assets |
Goodwill | Goodwill |
IntangibleAssetsNetExcludingGoodwill | Intangible assets, net (excl. goodwill) |
Liabilities | Total liabilities |
LiabilitiesCurrent | Current liabilities |
LiabilitiesNoncurrent | Non-current liabilities |
AccountsPayableCurrent | Accounts payable |
AccruedLiabilitiesCurrent | Accrued liabilities, current |
ContractWithCustomerLiabilityCurrent | Contract liabilities (deferred revenue), current |
DeferredRevenueCurrent | Deferred revenue, current (legacy) |
DebtCurrent | Debt, current |
LongTermDebtCurrent | Long-term debt, current portion |
CommercialPaper | Commercial paper |
LongTermDebt | Long-term debt (total incl. current) |
LongTermDebtNoncurrent | Long-term debt, non-current |
OperatingLeaseLiabilityNoncurrent | Operating lease liabilities, non-current |
OtherLiabilitiesCurrent | Other current liabilities |
OtherLiabilitiesNoncurrent | Other non-current liabilities |
LiabilitiesAndStockholdersEquity | Total liabilities and equity |
StockholdersEquity | Stockholders' equity |
StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest | Total equity incl. non-controlling interest |
RetainedEarningsAccumulatedDeficit | Retained earnings (accumulated deficit) |
AccumulatedOtherComprehensiveIncomeLossNetOfTax | Accumulated other comprehensive income (loss) |
CommonStocksIncludingAdditionalPaidInCapital | Common stock incl. APIC |
TreasuryStockValue | Treasury stock |
Cash flow
| Concept | Title |
|---|---|
NetCashProvidedByUsedInOperatingActivities | Net cash from operating activities |
NetCashProvidedByUsedInInvestingActivities | Net cash from investing activities |
NetCashProvidedByUsedInFinancingActivities | Net cash from financing activities |
PaymentsToAcquirePropertyPlantAndEquipment | Capital expenditures (PP&E purchases) |
PaymentsToAcquireBusinessesNetOfCashAcquired | Acquisitions, net of cash acquired |
PaymentsForRepurchaseOfCommonStock | Share repurchases |
PaymentsOfDividends | Dividends paid |
PaymentsOfDividendsCommonStock | Dividends paid, common stock |
ProceedsFromIssuanceOfLongTermDebt | Proceeds from long-term debt |
RepaymentsOfLongTermDebt | Repayments of long-term debt |
DeferredIncomeTaxExpenseBenefit | Deferred income tax expense (benefit) |
IncreaseDecreaseInAccountsReceivable | Change in accounts receivable |
IncreaseDecreaseInInventories | Change in inventories |
IncreaseDecreaseInAccountsPayable | Change in accounts payable |
IncomeTaxesPaidNet | Income taxes paid, net |
InterestPaidNet | Interest paid, net |
Per share
| Concept | Title |
|---|---|
EarningsPerShareBasic | EPS, basic |
EarningsPerShareDiluted | EPS, diluted |
CommonStockDividendsPerShareDeclared | Dividends declared per share |
Shares
| Concept | Title |
|---|---|
WeightedAverageNumberOfSharesOutstandingBasic | Weighted average shares, basic |
WeightedAverageNumberOfDilutedSharesOutstanding | Weighted average shares, diluted |
CommonStockSharesOutstanding | Common shares outstanding (balance sheet) |
CommonStockSharesIssued | Common shares issued |
CommonStockSharesAuthorized | Common shares authorized |
DEI (cover page)
| Concept | Title |
|---|---|
dei:EntityCommonStockSharesOutstanding | Shares outstanding (cover page) |
dei:EntityPublicFloat | Public float (cover page) |
Alias chains (friendly name → us-gaap fallback order → ifrs-full fallback order)
| Friendly | us-gaap chain | ifrs-full chain |
|---|---|---|
revenue | Revenues → RevenueFromContractWithCustomerExcludingAssessedTax → SalesRevenueNet → RevenuesNetOfInterestExpense | Revenue → RevenueFromContractsWithCustomers |
costOfRevenue | CostOfRevenue → CostOfGoodsAndServicesSold | CostOfSales |
grossProfit | GrossProfit | GrossProfit |
operatingIncome | OperatingIncomeLoss | ProfitLossFromOperatingActivities |
netIncome | NetIncomeLoss → ProfitLoss | ProfitLossAttributableToOwnersOfParent → ProfitLoss |
incomeTax | IncomeTaxExpenseBenefit | IncomeTaxExpenseContinuingOperations |
interestExpense | InterestExpense → InterestExpenseNonoperating | FinanceCosts → InterestExpense |
rnd | ResearchAndDevelopmentExpense | ResearchAndDevelopmentExpense |
sga | SellingGeneralAndAdministrativeExpense | SellingGeneralAndAdministrativeExpense |
epsDiluted | EarningsPerShareDiluted → EarningsPerShareBasicAndDiluted | DilutedEarningsLossPerShare |
epsBasic | EarningsPerShareBasic → EarningsPerShareBasicAndDiluted | BasicEarningsLossPerShare |
sharesDiluted | WeightedAverageNumberOfDilutedSharesOutstanding | AdjustedWeightedAverageShares → WeightedAverageShares |
assets | Assets | Assets |
assetsCurrent | AssetsCurrent | CurrentAssets |
liabilities | Liabilities | Liabilities |
liabilitiesCurrent | LiabilitiesCurrent | CurrentLiabilities |
equity | StockholdersEquity → StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest | EquityAttributableToOwnersOfParent → Equity |
cash | CashAndCashEquivalentsAtCarryingValue → CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents | CashAndCashEquivalents |
longTermDebt | LongTermDebtNoncurrent → LongTermDebt | NoncurrentPortionOfNoncurrentBondsIssued → LongtermBorrowings → NoncurrentPortionOfNoncurrentBorrowings |
debtCurrent | DebtCurrent → LongTermDebtCurrent → CommercialPaper | CurrentPortionOfLongtermBorrowings → ShorttermBorrowings → CurrentBorrowingsAndCurrentPortionOfNoncurrentBorrowings |
operatingCashFlow | NetCashProvidedByUsedInOperatingActivities → NetCashProvidedByUsedInOperatingActivitiesContinuingOperations | CashFlowsFromUsedInOperatingActivities |
capex | PaymentsToAcquirePropertyPlantAndEquipment → PaymentsToAcquireProductiveAssets | PurchaseOfPropertyPlantAndEquipmentClassifiedAsInvestingActivities |
dividendsPaid | PaymentsOfDividends → PaymentsOfDividendsCommonStock | DividendsPaidClassifiedAsFinancingActivities → DividendsPaid |
buybacks | PaymentsForRepurchaseOfCommonStock | PaymentsToAcquireOrRedeemEntitysShares |
dda | DepreciationDepletionAndAmortization → DepreciationAndAmortization → DepreciationAmortizationAndAccretionNet | DepreciationAndAmortisationExpense |
sbc | ShareBasedCompensation → AllocatedShareBasedCompensationExpense | — |
Any other concept from the us-gaap / ifrs-full / dei taxonomies works too — the actor reads whatever the filer tagged. When a requested metric is not reported, the run logs a warning listing the missing metrics; when an alias chain is used, the item's metricResolved tells you which concept was read. Among chain members a filer reports, the one with the freshest data wins (Apple's Revenues stops in 2018; RevenueFromContractWithCustomerExcludingAssessedTax continues).
Statement lines and formulas (mode: "statements")
Lines: revenue, costOfRevenue, grossProfit, operatingIncome, netIncome, epsDiluted, epsBasic, sharesDiluted, assets, assetsCurrent, liabilities, liabilitiesCurrent, equity, cash, longTermDebt, debtCurrent, operatingCashFlow, capex, dividendsPaid, buybacks, rnd, sga, interestExpense, incomeTax, dda, sbc — each resolved through the alias chains above; concepts on every row shows exactly which tag supplied each line. One row per duration period (anchored by revenue / net income / operating cash flow) with balance-sheet instants attached by matching end date. Fragment rows — a row with fewer than 40 % of the lines of the fullest row of its kind, such as the few quarterly net-income/EPS figures a 10-K repeats — are skipped (logged) and do not count toward periods; with form: "10-K" you get full annual rows only. Normal 10-Q quarter rows (no quarterly cash flow) are kept.
| Field | Formula | Null when |
|---|---|---|
totalDebt | longTermDebt + debtCurrent (debtCurrent = 0 if absent but longTermDebt exists) | both missing |
freeCashFlow | operatingCashFlow − capex | either missing |
grossMargin | grossProfit / revenue (grossProfit falls back to revenue − costOfRevenue) | no gross profit or no revenue |
operatingMargin | operatingIncome / revenue | either missing |
netMargin | netIncome / revenue | either missing |
debtToEquity | totalDebt / equity | either missing or equity = 0 |
currentRatio | assetsCurrent / liabilitiesCurrent | either missing |
roe | netIncome / equity (period-end equity, not average) | either missing |
roa | netIncome / assets (period-end assets) | either missing |
Ratios are rounded to 4 decimals. On quarter rows roe/roa are quarterly returns (not annualised). IFRS chains are best-effort mappings: e.g. TSM's longTermDebt comes from NoncurrentPortionOfNoncurrentBondsIssued (bonds only) and sbc is null because IFRS filers do not tag total share-based compensation — always read concepts.
Frames: suspected reporting errors
SEC frames republish exactly what each filer tagged, including scale mistakes (thousands tagged as units). Real 2025 examples in NetIncomeLoss/USD/CY2025: Medline $1.157T, The Oncology Institute $60.6B, TheRealReal $41.8B — each would top a "most profitable companies" ranking. The actor never changes or silently drops such values; every frames row carries suspectedReportingError (true/false) and suspectedReason. Checks (USD and USD-per-share units; other units are not checked):
| Concept kind | Flagged when |
|---|---|
Profit / loss (…IncomeLoss, ProfitLoss, ComprehensiveIncome…, GrossProfit) | |value| > $400B, or |value| ≥ $1B and ≥ 5× the company's own total assets |
| Other flows (revenue, costs, cash flows) | |value| > $1.5T, or |value| ≥ $100M and ≥ 50× total assets |
Balance-sheet items other than Assets | |value| > $15T, or |value| ≥ $100M and ≥ 10× total assets |
Assets | |value| > $15T (a consistent scale error in the whole balance sheet cannot be detected from one frame) |
Per-share (USD/shares) | |value| > $1M per share |
Total assets come from the matching instant frame (CY2025 → Assets/USD/CY2025Q4I, one extra request). The limits are several times above any real filer (largest revenue ≈ $0.7T, net income ≈ $0.13T, assets ≈ $4.4T), and the dollar floors keep tiny shells (a $90K loss on $7 of assets) from being flagged. A flag is a strong hint, not proof — check the filing via accession. Set excludeSuspected: true to drop flagged rows before ranking.
Frames periods
CYyyyy = calendar year (duration concepts), CYyyyyQn = calendar quarter (duration), CYyyyyQnI = instantaneous at quarter end (balance-sheet concepts). SEC maps each filer's fiscal period to the closest calendar frame, so Walmart's FY ending Jan-2026 appears in CY2025. Frames exist for us-gaap (and dei) concepts; ifrs-full frames returned 404 in our tests — screen IFRS filers with statements mode instead.
Examples
Headline metrics for one company (default)
{ "tickers": ["AAPL"] }
Comps table: 5 fiscal years of standardized statements + ratios for peers
{ "tickers": ["AAPL", "MSFT", "NVDA"], "mode": "statements", "form": "10-K", "periods": 5 }
Screen: top 50 SEC filers by revenue, calendar 2025
{ "mode": "frames", "concept": "Revenues", "period": "CY2025", "maxItems": 50 }
Clean quarterly revenue & gross profit series since 2025 (no YTD mixing)
{ "tickers": ["NVDA"], "form": "10-Q", "periodTypes": ["quarter"], "startYear": 2025,"metricPreset": "custom", "metrics": ["revenue", "GrossProfit"] }
Foreign private issuer under IFRS, in its reporting currency
{ "tickers": ["TSM"], "mode": "statements", "form": "20-F", "currency": "TWD", "periods": 6 }
Full cash-flow statement history for a due-diligence file
{ "tickers": ["320193"], "metricPreset": "cashFlow", "periodTypes": ["annual"], "periods": 10 }
Every reported value of one concept, all units, since 2022
{ "tickers": ["MSFT"], "mode": "concept", "concept": "EarningsPerShareDiluted", "periodTypes": ["annual"], "startYear": 2022 }
Output
facts / concept / frames item (long format):
{"id": "0000320193:us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax:USD:2024-09-29:2025-09-27","ticker": "AAPL", "cik": "0000320193", "company": "Apple Inc.","taxonomy": "us-gaap", "metric": "Revenues","metricResolved": "RevenueFromContractWithCustomerExcludingAssessedTax","label": "Revenue from Contract with Customer, Excluding Assessed Tax", "category": "incomeStatement","unit": "USD", "value": 416161000000,"start": "2024-09-29", "end": "2025-09-27", "durationDays": 363, "periodType": "annual","fy": 2025, "fp": "FY", "form": "10-K", "filed": "2025-10-31", "accession": "0000320193-25-000079", "frame": "CY2025","fetchedAt": "2026-09-12T23:30:35.063Z","sourceUrl": "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json"}
statements item (wide format, trimmed):
{"id": "0000320193:stmt:2024-09-29:2025-09-27", "ticker": "AAPL", "cik": "0000320193", "company": "Apple Inc.","taxonomy": "us-gaap", "currency": "USD", "periodType": "annual", "start": "2024-09-29", "end": "2025-09-27","durationDays": 363, "fy": 2025, "fp": "FY", "form": "10-K", "filed": "2025-10-31", "accession": "0000320193-25-000079", "frame": "CY2025","revenue": 416161000000, "costOfRevenue": 220960000000, "grossProfit": 195201000000, "operatingIncome": 133050000000,"netIncome": 112010000000, "epsDiluted": 7.46, "epsBasic": 7.49, "sharesDiluted": 15004697000,"assets": 359241000000, "assetsCurrent": 147957000000, "liabilities": 285508000000, "liabilitiesCurrent": 165631000000,"equity": 73733000000, "cash": 35934000000, "longTermDebt": 78328000000, "debtCurrent": 12350000000,"operatingCashFlow": 111482000000, "capex": 12715000000, "dividendsPaid": 15421000000, "buybacks": 90711000000,"rnd": 34550000000, "sga": 27601000000, "interestExpense": null, "incomeTax": 20719000000, "dda": 11698000000, "sbc": 12863000000,"totalDebt": 90678000000, "freeCashFlow": 98767000000,"grossMargin": 0.4691, "operatingMargin": 0.3197, "netMargin": 0.2692, "debtToEquity": 1.2298, "currentRatio": 0.8933, "roe": 1.5191, "roa": 0.3118,"concepts": { "revenue": "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax", "debtCurrent": "us-gaap:LongTermDebtCurrent", "...": "..." },"fetchedAt": "2026-09-12T23:30:40.368Z", "sourceUrl": "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json"}
| Field | Description |
|---|---|
id | Stable key: cik:taxonomy:concept:unit:start:end (facts), cik:stmt:start:end (statements), cik:taxonomy:concept:unit:period (frames). |
ticker, cik, company | Ticker as resolved from SEC's list (null in frames for filers without a ticker), 10-digit CIK, SEC entity name. |
taxonomy | us-gaap, ifrs-full or dei. |
metric / metricResolved / label / category | What you asked for / the concept actually read / SEC's label / dictionary category (null for uncurated concepts). |
unit, value | XBRL unit (USD, EUR, shares, USD/shares, pure) and numeric value. |
start, end, durationDays, periodType | Period; start null and durationDays null for instants. |
fy, fp, form, filed, accession, frame | Filing metadata as provided by SEC (see the caveat on fy/fp above). |
rank, location | frames only: rank by value desc; filer's state/country code (US-CA). |
suspectedReportingError, suspectedReason | frames only: likely filer reporting error (see above) and a human-readable reason, e.g. scale vs company size: $60.6B is 368× the company's total assets ($164.7M). |
currency | statements only: monetary unit of the row. |
concepts | statements only: line → concept used. |
fetchedAt, sourceUrl | ISO timestamp; exact SEC API URL the item came from. |
Dataset views: Facts (long items), Statements (wide items) and Frames ranking (rank, value, suspected-error flag and reason).
Use it from code / agents
curl -X POST "https://api.apify.com/v2/acts/yadroo~sec-company-financials/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"tickers":["AAPL","MSFT"],"mode":"statements","form":"10-K","periods":5}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('yadroo/sec-company-financials').call({mode: 'frames', concept: 'NetIncomeLoss', period: 'CY2025', maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("yadroo/sec-company-financials").call(run_input={"tickers": ["TSM", "ASML"], "mode": "statements", "periods": 4})rows = client.dataset(run["defaultDatasetId"]).list_items().items
MCP: add https://mcp.apify.com to your agent (Claude, Cursor, custom) and call the yadroo/sec-company-financials tool with the same JSON input — the schema descriptions are written for agents.
Pricing
Pay per event: $0.001 per run start + $0.001 per dataset row. Bronze −10 %, Silver −20 %, Gold and above −30 % on the row price; the start event is the same on every plan; platform usage is included. Typical runs: default (AAPL, 9 metrics × 12 periods ≈ 96 rows) ≈ $0.10; comps table for 3 tickers × 5 years (15 rows) ≈ $0.016; top-50 revenue screen ≈ $0.051; metricPreset: "all" for one ticker (up to 85 × 12 = 1 020 rows, capped by maxItems) ≈ $1. Unknown tickers, missing metrics and failed requests are not rows and cost nothing. With a max cost per run set, the run stops when it is reached and ends with "Stopped at your spending limit: N rows delivered".
Limits & FAQ
- Rate limits — the actor sends SEC's required
User-Agentand stays under 7 requests/second (SEC allows 10 per IP); a request that meets 429/5xx or a network error is tried up to 3 times with backoff (honouringRetry-After). One request per company plus one for the ticker map;framesmakes two (the frame plus the matchingAssetsframe for the outlier check). - SEC blocks (HTTP 403) — SEC refuses an IP for about 10 minutes after it sent more than 10 requests per second (often other jobs sharing the IP). At the first 403 the actor makes no further request: rows already saved are kept, the status names the block and
SUMMARY.notReachedlists the tickers not read. Run again 10–15 minutes later; do not start many runs in parallel. - Run time — one company takes about 1–3 s (
companyfactsfiles are several MB; measured: 150 companies instatementsmode in 400 s at the default 256 MB), so the default 900 s timeout covers about 300 tickers. The run stops starting new companies shortly before its timeout and ends SUCCEEDED with "Stopped before the run timeout: N rows saved" (the tickers not read are inSUMMARY.notReached); raise the timeout or split the list for more. - Freshness — SEC updates
companyfactswithin minutes of a filing being accepted;framesare rebuilt on the same cycle. Data starts around 2009 (XBRL mandate). - Coverage — only SEC registrants that file XBRL financial data: US domestic filers, foreign private issuers (20-F/40-F/6-K with
us-gaaporifrs-full), and funds/ABS issuers are usually absent. Private companies, most banks' regulatory data and non-US-listed companies are not available. - Why is a metric missing? The filer used a different tag. Try the friendly alias (
revenue,netIncome,capex…),metricPreset: "all", ormode: "concept"with a candidate tag; the log lists which requested metrics were not found. - Duplicates / restatements — the same period appears in several filings; the actor keeps the most recently filed value per
(start, end). PassincludeAmendments: falseto ignore/Aforms. - Currency — non-US filers report in their own currency (ASML: EUR). TSM tags both TWD and a USD convenience translation;
currency: "auto"picks USD when present. Values are never converted. - Filer reporting errors — SEC does not validate magnitudes; values like Medline's $1.157T 2025 net income come straight from the filing. In
framesmode they are flagged (suspectedReportingError), infacts/statementsmode values are returned as filed. - Errors / not found — an unknown ticker, a CIK without XBRL data, a concept or metric the filer does not report, a company with no value matching your filters, or a failed request is not a dataset row (you are not charged for it). It is logged, listed in the
SUMMARYrecord of the default key-value store (notFound: [{ input, reason }],errors: [{ input, error }], their counts,notReachedandnotes) and counted in the status message, and the run continues with the next ticker. A run fails only when nothing could be fetched — e.g.frameswith a period/unit SEC has no frame for fails with the hint. - Frames with tickers — only the listed filers' values are returned; a listed filer the frame has no value for is in
SUMMARY.notFound. If none of the tickers is a known SEC ticker or CIK, the frame is not read and no row is written — the filter is never dropped (that would return and bill every filer). - Stock splits — values are as filed, not split-adjusted. Per-share values (
EarningsPerShareDiluted/Basic, dividends per share) and share counts are returned exactly as each filing reported them. Each period keeps the value of the latest filing that reports it, and a filing only restates the few comparative years it shows, so a long history mixes split bases — e.g. TSLA annual diluted EPS: 2015–2017 on the original basis (2017: −11.83), 2018–2019 adjusted for the 2020 5:1 split only (2019: −0.98), 2020 onward for both splits (5:1 in 2020, 3:1 in 2022).filed/accession/formon every row show which filing supplied it. Split adjustment is not done by the actor; divide older values by the cumulative split ratio yourself if you need one basis. - Roadmap — segment data (
srt/dimensional facts) and full-text search integration withsec-edgar-filings.
Made by Yadroo. Related actors: sec-edgar-filings · us-treasury-yields · fx-rates · world-bank-indicators · coingecko-markets · polymarket-markets