# SEC EDGAR Financials & Filings API — Revenue, EPS, Cash Flow (`nefes-tools/sec-edgar-financials`) Actor

Official SEC EDGAR data for any US-listed company by ticker: annual and quarterly revenue, net income, EPS, assets, debt, cash flow and margins (XBRL), plus 10-K, 10-Q and 8-K filings with direct links. No API key. Pay per result row.

- **URL**: https://apify.com/nefes-tools/sec-edgar-financials.md
- **Developed by:** [Erich Michal Sikora](https://apify.com/nefes-tools) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result rows

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?

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

## SEC EDGAR Financials & Filings

**Type a ticker, get clean financial statements.** Revenue, profit, EPS, balance sheet, cash flow and margins for any
US-listed company — annual and quarterly — plus its latest 10-K, 10-Q and 8-K filings with direct links.
Straight from the official SEC EDGAR database. No API key, no browser, no parsing XBRL yourself.

| You enter | You get |
|---|---|
| `AAPL`, `MSFT`, `JPM`, `320193` or `Apple Inc.` | one row per company **per fiscal year or quarter** with ~25 financial fields, and one row per **filing** |

### What's in a financials row

`ticker`, `companyName`, `exchange`, `industry`, `fiscalYear`, `fiscalPeriod` (FY, Q1–Q4), `periodStart`, `periodEnd`, `currency`,
and the numbers:

- **Income statement:** `revenue`, `costOfRevenue`, `grossProfit`, `researchAndDevelopment`, `sellingGeneralAdministrative`,
  `operatingIncome`, `netIncome`, `epsBasic`, `epsDiluted`, `dilutedSharesWeighted`
- **Balance sheet:** `totalAssets`, `currentAssets`, `totalLiabilities`, `currentLiabilities`, `stockholdersEquity`,
  `cashAndEquivalents`, `longTermDebt`
- **Cash flow:** `operatingCashFlow`, `capitalExpenditure`, `freeCashFlow`, `dividendsPaid`
- **Ratios:** `grossMargin`, `operatingMargin`, `netMargin`
- **Source:** `form` (10-K, 10-Q, 20-F), `filedDate`, `accessionNumber`, `filingUrl`

Example (Apple, fiscal 2025):

```json
{
  "type": "financials",
  "ticker": "AAPL",
  "companyName": "Apple Inc.",
  "fiscalYear": 2025,
  "fiscalPeriod": "FY",
  "periodEnd": "2025-09-27",
  "currency": "USD",
  "revenue": 416161000000,
  "netIncome": 112010000000,
  "epsDiluted": 7.46,
  "operatingCashFlow": 111482000000,
  "freeCashFlow": 98767000000,
  "totalAssets": 359241000000,
  "netMargin": 0.2692,
  "form": "10-K",
  "filedDate": "2025-10-31",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm"
}
```

### What's in a filing row

`form`, `filingDate`, `reportDate`, `description`, 8-K `items` with plain-English `itemDescriptions`
(e.g. *Results of Operations and Financial Condition*), `documentUrl` (the main document) and `filingUrl` (the SEC index page).
Filter by form type (`10-K`, `8-K`, `S-1`, `DEF 14A`…) and date.

### Who uses it

- **Investors and analysts:** build a multi-year comparison of 50 companies in one run, export to Excel or Google Sheets.
- **Fintech and AI apps:** feed an LLM or dashboard with verified, sourced numbers instead of scraped web pages.
- **Due diligence and research:** watch new 8-Ks (earnings, M\&A, auditor changes) for a list of companies on a schedule.

### Why this one

- **Official source.** SEC EDGAR XBRL data as filed by the companies, with a link to the exact filing behind every number.
- **Handles the messy parts.** Companies change XBRL tags over the years; banks, insurers and foreign issuers use different ones.
  The Actor maps them to one consistent set of columns. Restated numbers replace the originals.
- **Real quarters.** Cash flow in 10-Qs is year-to-date; we convert it to single quarters. Q4 is calculated as full year minus
  Q1–Q3 (flagged `q4Derived: true`; EPS is left empty for Q4 because it can't be derived that way).
- **Foreign filers (20-F)** are returned in their reporting currency (e.g. TSMC in TWD), stated in `currency`.
- **Fast and cheap.** Plain HTTP to the SEC API: a company with 5 years of data and 20 filings takes a few seconds.

### Pricing

Pay per result: **one charge per row** (one fiscal period of one company, or one filing).
Error rows (unknown ticker, no data) are free. Set a maximum cost per run and the Actor stops cleanly when it is reached.

Typical costs: 5 years of annual financials for one company = 5 rows; 50 companies × 5 years = 250 rows.
Turn off *Filings* if you only need the numbers.

### Input

| Field | Default | |
|---|---|---|
| `companies` | — | Tickers, CIKs or exact SEC names |
| `includeFinancials` | `true` | Financial statement rows |
| `periods` | `annual` | `annual`, `quarterly` or `both` |
| `yearsBack` | `5` | 1–30 years |
| `includeFilings` | `true` | Filing rows |
| `formTypes` | all | e.g. `["10-K", "8-K"]` |
| `maxFilingsPerCompany` | `20` | Newest first |
| `filingsSince` | — | `YYYY-MM-DD` |
| `contactEmail` | — | Optional, see below |

### Good to know

- Data covers companies that file with the SEC (US-listed, plus foreign companies filing 20-F/40-F). XBRL financial data
  exists from about 2009 onward; small or newly listed companies may have fewer fields.
- Some fields don't apply to every business (banks have no gross profit or current assets) and are `null`.
- **Companies only.** Insider forms filed by individuals (3, 4, 5, 144) are excluded, and CIKs of individual filers are refused.
- The Actor follows the SEC's fair-access rules: it identifies itself in the User-Agent and stays well below 10 requests per second.
  If you run large jobs, add your `contactEmail`; it's sent only to sec.gov in that header.
- This Actor is not affiliated with the U.S. Securities and Exchange Commission. The data is provided as is; always check
  important figures against the linked filing.

# Actor input Schema

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

US tickers (AAPL, BRK.B), SEC CIK numbers (320193) or exact SEC company names (Apple Inc.). One per line. Companies only: CIKs of individual filers are refused.

## `includeFinancials` (type: `boolean`):

One row per fiscal period with revenue, gross profit, operating and net income, EPS, assets, liabilities, equity, cash, debt, operating cash flow, capex, free cash flow and margins — from the company's XBRL financial data.

## `periods` (type: `string`):

Fiscal years, quarters, or both. Q4 is calculated as full year minus Q1–Q3 (flagged with q4Derived=true).

## `yearsBack` (type: `integer`):

How many years of history to return.

## `includeFilings` (type: `boolean`):

Latest filings (10-K, 10-Q, 8-K, S-1, DEF 14A…) with filing date, 8-K item descriptions and direct document links. Insider forms 3/4/5/144 of individuals are left out.

## `formTypes` (type: `array`):

Optional filter, e.g. 10-K, 10-Q, 8-K. Empty = all company forms.

## `maxFilingsPerCompany` (type: `integer`):

Newest filings first.

## `filingsSince` (type: `string`):

Optional. Only filings on or after this date (YYYY-MM-DD).

## `contactEmail` (type: `string`):

The SEC asks automated tools to identify themselves. If you plan large runs, add your e-mail; it is sent only to sec.gov in the User-Agent header and stored nowhere else.

## Actor input object example

```json
{
  "companies": [
    "AAPL",
    "MSFT"
  ],
  "includeFinancials": true,
  "periods": "annual",
  "yearsBack": 5,
  "includeFilings": true,
  "maxFilingsPerCompany": 20
}
```

# Actor output Schema

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

Financial statement rows (type=financials) and filing rows (type=filing). Error rows (type=error) are not charged.

# 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("nefes-tools/sec-edgar-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 = { "companies": [
        "AAPL",
        "MSFT",
    ] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nefes-tools/sec-edgar-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/sjaDa6qbmGpcdsln9/builds/M6Zm5GcZU2AHGID8X/openapi.json
