# US Stock Fundamentals Screener: Official SEC Financials (`frenchdatalab/us-stock-fundamentals-sec`) Actor

Revenue, profit, margins, EPS, cash flow, debt and growth for every US-listed company, from official SEC 10-K/10-Q filings. Screen the whole market (revenue, growth, margin, sector, exchange) or look up tickers. Annual or quarterly. No API key.

- **URL**: https://apify.com/frenchdatalab/us-stock-fundamentals-sec.md
- **Developed by:** [French Data lab](https://apify.com/frenchdatalab) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 companies

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

## US Stock Fundamentals Screener: Official SEC Financial Data

**Revenue, net income, margins, EPS, cash flow, free cash flow, debt, equity and growth** of **every US-listed company** (about 5,000 stocks on NYSE, Nasdaq, CBOE and OTC), straight from the **official 10-K and 10-Q filings** the companies send to the SEC.

**Screen the whole market** in one run (revenue, growth, margin, profitability, free cash flow, industry, exchange, state) or **look up a list of tickers**. Annual or quarterly. No API key, no scraping of finance websites.

### What can you do with it?

- 📈 **Stock screening**: *"US companies with over $1 billion of revenue growing 20%+"*, *"profitable software companies sorted by net income"*, *"small caps in California with positive free cash flow"*.
- 🧮 **Fundamentals for your models and spreadsheets**: one clean row per company with the figures and the ratios already computed.
- 🏦 **Credit, sales and market research**: size every listed company of an industry, rank them, follow their growth quarter after quarter.
- 🤖 **Data for AI agents and dashboards**: consistent fields, numbers as numbers, a link to the source filing on every row.

### Why this Actor?

| | This Actor | Typical finance scrapers |
|---|---|---|
| Source | ✅ official SEC XBRL data from 10-K / 10-Q filings, public domain | ⚠️ finance websites (terms of use, layout changes, blocking) |
| Whole-market screen | ✅ every listed company in one run (about 25 seconds) | ❌ one ticker at a time |
| Ratios included | ✅ growth, gross / operating / net margin, free cash flow, ROE, debt to equity, book value per share | ⚠️ |
| Data quality | ✅ periods aligned, components vs totals handled, derived liabilities, obvious filer tagging errors flagged in `dataWarnings` | ❌ |
| Link to the source | ✅ the SEC filing behind every row | ❌ |

### Input

| Field | Description | Example |
|---|---|---|
| `period` | Empty = latest fiscal year; `"2024"`; `"2026Q2"`; `"latest-quarter"` | `""` |
| `tickers` | Look up these companies only | `["AAPL", "MSFT", "BRK.B"]` |
| `exchanges` | NYSE, Nasdaq, CBOE, OTC | `["Nasdaq"]` |
| `sicCodes` | Industry (SIC prefixes) | `["7372"]` (software), `["283"]` (pharma), `["60"]` (banks) |
| `states` | Headquarters states | `["CA", "TX"]` |
| `minRevenue` / `maxRevenue` | Revenue in USD | `1000000000` |
| `minNetIncome` / `profitableOnly` | Profitability | `true` |
| `minRevenueGrowthPercent` | Growth vs the same period a year earlier | `20` |
| `minNetMarginPercent` | Net income / revenue | `10` |
| `positiveFreeCashFlowOnly` | Operating cash flow minus capex above zero | `true` |
| `sortBy` | revenue, netIncome, revenueGrowthPercent, netMarginPercent, operatingCashFlow, freeCashFlow, totalAssets, equity, epsDiluted | `"revenueGrowthPercent"` |
| `includeCompanyDetails` | SIC industry, fiscal year end, filer category, website | `true` |
| `maxResults` | Maximum companies | `500` |

### Output

Real example (shortened):

```json
{
    "ticker": "AAPL",
    "companyName": "Apple Inc.",
    "exchange": "Nasdaq",
    "periodType": "annual",
    "calendarPeriod": "CY2025",
    "periodStart": "2024-09-29",
    "periodEnd": "2025-09-27",
    "revenue": 416161000000,
    "revenueGrowthPercent": 6.4,
    "grossProfit": 195201000000,
    "grossMarginPercent": 46.9,
    "operatingIncome": 133050000000,
    "netIncome": 112010000000,
    "netMarginPercent": 26.9,
    "epsDiluted": 7.46,
    "operatingCashFlow": 111482000000,
    "freeCashFlow": 98767000000,
    "totalAssets": 359241000000,
    "totalLiabilities": 285508000000,
    "equity": 73733000000,
    "cash": 35934000000,
    "longTermDebt": 78328000000,
    "sharesOutstanding": 14776353000,
    "industry": "Electronic Computers",
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm"
}
```

Other fields: `tickers` (all share classes), `cik`, `revenuePreviousPeriod`, `operatingMarginPercent`, `netIncomePreviousPeriod`, `netIncomeGrowthPercent`, `epsBasic`, `epsDilutedPreviousPeriod`, `capitalExpenditure`, `researchAndDevelopment`, `returnOnEquityPercent`, `debtToEquity`, `bookValuePerShare`, `headquarters`, `state`, `sic`, `fiscalYearEnd`, `filerCategory`, `stateOfIncorporation`, `website`, `formerNames`, `dataWarnings`, `secFilingsUrl`.

The run summary (key-value store, `SUMMARY`) gives the total revenue and net income of the selection and the count by exchange and industry.

### Good to know

- **Periods**: the SEC groups fiscal years by calendar year (`CY2025` = fiscal years ending roughly from July 2025 to June 2026, e.g. Apple's year ending September 2025 and Nvidia's ending January 2026). `periodStart` / `periodEnd` give the exact fiscal period of each company.
- **Growth** compares with the same period one year earlier.
- **Quarterly periods**: income statement and balance sheet are quarterly; cash-flow figures are reported year-to-date in 10-Qs, so they are mostly empty for quarters (use annual periods for cash flow).
- **Figures are as reported** in USD. Fields a company does not report stay empty (e.g. banks have no gross profit). Values that cannot be right (a filer's tagging error, typically a proxy-statement table missing "in thousands") are left out and explained in `dataWarnings`.
- **No share prices**: the SEC does not publish prices, so market capitalisation and P/E are not included.
- Tickers come from the SEC's official ticker list; a requested ticker without figures for the period is listed free of charge with the reason.

### Pricing

You only pay for the companies returned: requested tickers without data are listed free. No subscription.

| Results | Price |
|---|---|
| 1 company | $0.004 |
| 100 companies | $0.40 |
| 1,000 companies | $4.00 |

A start fee of a fraction of a cent applies per run. Set a **maximum cost per run** and the Actor stops exactly at your budget.

### Use it in your tools

- **No code**: run it from the Apify Console, download the results as Excel, CSV or JSON, and **schedule** it (daily, weekly…).
- **Integrations**: send the results to Google Sheets, Slack, email, webhooks, Make, Zapier or n8n with Apify's integrations.
- **API**: start runs and read the results with the Apify API or the official Python and JavaScript clients.
- **AI agents**: assistants and agents that support MCP can call this Actor as a tool through Apify's MCP server (mcp.apify.com).

### Related Actors

- [US Startup Funding Rounds: SEC Form D Filings](https://apify.com/frenchdatalab/us-startup-funding-sec-form-d): US companies that just raised money (SEC Form D)
- [GLEIF LEI Lookup: Company Ownership, Parents & Subsidiaries](https://apify.com/frenchdatalab/lei-lookup-corporate-ownership): LEI look-up with parent companies and subsidiaries (GLEIF)
- [USAspending Federal Awards: Contract & Grant Winners](https://apify.com/frenchdatalab/usaspending-federal-awards): Who wins US federal contracts and grants (USAspending)
- [UK Company Financials: Companies House Accounts](https://apify.com/frenchdatalab/uk-company-financials): UK companies' latest accounts: employees, net assets, cash, debts

### Source & licence

**U.S. Securities and Exchange Commission**, EDGAR XBRL financial data (public domain, free to reuse). This Actor is independent and is not affiliated with or endorsed by the SEC. Not investment advice.

# Actor input Schema

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

Empty = latest fiscal year. "2024" = fiscal years mostly in 2024 (SEC calendar year), "2026Q2" = a quarter, "latest-quarter" = most recent reported quarter.

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

Look up these companies only, e.g. "AAPL", "MSFT", "BRK.B". Leave empty to screen every listed company.

## `exchanges` (type: `array`):

Leave empty for all.

## `sicCodes` (type: `array`):

Prefixes of SIC codes, e.g. "7372" (software), "283" (pharma), "60" (banks), "13" (oil & gas).

## `states` (type: `array`):

Two-letter codes, e.g. "CA", "TX".

## `minRevenue` (type: `integer`):

e.g. 1000000000 for $1 billion.

## `maxRevenue` (type: `integer`):

e.g. 50000000 for small caps.

## `minNetIncome` (type: `integer`):

Net income attributable to shareholders.

## `profitableOnly` (type: `boolean`):

Net income above zero.

## `minRevenueGrowthPercent` (type: `integer`):

Versus the same period one year earlier, e.g. 20.

## `minNetMarginPercent` (type: `integer`):

Net income / revenue, e.g. 10.

## `positiveFreeCashFlowOnly` (type: `boolean`):

Operating cash flow minus capital expenditure above zero (annual periods).

## `sortBy` (type: `string`):

Largest first.

## `includeCompanyDetails` (type: `boolean`):

SIC industry, fiscal year end, filer category, state of incorporation and website (one extra SEC request per company).

## `maxResults` (type: `integer`):

Maximum number of companies returned.

## Actor input object example

```json
{
  "minRevenue": 1000000000,
  "profitableOnly": false,
  "minRevenueGrowthPercent": 20,
  "positiveFreeCashFlowOnly": false,
  "sortBy": "revenueGrowthPercent",
  "includeCompanyDetails": true,
  "maxResults": 50
}
```

# Actor output Schema

## `companies` (type: `string`):

No description

## `summary` (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 = {
    "minRevenue": 1000000000,
    "minRevenueGrowthPercent": 20,
    "sortBy": "revenueGrowthPercent",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("frenchdatalab/us-stock-fundamentals-sec").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 = {
    "minRevenue": 1000000000,
    "minRevenueGrowthPercent": 20,
    "sortBy": "revenueGrowthPercent",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("frenchdatalab/us-stock-fundamentals-sec").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 '{
  "minRevenue": 1000000000,
  "minRevenueGrowthPercent": 20,
  "sortBy": "revenueGrowthPercent",
  "maxResults": 50
}' |
apify call frenchdatalab/us-stock-fundamentals-sec --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,frenchdatalab/us-stock-fundamentals-sec"
        }
    }
}
```

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/OffX8yA8tKqzhD0nE/builds/3NAP3SVbLptwYo86P/openapi.json
