SEC Company Financials Scraper — Revenue, Net Income, EPS avatar

SEC Company Financials Scraper — Revenue, Net Income, EPS

Pricing

from $0.70 / 1,000 result items

Go to Apify Store
SEC Company Financials Scraper — Revenue, Net Income, EPS

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

Samat Makatov

Maintained by Community

Actor 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 — frames mode: all SEC filers ranked by revenue, net income, assets or any concept for one calendar period.
  • Peer comparison / comps tables — statements mode 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 newest end date against your store.
  • AI-agent research — an LLM asks "what was NVIDIA's gross margin trend?" → one statements run returns clean JSON with formulas already applied.
  • Dataset building — long-format facts for time series / ML features, keyed by stable id.

Input

FieldTypeDefaultNotes
modeselectfactsfacts (long: metric × period), statements (wide: company × period + ratios), concept (one concept, all periods & units), frames (one concept × period across all companies).
tickersstring[]— (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.
metricPresetselect— (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.
metricsstring[][]Any XBRL concept: GrossProfit, dei:EntityPublicFloat, ifrs-full:Revenue, or a friendly alias (revenue, netIncome, capex, …). See Reference.
periodsinteger 1–20012facts: newest N periods per metric. statements: newest N rows per company. Ignored in concept/frames (use maxItems).
formselectallall, 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.
periodTypesstring[][] (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 / endYearinteger—Filter by calendar year of the period end date.
includeAmendmentsbooleantruefalse drops /A forms entirely.
taxonomyselectautoauto = us-gaap → ifrs-full → dei; or force us-gaap, ifrs-full, dei.
currencystringautoauto prefers USD, else the filer's currency (EUR for ASML). Force with an ISO code (TWD). Share counts and pure ratios are unaffected.
conceptstringRevenues (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.
periodstring—Frames period: CY2025, CY2025Q1, CY2025Q4I (instantaneous — required for balance-sheet concepts). Required in frames mode.
unitstringUSDFrames 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.
excludeSuspectedbooleanfalseFrames only: drop rows flagged suspectedReportingError before ranking (see Frames: suspected reporting errors).
maxItemsinteger1000Hard 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.
fieldsstring[][] (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

periodTypeRuleTypical source
instantno startbalance sheet (Assets, Liabilities, Equity, Cash, shares outstanding)
quarterduration ≤ 100 days10-Q quarter, Q4 derived in 10-K
ytdany other duration (≈180 / ≈270 days)6-month / 9-month year-to-date figures in 10-Q and 6-K
annual340–380 days10-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

ConceptTitle
RevenuesRevenues (total)
RevenueFromContractWithCustomerExcludingAssessedTaxRevenue from contracts with customers (ASC 606)
SalesRevenueNetNet sales (legacy tag, pre-2018)
RevenuesNetOfInterestExpenseRevenues net of interest expense (banks)
CostOfRevenueCost of revenue
CostOfGoodsAndServicesSoldCost of goods and services sold
GrossProfitGross profit
OperatingExpensesOperating expenses (total)
ResearchAndDevelopmentExpenseResearch and development expense
SellingGeneralAndAdministrativeExpenseSelling, general and administrative expense
SellingAndMarketingExpenseSelling and marketing expense
GeneralAndAdministrativeExpenseGeneral and administrative expense
OperatingIncomeLossOperating income (loss)
NonoperatingIncomeExpenseNon-operating income (expense)
InterestExpenseInterest expense
IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterestPre-tax income (continuing operations)
IncomeTaxExpenseBenefitIncome tax expense (benefit)
NetIncomeLossNet income (loss)
ComprehensiveIncomeNetOfTaxComprehensive income, net of tax
DepreciationDepletionAndAmortizationDepreciation, depletion and amortization
ShareBasedCompensationShare-based compensation

Balance sheet

ConceptTitle
AssetsTotal assets
AssetsCurrentCurrent assets
AssetsNoncurrentNon-current assets
CashAndCashEquivalentsAtCarryingValueCash and cash equivalents
CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsCash incl. restricted cash
MarketableSecuritiesCurrentMarketable securities, current
MarketableSecuritiesNoncurrentMarketable securities, non-current
ShortTermInvestmentsShort-term investments
AccountsReceivableNetCurrentAccounts receivable, net
InventoryNetInventory, net
OtherAssetsCurrentOther current assets
OtherAssetsNoncurrentOther non-current assets
PropertyPlantAndEquipmentNetProperty, plant and equipment, net
OperatingLeaseRightOfUseAssetOperating lease right-of-use assets
GoodwillGoodwill
IntangibleAssetsNetExcludingGoodwillIntangible assets, net (excl. goodwill)
LiabilitiesTotal liabilities
LiabilitiesCurrentCurrent liabilities
LiabilitiesNoncurrentNon-current liabilities
AccountsPayableCurrentAccounts payable
AccruedLiabilitiesCurrentAccrued liabilities, current
ContractWithCustomerLiabilityCurrentContract liabilities (deferred revenue), current
DeferredRevenueCurrentDeferred revenue, current (legacy)
DebtCurrentDebt, current
LongTermDebtCurrentLong-term debt, current portion
CommercialPaperCommercial paper
LongTermDebtLong-term debt (total incl. current)
LongTermDebtNoncurrentLong-term debt, non-current
OperatingLeaseLiabilityNoncurrentOperating lease liabilities, non-current
OtherLiabilitiesCurrentOther current liabilities
OtherLiabilitiesNoncurrentOther non-current liabilities
LiabilitiesAndStockholdersEquityTotal liabilities and equity
StockholdersEquityStockholders' equity
StockholdersEquityIncludingPortionAttributableToNoncontrollingInterestTotal equity incl. non-controlling interest
RetainedEarningsAccumulatedDeficitRetained earnings (accumulated deficit)
AccumulatedOtherComprehensiveIncomeLossNetOfTaxAccumulated other comprehensive income (loss)
CommonStocksIncludingAdditionalPaidInCapitalCommon stock incl. APIC
TreasuryStockValueTreasury stock

Cash flow

ConceptTitle
NetCashProvidedByUsedInOperatingActivitiesNet cash from operating activities
NetCashProvidedByUsedInInvestingActivitiesNet cash from investing activities
NetCashProvidedByUsedInFinancingActivitiesNet cash from financing activities
PaymentsToAcquirePropertyPlantAndEquipmentCapital expenditures (PP&E purchases)
PaymentsToAcquireBusinessesNetOfCashAcquiredAcquisitions, net of cash acquired
PaymentsForRepurchaseOfCommonStockShare repurchases
PaymentsOfDividendsDividends paid
PaymentsOfDividendsCommonStockDividends paid, common stock
ProceedsFromIssuanceOfLongTermDebtProceeds from long-term debt
RepaymentsOfLongTermDebtRepayments of long-term debt
DeferredIncomeTaxExpenseBenefitDeferred income tax expense (benefit)
IncreaseDecreaseInAccountsReceivableChange in accounts receivable
IncreaseDecreaseInInventoriesChange in inventories
IncreaseDecreaseInAccountsPayableChange in accounts payable
IncomeTaxesPaidNetIncome taxes paid, net
InterestPaidNetInterest paid, net

Per share

ConceptTitle
EarningsPerShareBasicEPS, basic
EarningsPerShareDilutedEPS, diluted
CommonStockDividendsPerShareDeclaredDividends declared per share

Shares

ConceptTitle
WeightedAverageNumberOfSharesOutstandingBasicWeighted average shares, basic
WeightedAverageNumberOfDilutedSharesOutstandingWeighted average shares, diluted
CommonStockSharesOutstandingCommon shares outstanding (balance sheet)
CommonStockSharesIssuedCommon shares issued
CommonStockSharesAuthorizedCommon shares authorized

DEI (cover page)

ConceptTitle
dei:EntityCommonStockSharesOutstandingShares outstanding (cover page)
dei:EntityPublicFloatPublic float (cover page)

Alias chains (friendly name → us-gaap fallback order → ifrs-full fallback order)

Friendlyus-gaap chainifrs-full chain
revenueRevenues → RevenueFromContractWithCustomerExcludingAssessedTax → SalesRevenueNet → RevenuesNetOfInterestExpenseRevenue → RevenueFromContractsWithCustomers
costOfRevenueCostOfRevenue → CostOfGoodsAndServicesSoldCostOfSales
grossProfitGrossProfitGrossProfit
operatingIncomeOperatingIncomeLossProfitLossFromOperatingActivities
netIncomeNetIncomeLoss → ProfitLossProfitLossAttributableToOwnersOfParent → ProfitLoss
incomeTaxIncomeTaxExpenseBenefitIncomeTaxExpenseContinuingOperations
interestExpenseInterestExpense → InterestExpenseNonoperatingFinanceCosts → InterestExpense
rndResearchAndDevelopmentExpenseResearchAndDevelopmentExpense
sgaSellingGeneralAndAdministrativeExpenseSellingGeneralAndAdministrativeExpense
epsDilutedEarningsPerShareDiluted → EarningsPerShareBasicAndDilutedDilutedEarningsLossPerShare
epsBasicEarningsPerShareBasic → EarningsPerShareBasicAndDilutedBasicEarningsLossPerShare
sharesDilutedWeightedAverageNumberOfDilutedSharesOutstandingAdjustedWeightedAverageShares → WeightedAverageShares
assetsAssetsAssets
assetsCurrentAssetsCurrentCurrentAssets
liabilitiesLiabilitiesLiabilities
liabilitiesCurrentLiabilitiesCurrentCurrentLiabilities
equityStockholdersEquity → StockholdersEquityIncludingPortionAttributableToNoncontrollingInterestEquityAttributableToOwnersOfParent → Equity
cashCashAndCashEquivalentsAtCarryingValue → CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsCashAndCashEquivalents
longTermDebtLongTermDebtNoncurrent → LongTermDebtNoncurrentPortionOfNoncurrentBondsIssued → LongtermBorrowings → NoncurrentPortionOfNoncurrentBorrowings
debtCurrentDebtCurrent → LongTermDebtCurrent → CommercialPaperCurrentPortionOfLongtermBorrowings → ShorttermBorrowings → CurrentBorrowingsAndCurrentPortionOfNoncurrentBorrowings
operatingCashFlowNetCashProvidedByUsedInOperatingActivities → NetCashProvidedByUsedInOperatingActivitiesContinuingOperationsCashFlowsFromUsedInOperatingActivities
capexPaymentsToAcquirePropertyPlantAndEquipment → PaymentsToAcquireProductiveAssetsPurchaseOfPropertyPlantAndEquipmentClassifiedAsInvestingActivities
dividendsPaidPaymentsOfDividends → PaymentsOfDividendsCommonStockDividendsPaidClassifiedAsFinancingActivities → DividendsPaid
buybacksPaymentsForRepurchaseOfCommonStockPaymentsToAcquireOrRedeemEntitysShares
ddaDepreciationDepletionAndAmortization → DepreciationAndAmortization → DepreciationAmortizationAndAccretionNetDepreciationAndAmortisationExpense
sbcShareBasedCompensation → 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.

FieldFormulaNull when
totalDebtlongTermDebt + debtCurrent (debtCurrent = 0 if absent but longTermDebt exists)both missing
freeCashFlowoperatingCashFlow − capexeither missing
grossMargingrossProfit / revenue (grossProfit falls back to revenue − costOfRevenue)no gross profit or no revenue
operatingMarginoperatingIncome / revenueeither missing
netMarginnetIncome / revenueeither missing
debtToEquitytotalDebt / equityeither missing or equity = 0
currentRatioassetsCurrent / liabilitiesCurrenteither missing
roenetIncome / equity (period-end equity, not average)either missing
roanetIncome / 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 kindFlagged 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"
}
FieldDescription
idStable key: cik:taxonomy:concept:unit:start:end (facts), cik:stmt:start:end (statements), cik:taxonomy:concept:unit:period (frames).
ticker, cik, companyTicker as resolved from SEC's list (null in frames for filers without a ticker), 10-digit CIK, SEC entity name.
taxonomyus-gaap, ifrs-full or dei.
metric / metricResolved / label / categoryWhat you asked for / the concept actually read / SEC's label / dictionary category (null for uncurated concepts).
unit, valueXBRL unit (USD, EUR, shares, USD/shares, pure) and numeric value.
start, end, durationDays, periodTypePeriod; start null and durationDays null for instants.
fy, fp, form, filed, accession, frameFiling metadata as provided by SEC (see the caveat on fy/fp above).
rank, locationframes only: rank by value desc; filer's state/country code (US-CA).
suspectedReportingError, suspectedReasonframes 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).
currencystatements only: monetary unit of the row.
conceptsstatements only: line → concept used.
fetchedAt, sourceUrlISO 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 ApifyClient
client = 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-Agent and 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 (honouring Retry-After). One request per company plus one for the ticker map; frames makes two (the frame plus the matching Assets frame 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.notReached lists 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 (companyfacts files are several MB; measured: 150 companies in statements mode 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 in SUMMARY.notReached); raise the timeout or split the list for more.
  • Freshness — SEC updates companyfacts within minutes of a filing being accepted; frames are 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-gaap or ifrs-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", or mode: "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). Pass includeAmendments: false to ignore /A forms.
  • 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 frames mode they are flagged (suspectedReportingError), in facts/statements mode 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 SUMMARY record of the default key-value store (notFound: [{ input, reason }], errors: [{ input, error }], their counts, notReached and notes) 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. frames with 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 / form on 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 with sec-edgar-filings.

Made by Yadroo. Related actors: sec-edgar-filings · us-treasury-yields · fx-rates · world-bank-indicators · coingecko-markets · polymarket-markets