# SEC Company Financials API: Annual and Quarterly XBRL (`conserving_celerytop/sec-company-financials-api`) Actor

Get SEC company financials by ticker or CIK: revenue, net income, EPS, assets, liabilities, equity, operating cash flow and shares, annual and quarterly, with the filing each row comes from. $0.01 per company.

- **URL**: https://apify.com/conserving_celerytop/sec-company-financials-api.md
- **Developed by:** [Don Mangu](https://apify.com/conserving_celerytop) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 company financials

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Get SEC company financials for any US-listed company by ticker or CIK, annual and quarterly, for $10 per 1,000 companies ($0.01 each). Each row has revenue, net income, diluted EPS, operating cash flow, total assets, total liabilities, stockholders' equity and shares outstanding, plus the filing the figures come from.

### What does SEC Company Financials API do?

It reads the structured financial data (XBRL) that public companies file with the SEC in their 10-K and 10-Q reports and turns it into one clean row per company and fiscal period. You do not need to know which XBRL tags a company uses. Companies often change a tag over the years, and this Actor joins the old and the new tag into one continuous series.

- Takes up to 200 tickers or CIK numbers per run.
- Returns annual fiscal years, single quarters, or both.
- Shows the SEC accession number and filing date for every row, so each figure can be traced to its filing.
- Works with no login, no API key and no proxy.

### Sample output

One annual row for Apple (values in US dollars, shortened):

```json
{
  "ticker": "AAPL",
  "cik": "0000320193",
  "companyName": "Apple Inc.",
  "status": "ok",
  "periodType": "annual",
  "fiscalYear": 2024,
  "fiscalPeriod": "FY",
  "periodStart": "2023-10-01",
  "periodEnd": "2024-09-28",
  "form": "10-K",
  "filedDate": "2025-10-31",
  "accession": "0000320193-25-000079",
  "firstFiledDate": "2024-11-01",
  "firstAccession": "0000320193-24-000123",
  "revenue": 391035000000,
  "netIncome": 93736000000,
  "epsDiluted": 6.08,
  "operatingCashFlow": 118254000000,
  "totalAssets": 364980000000,
  "totalLiabilities": 308030000000,
  "stockholdersEquity": 56950000000,
  "sharesOutstanding": 15116786000,
  "derived": false
}
```

### How to get SEC company financials

1. Click **Try for free**.
2. In **Companies**, enter tickers such as AAPL and MSFT, or CIK numbers such as 320193, one per line.
3. Choose **Period type** and how many periods you want per company.
4. Click **Start**, open the **Financials** view, and export as JSON, CSV or Excel.

### What data do you get?

| Field | Meaning |
|---|---|
| ticker, cik, companyName | The company as the SEC lists it |
| periodType, fiscalYear, fiscalPeriod | annual or quarterly, with the company's own fiscal year and FY, Q1, Q2, Q3 or Q4 |
| periodStart, periodEnd | The dates the figures cover |
| revenue, netIncome, operatingCashFlow | Flows for the period, in US dollars |
| epsDiluted | Diluted earnings per share for the period |
| totalAssets, totalLiabilities, stockholdersEquity | Balance sheet values at the period end |
| sharesOutstanding | Shares outstanding at the period end |
| form, filedDate, accession | The filing the values come from |
| firstFiledDate, firstAccession | The first filing that reported the period |
| derived | true when a quarter was calculated from year-to-date figures |
| sourceTags | The SEC tag used for each figure |

Empty values are returned as null, never as zero. Banks and insurers often tag revenue differently, so revenue can be null for some of their quarters.

### Annual, quarterly and restated figures

- Annual rows use full fiscal years from 10-K filings.
- Quarterly rows use 10-Q filings. The fourth quarter is not a separate filing, so it is the fiscal year minus the first nine months and is marked `derived`. Quarterly cash flow is also calculated from year-to-date figures. EPS is not additive, so it stays empty for a derived fourth quarter.
- **Value basis** decides what happens when a company restates a period. Latest uses the most recently filed value. Original uses the value from the first filing.

### Pricing

You pay **$0.01 per company** (the `company-financials` event), however many periods the company returns. Volume tiers on the Apify Store lower this price. Apify platform usage is included.

| Example | Cost |
|---|---|
| 1 company, 5 fiscal years | $0.01 |
| 100 companies, annual and quarterly, 8 periods each | $1.00 |
| 20 companies, refreshed every day for 30 days | $6.00 |

A company is charged when its SEC data was found and the rows are saved. Entries that are not valid tickers or CIKs, tickers the SEC does not list and CIKs with no SEC financial data are free and appear as a row with a status and a message.

### Input example

```json
{
  "companies": ["AAPL", "MSFT", "NVDA"],
  "periodType": "annual",
  "maxPeriods": 3
}
```

### FAQ

#### Is it legal to use this data?

The data is public company information published by the SEC through its free API, which needs no login or key. It contains company figures only and no personal data. The Actor sends one request at a time, well under the SEC limit of 10 requests per second, and stops if the SEC refuses requests. Check that your own use follows the laws and terms that apply to you.

#### Which companies are covered?

Companies that report in US GAAP in 10-K and 10-Q filings. Foreign filers that report in IFRS on forms 20-F or 40-F return the status `no_us_gaap_facts`.

#### Why is a value empty?

The company did not file that figure under a tag this Actor reads, or the period is missing from its filings. The SEC data is what companies tagged themselves, so gaps exist, most often for revenue at banks.

#### Why does a ticker return `ticker_not_found`?

The SEC ticker list holds current listings only. Use the CIK number for delisted or renamed companies.

#### How long does a run take?

In a local test, 20 large companies took about 6 seconds.

#### Is this an official SEC product?

No. This Actor is built and maintained by Don Mangu, an independent developer. It is not affiliated with or endorsed by the U.S. Securities and Exchange Commission, and it uses no SEC logo.

### Related Actors

SEC EDGAR Filings API from the same author returns the list of filings behind these numbers. Use the accession number to match a row to its filing.

# Actor input Schema

## `companies` (type: `array`):

Enter stock tickers such as AAPL or MSFT, or SEC CIK numbers such as 320193. One per line, up to 200 per run. Class shares use a dash or a dot, for example BRK-B. Each company is charged once, however many periods it returns.

## `periodType` (type: `string`):

Choose annual for fiscal years, quarterly for single quarters, or both. The fourth quarter is calculated as the fiscal year minus the first nine months, and marked derived.

## `maxPeriods` (type: `integer`):

Set how many of the newest periods to return per company and period type. Five annual periods return five fiscal years. The price stays the same for any number.

## `valueBasis` (type: `string`):

Choose latest to get restated figures where a company corrected a period in a later filing. Choose original to keep the value from the first filing that reported the period.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "MSFT"
  ],
  "periodType": "annual",
  "maxPeriods": 5,
  "valueBasis": "latest"
}
```

# Actor output Schema

## `financials` (type: `string`):

No description

## `stats` (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 = {
    "companies": [
        "AAPL",
        "MSFT"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("conserving_celerytop/sec-company-financials-api").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 = { "companies": [
        "AAPL",
        "MSFT",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("conserving_celerytop/sec-company-financials-api").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 '{
  "companies": [
    "AAPL",
    "MSFT"
  ]
}' |
apify call conserving_celerytop/sec-company-financials-api --silent --output-dataset

```

## MCP server setup

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

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/oMCw5IVT12go7u9it/builds/TSckIZWF8pNKs6ivG/openapi.json
