# SEC Company Financials Scraper — Revenue, Net Income, EPS (`yadroo/sec-company-financials`) Actor

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.

- **URL**: https://apify.com/yadroo/sec-company-financials.md
- **Developed by:** [Samat Makatov](https://apify.com/yadroo) (community)
- **Categories:** AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## SEC Company Financials — revenue, net income, EPS, balance sheet & cash flow from XBRL

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

| 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\[] | `["AAPL"]` | Tickers (`AAPL`, `BRK-B`) or CIKs (`320193`, `CIK0000320193`). Resolved via [company\_tickers.json](https://www.sec.gov/files/company_tickers.json). Required except in `frames` mode, where it acts as a filter. Unknown → `error` item. |
| `metricPreset` | select | `core` | `core` (9 headline metrics — the historical default), `incomeStatement` (21), `balanceSheet` (38), `cashFlow` (16), `perShare` (10, incl. share counts & `dei`), `all` (85), `custom` (only `metrics`). Presets are unioned with `metrics`. If `metrics` is set and `metricPreset` omitted → `custom` (backward compatible). |
| `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`. |
| `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. |
| `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`. |
| `maxItems` | integer | `1000` | Hard cap on items per run. In `frames` mode results are sorted by value desc, so `maxItems: 50` = top 50. |

#### 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](https://xbrl.fasb.org/us-gaap/) / [ifrs-full](https://www.ifrs.org/issued-standards/ifrs-taxonomy/) / 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.

| 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 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)**

```json
{ "tickers": ["AAPL"] }
```

**Comps table: 5 fiscal years of standardized statements + ratios for peers**

```json
{ "tickers": ["AAPL", "MSFT", "NVDA"], "mode": "statements", "form": "10-K", "periods": 5 }
```

**Screen: top 50 SEC filers by revenue, calendar 2025**

```json
{ "mode": "frames", "concept": "Revenues", "period": "CY2025", "maxItems": 50 }
```

**Clean quarterly revenue & gross profit series since 2025 (no YTD mixing)**

```json
{ "tickers": ["NVDA"], "form": "10-Q", "periodTypes": ["quarter"], "startYear": 2025,
  "metricPreset": "custom", "metrics": ["revenue", "GrossProfit"] }
```

**Foreign private issuer under IFRS, in its reporting currency**

```json
{ "tickers": ["TSM"], "mode": "statements", "form": "20-F", "currency": "TWD", "periods": 6 }
```

**Full cash-flow statement history for a due-diligence file**

```json
{ "tickers": ["320193"], "metricPreset": "cashFlow", "periodTypes": ["annual"], "periods": 10 }
```

**Every reported value of one concept, all units, since 2022**

```json
{ "tickers": ["MSFT"], "mode": "concept", "concept": "EarningsPerShareDiluted", "periodTypes": ["annual"], "startYear": 2022 }
```

### Output

`facts` / `concept` / `frames` item (long format):

```json
{
  "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):

```json
{
  "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`). |
| `currency` | statements only: monetary unit of the row. |
| `concepts` | statements only: line → concept used. |
| `error` | Present on error items (unknown ticker, no XBRL data, missing frame). |
| `fetchedAt`, `sourceUrl` | ISO timestamp; exact SEC API URL the item came from. |

Dataset views: **Facts** (long items) and **Statements** (wide items).

### Use it from code / agents

```bash
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}'
```

```js
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();
```

```python
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 item**. Typical runs: default (`AAPL`, 9 metrics × 12 periods ≈ 96 items) ≈ $0.10; comps table for 3 tickers × 5 years (15 items) ≈ $0.016; top-50 revenue screen ≈ $0.051; `metricPreset: "all"` for one ticker (up to 85 × 12 = 1 020 items, capped by `maxItems`) ≈ $1. Error items count as items.

### Limits & FAQ

- **Rate limits** — the actor sends SEC's required `User-Agent` and stays under 7 requests/second (SEC allows 10); retries 3× with backoff on 429/5xx, then fails with a clear error. One request per company plus one for the ticker map; `frames` is a single request.
- **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.
- **Errors** — unknown ticker, a CIK without XBRL data, or a missing frame produce an item with `error` and a warning in the log; the run continues with the next ticker.
- **Roadmap** — segment data (`srt`/dimensional facts) and full-text search integration with `sec-edgar-filings`.

Made by Yadroo. Related actors: [sec-edgar-filings](https://apify.com/yadroo/sec-edgar-filings) · [us-treasury-yields](https://apify.com/yadroo/us-treasury-yields) · [fx-rates](https://apify.com/yadroo/fx-rates) · [world-bank-indicators](https://apify.com/yadroo/world-bank-indicators) · [coingecko-markets](https://apify.com/yadroo/coingecko-markets) · [polymarket-markets](https://apify.com/yadroo/polymarket-markets)

# Actor input Schema

## `mode` (type: `string`):

Output shape. Default "facts". "statements" builds standardized rows with computed freeCashFlow, margins, debtToEquity, currentRatio, roe, roa (null when inputs are missing). "concept" needs `concept`. "frames" needs `concept` + `period` (e.g. CY2025, CY2025Q1, CY2025Q4I) and ignores `metrics`/`periods`.

## `tickers` (type: `array`):

Stock tickers (AAPL, MSFT, BRK-B) or SEC CIK numbers (320193, CIK0000320193) of SEC-registered filers, including foreign private issuers (TSM, ASML, SAP). Resolved via https://www.sec.gov/files/company\_tickers.json; unknown values produce an `error` item. Required for facts/statements/concept; optional in frames mode (acts as a filter).

## `metricPreset` (type: `string`):

Default "core" = Revenues, RevenueFromContractWithCustomerExcludingAssessedTax, NetIncomeLoss, EarningsPerShareDiluted, Assets, Liabilities, CashAndCashEquivalentsAtCarryingValue, StockholdersEquity, OperatingIncomeLoss. Any preset is unioned with `metrics`; "custom" uses only `metrics`. If `metrics` is non-empty and metricPreset is omitted, "custom" is assumed (backward compatible).

## `metrics` (type: `array`):

Extra/custom XBRL concept names, e.g. \["GrossProfit", "ResearchAndDevelopmentExpense", "dei:EntityPublicFloat", "ifrs-full:Revenue"]. Prefix with a taxonomy to force it; otherwise us-gaap → ifrs-full → dei is searched. Friendly aliases work too (revenue, netIncome, operatingCashFlow, capex, equity, cash…) and fall back through equivalent tags (Revenues → RevenueFromContractWithCustomerExcludingAssessedTax → SalesRevenueNet → RevenuesNetOfInterestExpense; IFRS: Revenue). The concept actually used is reported in `metricResolved`. Full list: README → Reference.

## `periods` (type: `integer`):

facts: newest N periods per metric (after dedupe of restatements). statements: newest N rows per company. Ignored in concept and frames modes (use maxItems). Default 12.

## `form` (type: `string`):

Only facts reported in this form type. Amendments (10-K/A etc.) match their base form unless includeAmendments=false. US domestic filers use 10-K/10-Q; foreign private issuers (TSM, ASML, SAP…) use 20-F (annual) and 6-K (interim) — a 10-K filter on them returns nothing. Default "all".

## `periodTypes` (type: `array`):

Allowed values: instant, quarter, ytd, annual. Keep only these period types. instant = balance-sheet date (no start); quarter = duration ≤ 100 days; annual = 340–380 days; ytd = anything else with a start date (6-month, 9-month year-to-date figures in 10-Q/6-K). Empty = all in facts/concept mode; statements mode defaults to \["annual","quarter"]. Example for clean quarterly series: \["quarter"] (balance-sheet metrics are instants, add "instant" to keep them).

## `startYear` (type: `integer`):

Keep only periods whose END date is in this calendar year or later (XBRL data starts ~2009). Note: SEC's `fy`/`fp` fields describe the FILING's fiscal year, not the period — filter by year of `end` instead.

## `endYear` (type: `integer`):

Keep only periods whose END date is in this calendar year or earlier.

## `includeAmendments` (type: `boolean`):

Default true. Restated duplicates are always collapsed to the most recently filed value; set false to ignore amendment forms entirely.

## `taxonomy` (type: `string`):

Which XBRL taxonomy to read. Default "auto" tries us-gaap, then ifrs-full (foreign private issuers such as TSM/SAP report under ifrs-full; ASML reports 20-F under us-gaap in EUR), then dei. Forcing a taxonomy the filer does not use yields zero rows with a warning.

## `currency` (type: `string`):

"auto" (default) prefers USD, else the filer's reporting currency (EUR for ASML, TWD for TSM — TSM also files a USD convenience translation, which auto picks). Set an ISO code (EUR, TWD, JPY) to force it; per-share units follow (EUR/shares). Share counts ("shares") and ratios ("pure") are unaffected. The unit used is always in the `unit` field.

## `concept` (type: `string`):

XBRL concept for concept/frames modes, e.g. Revenues, NetIncomeLoss, Assets, EarningsPerShareDiluted, dei:EntityPublicFloat. Aliases and taxonomy prefixes work in concept mode. Default in frames mode: Revenues.

## `period` (type: `string`):

SEC frame period, required for frames mode: CY2025 (calendar year, duration concepts), CY2025Q1 (quarter, duration concepts), CY2025Q4I (instantaneous — REQUIRED for balance-sheet concepts like Assets, StockholdersEquity, CashAndCashEquivalentsAtCarryingValue). SEC aligns each filer's fiscal period to the closest calendar frame.

## `unit` (type: `string`):

Unit of measure for frames mode: USD (default), shares, USD/shares (for EPS), pure.

## `maxItems` (type: `integer`):

Hard cap on dataset items for the whole run (all modes). frames mode sorts by value descending, so maxItems=50 with Revenues/CY2025 = the 50 largest filers by revenue. Default 1000.

## Actor input object example

```json
{
  "mode": "facts",
  "tickers": [
    "AAPL"
  ],
  "metricPreset": "core",
  "metrics": [],
  "periods": 12,
  "form": "all",
  "periodTypes": [],
  "includeAmendments": true,
  "taxonomy": "auto",
  "currency": "auto",
  "unit": "USD",
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "tickers": [
        "AAPL"
    ],
    "metrics": [],
    "periodTypes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("yadroo/sec-company-financials").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "tickers": ["AAPL"],
    "metrics": [],
    "periodTypes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("yadroo/sec-company-financials").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tickers": [
    "AAPL"
  ],
  "metrics": [],
  "periodTypes": []
}' |
apify call yadroo/sec-company-financials --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yadroo/sec-company-financials"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/W9ewcuIrNqYAxvWcy/builds/zzJNUQqIBaIutaqDK/openapi.json
