# SEC EDGAR Filings & XBRL Financials (`miacx/sec-edgar-filings-financials`) Actor

Get SEC 10-K, 10-Q and 8-K filings as Item-level Markdown, plus reported XBRL financials. Look up companies by ticker or CIK. No SEC API key needed.

- **URL**: https://apify.com/miacx/sec-edgar-filings-financials.md
- **Developed by:** [mia.cx](https://apify.com/miacx) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Filings & XBRL Financials

Get a company's risk factors or management discussion without making your agent read the whole annual report.
Send tickers or CIKs for SEC 10-K, 10-Q and 8-K Items as Markdown, or reported XBRL financials.
Each filing or financial period costs $0.0022, plus $0.00005 per run start at default memory.

### Try it

Get risk factors and management discussion from Apple's latest available annual filing:

```json
{
  "companies": ["AAPL"],
  "forms": ["10-K"],
  "sections": ["1A", "7"],
  "latest": 1
}
```

An empty input `{}` requests Apple's latest filing across 10-K, 10-Q and 8-K, with all applicable Items.
Data comes from official SEC endpoints. No SEC API key is needed.

### Use from an agent

Add `https://mcp.apify.com?tools=miacx/sec-edgar-filings-financials` to your MCP client and sign in to Apify.
Call the dedicated Actor tool with the input above, then use `get-dataset-items` to read the completed run's dataset.
Or set `APIFY_TOKEN` to your Apify API token and call the API, which returns JSON rows:

```sh
curl --fail-with-body 'https://api.apify.com/v2/actors/miacx~sec-edgar-filings-financials/run-sync-get-dataset-items' \
  -H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \
  -d '{"companies":["AAPL"],"forms":["10-K"],"sections":["1A","7"],"latest":1}'
```

### What you get

The dataset contains one row per filing or reported financial period.
Read `status` first. Requested Items can be null even on `ok`; use their matching `Reason` fields.
Ticker and CIK aliases for the same company share work and results within the run.
Every row includes `status`, `input`, `source`, `fetchedAt`, `kind` and `reason`.

Selected fields from the recorded annual-filing fixture are below. The Item text is shortened.

```json
{
  "status": "ok",
  "input": "AAPL",
  "kind": "filing",
  "company": "Apple Inc.",
  "cik": "0000320193",
  "form": "10-K",
  "filedAt": "2025-10-31",
  "periodOfReport": "2025-09-27",
  "accessionNumber": "0000320193-25-000079",
  "item1A": "## Item 1A\n\nThe following summarizes factors that could have a material adverse effect...",
  "item1AReason": null,
  "item7": "## Item 7\n\nThe following discussion should be read in conjunction with the consolidated financial statements...",
  "item7Reason": null
}
```

Filing rows also include the ticker, filing index URL and document URL.
Requested Items that cannot be located are null, with a matching `Reason` field. Unrequested Item fields are absent.
`sections: []` returns filing metadata without Item text.

Financial rows contain `periodStart`, `periodOfReport`, revenue, net income, EPS, assets, liabilities, cash and shares.
Each metric has companion `Unit`, `Concept` and `FiledAt` fields, such as `revenueUnit` and `revenueConcept`.
Missing metrics are null. Read the units before comparing values.

Quarterly, annual and year-to-date durations remain separate reported periods.
The Actor does not derive quarters by subtraction or convert currencies.
Metrics use the most recently filed matching observation; their filing dates can differ from the period's anchor filing.

### Input

| Field | Default | Behavior |
| --- | --- | --- |
| `companies` | `["AAPL"]` | Up to five SEC tickers or CIKs. An empty list returns `no_results`. |
| `mode` | `"filings"` | `filings`, `financials` or `both`. Financials use reported US GAAP facts. |
| `forms` | `["10-K", "10-Q", "8-K"]` | Filter filings by these forms. Financials use 10-K and 10-Q facts independently. |
| `sections` | `["all"]` | Return all applicable Items, specific Item IDs, or `[]` for metadata only. Applies to filings. |
| `dateFrom` | `""` | Inclusive lower date bound, `YYYY-MM-DD`. Empty means no lower bound. |
| `dateTo` | `""` | Inclusive upper date bound, `YYYY-MM-DD`. Empty means no upper bound. |
| `latest` | `1` | Up to 1–5 results per company, per mode. Filings share this cap across all selected forms. |

Dates filter filing dates in filings mode and period-end dates in financials mode.
Annual Item `1A` becomes `item1A`; quarterly `part2.1A` becomes `itempart2_1A`; current-report `2.02` becomes `item2_02`.
Use the Part prefix for quarterly Items, because Part I and Part II can share Item numbers.

To get two reported financial periods:

```json
{
  "companies": ["AAPL"],
  "mode": "financials",
  "latest": 2
}
```

### Pricing

| Event | Price | Counted unit |
| --- | --- | --- |
| Filing | $0.0022 | One successful filing row, including requested Items when available. Metadata-only rows also count. |
| Financial period | $0.0022 | One returned reported period with its available XBRL metrics. |
| Actor start | $0.00005 | Automatic startup event at the default 256 MB memory setting. |

One thousand filings or financial periods cost $2.20, plus $0.00005 per run start at default memory.
With one company, `mode: "both"` and `latest: 2`, up to four result events cost $0.0088.
The startup event adds $0.00005 at default memory.

Missing Items do not make a successful filing free. Error and no-result rows incur no result events.
Duplicate company aliases incur no additional result events within a run. Cached results still incur result events.
The $0.00005 run start applies even with no billable results at default memory.

### Limits and data freshness

This Actor handles 10-K, 10-Q and 8-K filings. It does not retrieve other filing forms.
Item extraction uses document headings. Ambiguous headings and image-only content produce null Items with reasons; no OCR runs.
Tables become Markdown rows. Original layout and styling are not preserved.

Primary filing HTML is streamed with a 64 MiB transfer ceiling; JSON endpoints have an 8 MiB ceiling. Only requested Items are retained, with limits of 1 Mi-character per Item and 2 Mi-characters per filing. An Item exceeding these output limits is null with a reason. Filing parsing is serialized to bound memory at the Actor's 256 MB setting.
Date-bounded filing requests inspect at most three matching historical submission files per company.
A wider request returns `range_too_broad`. Some sparse histories can return fewer filings than `latest` requests.

The ticker directory is cached for 24 hours across Actor runs in the named Apify key-value store. Cached submissions can be reused for five minutes, financial facts for six hours and extracted filing Items for seven days. The original filing HTML is discarded rather than persisted.
`fetchedAt` marks output production time, including cached output; it does not prove a fresh SEC fetch.
The named store `sec-filings-cache-v1` keeps cache records until overwritten or deleted.

### If a row fails

| Status | Next step |
| --- | --- |
| `invalid_company` | Check the ticker or CIK. |
| `no_results` | Check company coverage, forms and dates. Non-US-GAAP financials are unsupported. |
| `range_too_broad` | Narrow the date range. |
| `upstream_403` | SEC denied the request. The Actor does not bypass access restrictions. |
| `rate_limited`, `upstream_429` | Retry later with less concurrent work. |
| `response_too_large` | Read the reason; the source response exceeds the size cap. |
| `budget_exhausted` | Raise the run budget or request fewer results. Further emission stops. |

Read each row's status. A batch can contain successful and failed rows together.
In `both` mode, financials can succeed even when filing retrieval fails.

# Actor input Schema

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

Up to 5 SEC tickers or CIKs. Defaults to \["AAPL"]; \[] returns no_results. Ticker and CIK aliases share results and charges within a run. Unknown tickers return invalid_company.

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

filings (default) returns one row per filing; financials returns reported US GAAP metrics per period; both returns both. latest applies separately to each mode. Successful rows incur their matching event.

## `forms` (type: `array`):

Choose one or more of 10-K, 10-Q and 8-K; defaults to all three. Filters filings only. Financials use reported 10-K/10-Q facts, including amendments, independently of this field. latest caps filings across selected forms.

## `sections` (type: `array`):

Item IDs for filings: 1A or 7 for 10-K; part1.1 or part2.1A for 10-Q; 2.02 or 9.01 for 8-K. Defaults to \["all"], which returns every applicable Item. \[] returns metadata only. Missing Items are null with a reason. Successful metadata-only rows and rows with missing Items still incur Filing events.

## `dateFrom` (type: `string`):

Inclusive lower date bound as YYYY-MM-DD, or empty (default) for no lower bound. Filters filing dates in filings mode and period-end dates in financials mode. Must not follow dateTo. Date-bounded filing requests inspect at most three matching historical submission files.

## `dateTo` (type: `string`):

Inclusive upper date bound as YYYY-MM-DD, or empty (default) for no upper bound. Filters filing dates in filings mode and period-end dates in financials mode. Must not precede dateFrom. latest caps the matching results.

## `latest` (type: `integer`):

Integer from 1 to 5, default 1. Caps results per company and per mode; filings share the cap across selected forms. both can return twice this many rows per company. Financial periods preserve reported quarterly, annual and year-to-date durations. Each successful row incurs a result event.

## Actor input object example

```json
{
  "companies": [
    "AAPL"
  ],
  "mode": "filings",
  "forms": [
    "10-K",
    "10-Q",
    "8-K"
  ],
  "sections": [
    "all"
  ],
  "dateFrom": "",
  "dateTo": "",
  "latest": 1
}
```

# Actor output Schema

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

One row per item, each with a status field.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("miacx/sec-edgar-filings-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("miacx/sec-edgar-filings-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 '{}' |
apify call miacx/sec-edgar-filings-financials --silent --output-dataset

```

## MCP server setup

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