# SEC EDGAR Filings by Ticker or CIK (Official Data) (`japan-opendata/sec-edgar-filings`) Actor

List SEC EDGAR filings - 20-F, 6-K, 10-K, 10-Q, 8-K and every other form - for any company by ticker or CIK, from the SEC's official free data. Filter by form type and filing date. One row per filing with links to the document and the filing index. No API key needed.

- **URL**: https://apify.com/japan-opendata/sec-edgar-filings.md
- **Developed by:** [Japan Open Data](https://apify.com/japan-opendata) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 by Ticker or CIK (Official Data)

Get the list of **SEC EDGAR filings** for any company as clean JSON: annual and quarterly reports (10-K, 10-Q, 20-F), current reports (8-K, 6-K), proxy statements and every other form. Give **tickers** (TM, SONY, AAPL) or **CIK numbers**, and optionally the form types and filing dates you want.

The data comes from the SEC's **official free EDGAR data** (`data.sec.gov` and `www.sec.gov`). **You don't need an API key.**

### What you get

One row per filing, with direct links to the main document and to the filing index page. Foreign companies listed in the U.S. (such as Toyota and Sony, which file 20-F and 6-K) are covered the same way as U.S. companies.

### Quick start

```json
{ "companies": ["TM", "SONY"], "formTypes": ["20-F", "6-K"], "dateFrom": "2024-01-01" }
```

This lists Toyota's and Sony's annual reports (20-F) and current reports (6-K) filed since 2024.

```json
{ "companies": ["AAPL", "0000789019"], "formTypes": ["8-K"], "maxFilings": 50 }
```

This lists the latest 50 current reports (8-K) of Apple and of the company with CIK 0000789019, with the 8-K item numbers.

### Input

| Field | What it does |
|---|---|
| `companies` | Tickers (`TM`, `BRK-B`) or CIKs (up to 10 digits). Up to 25 per run. Left out: `TM` and `SONY` |
| `formTypes` | Only these forms, e.g. `20-F`, `6-K`, `10-K`, `10-Q`, `8-K`. Amendments are separate types (`10-K/A`). Empty or left out: all forms. The input form in Apify Console starts with five common forms filled in; clear it to get every form |
| `dateFrom` / `dateTo` | Filing dates, `YYYY-MM-DD` |
| `maxFilings` | Most filings per company, newest first (default 200, up to 5,000). Older filings are read only when needed |
| `contactName` / `contactEmail` | Optional. Sent to the SEC in the `User-Agent` header as `Name email` (see below). Left out: the Actor's own contact is used |

### Output

| Field | Example |
|---|---|
| cik | 0001094517 |
| ticker | TM |
| companyName | TOYOTA MOTOR CORP/ |
| formType | 20-F |
| filingDate / reportDate | 2025-06-20 / 2025-03-31 (`reportDate` is null when the SEC gives none) |
| accessionNumber | 0001094517-25-000060 |
| primaryDocument | the main file name |
| filingUrl | `https://www.sec.gov/Archives/edgar/data/1094517/000109451725000060/0001094517-25-000060-index.htm` |
| documentUrl | link to the main document (null when there is none) |
| items | 8-K item numbers, e.g. `["2.02", "9.01"]` (empty for other forms) |
| isXBRL | true when the filing has XBRL data |
| stateOfIncorporation | e.g. Japan, DE |
| businessCountry | country of the business address as the SEC writes it (for U.S. companies this is the state, e.g. CA) |
| source / disclaimer / sourceUrl / crawledAt | attribution, the EDGAR JSON the row came from, and when it was read |

The example values above show the shape only.

### SEC rules and how this Actor follows them

- **Name yourself.** The SEC asks every program to send a `User-Agent` header with a name and an email, like `Sample Company Name AdminContact@<sample company domain>.com` (https://www.sec.gov/os/accessing-edgar-data). If you leave **Contact name** and **Contact email** empty, the Actor names itself with its own contact (Japan Open Data). You can fill in your own instead. The email is used only for that header and is not added to the output rows.
- **At most 10 requests per second** (https://www.sec.gov/privacy). This Actor sends **one request at a time**, waits **at least 200 ms** between requests (5 per second or fewer), and sends **at most 60 requests per run**, retries included. Busy answers (HTTP 5xx, 429) are retried twice after a pause; other errors skip that company with a warning and the run goes on.
- **Reuse.** The SEC says that information presented on sec.gov is public information and may be copied or further distributed without the SEC's permission, and asks users to cite the SEC as the source (https://www.sec.gov/privacy). Every row carries the source below.

### Source

- **Source:** U.S. Securities and Exchange Commission (SEC) EDGAR, https://www.sec.gov/
- This Actor only reshapes the SEC's JSON into one row per filing and adds links. It does not change the filing data.
- **This Actor is not affiliated with or endorsed by the U.S. Securities and Exchange Commission (SEC).**

### Limits

- Ticker lookup uses the SEC's `company_tickers.json`. If a ticker is not there (for example an old or delisted one), use the company's CIK.
- Filing lists only. The Actor does not download or parse the documents themselves.
- The default memory is 512 MB, enough for several companies at 5,000 filings each.

# Actor input Schema

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

Tickers such as TM (Toyota), SONY, AAPL, BRK-B, or SEC CIK numbers such as 0001094517 (up to 10 digits). Up to 25 per run. If you leave this out, TM and SONY are used.

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

Only these forms, e.g. 20-F, 6-K, 10-K, 10-Q, 8-K, DEF 14A. Amendments have their own type (10-K/A). Leave empty for all forms.

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

First filing date, YYYY-MM-DD (e.g. 2024-01-01). Leave empty for no limit.

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

Last filing date, YYYY-MM-DD. Leave empty for the latest.

## `maxFilings` (type: `integer`):

Most filings to save for each company (newest first). Older filings are read only when needed.

## `contactName` (type: `string`):

The SEC asks programs to name themselves in the User-Agent header as "Name email". Your name or company name, plain ASCII. Leave empty to use the Actor's default.

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

Email sent to the SEC in the User-Agent header with the name above. It is used only for that header and is not added to the output rows.

## Actor input object example

```json
{
  "companies": [
    "TM",
    "SONY"
  ],
  "formTypes": [
    "20-F",
    "6-K",
    "10-K",
    "10-Q",
    "8-K"
  ],
  "maxFilings": 200
}
```

# 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 = {
    "companies": [
        "TM",
        "SONY"
    ],
    "formTypes": [
        "20-F",
        "6-K",
        "10-K",
        "10-Q",
        "8-K"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("japan-opendata/sec-edgar-filings").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": [
        "TM",
        "SONY",
    ],
    "formTypes": [
        "20-F",
        "6-K",
        "10-K",
        "10-Q",
        "8-K",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("japan-opendata/sec-edgar-filings").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": [
    "TM",
    "SONY"
  ],
  "formTypes": [
    "20-F",
    "6-K",
    "10-K",
    "10-Q",
    "8-K"
  ]
}' |
apify call japan-opendata/sec-edgar-filings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,japan-opendata/sec-edgar-filings"
        }
    }
}
```

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/DmgtE1945sI5zjTqZ/builds/FHviph4WZEGyTe48G/openapi.json
