# SEC EDGAR Company Profile Scraper (`moving_beacon-owner1/sec-edgar-company-profile-scraper`) Actor

Scrapes official SEC EDGAR company profiles using a company name, ticker, CIK, or keyword. Extracts legal names, tickers, exchanges, industry codes, contact details, business addresses, former names, and recent filing history. Ideal for B2B lead generation, company research, and industry prospecting

- **URL**: https://apify.com/moving_beacon-owner1/sec-edgar-company-profile-scraper.md
- **Developed by:** [Jamshaid Arif](https://apify.com/moving_beacon-owner1) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.99 / 1,000 results

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 Company Profile Scraper

Firmographic profiles for U.S. SEC registrants, built from the official public
EDGAR data surfaces. Search by company name, ticker or any keyword and get one
flat record per company with its legal entity name, CIK, tickers and exchanges,
SIC industry code and description, entity type, filer category, EIN, phone
number, business and mailing addresses, state of incorporation, fiscal year end,
former names and recent filing history.

This actor returns company **registration and profile** data — the identity and
contact record a company files with the SEC. It does not read XBRL financial
statements.

### Sources

All three are open SEC endpoints and need **no API key**:

| Surface | Used for |
| --- | --- |
| `https://www.sec.gov/files/company_tickers.json` | The official CIK / ticker / company-name index — resolves tickers and company-name searches. |
| `https://efts.sec.gov/LATEST/search-index?q=...` | EDGAR full-text search. Its `entity_filter` aggregation returns the registrants whose filings contain the phrase, so a keyword search finds companies by what they do, not just by name. |
| `https://data.sec.gov/submissions/CIK##########.json` | The per-registrant submissions file — the actual profile fields and filing history. |

Requests carry a descriptive User-Agent as the SEC fair-access policy requires
and pause between calls to stay inside the published rate limit.

### Input

| Field | Default | Description |
| --- | --- | --- |
| `query` | `solar` | Ticker, company name, or any keyword/phrase. Matched against the SEC CIK/ticker index first, then through EDGAR full-text search. Ignored when `ciks` is filled in. |
| `ciks` | *(empty)* | Fetch specific companies instead of searching. Accepts CIK numbers (`320193`, `0000320193`, `CIK0000320193`) or tickers (`AAPL`, `MSFT`). |
| `filing_forms` | `10-K` | Comma-separated EDGAR form types the keyword search is restricted to (`10-K`, `10-K,10-Q`, `S-1`, `8-K`). Empty searches every form. Does not affect direct CIK/ticker lookups. |
| `include_recent_filings` | `true` | Attach each company's 10 most recent EDGAR filings to its record. |
| `max_results` | `25` | Maximum company profiles to return (1–500). |
| `proxyConfiguration` | Optional | Not needed — the SEC endpoints are open worldwide. Enable only if your own network rate-limits sec.gov. |

### Output

One record per company. This is a real record from a default `solar` run; `recent_filings` is cut to its first 2 of 10 entries here, and the `raw` key (the full SEC submissions payload minus the bulk filing arrays) is left out for length:

```json
{
    "cik": "0001274494",
    "entity_name": "FIRST SOLAR, INC.",
    "tickers": "FSLR",
    "exchanges": "Nasdaq",
    "sic": "3674",
    "sic_description": "Semiconductors & Related Devices",
    "entity_type": "operating",
    "filer_category": "Large accelerated filer",
    "ein": "204623678",
    "phone": "(602) 414-9300",
    "state_of_incorporation": "DE",
    "fiscal_year_end": "1231",
    "business_street": "4300 E CAMELBACK ROAD SUITE 220",
    "business_city": "PHOENIX",
    "business_state": "AZ",
    "business_zip": "85018",
    "business_country": "United States",
    "mailing_street": "4300 E CAMELBACK ROAD SUITE 220",
    "mailing_city": "PHOENIX",
    "mailing_state": "AZ",
    "mailing_zip": "85018",
    "mailing_country": "United States",
    "former_names": "FIRST SOLAR HOLDINGS LLC",
    "match_source": "ticker_index",
    "profile_url": "https://www.sec.gov/edgar/browse/?CIK=0001274494",
    "submissions_url": "https://data.sec.gov/submissions/CIK0001274494.json",
    "filings_listed": 2684,
    "latest_filing_form": "4",
    "latest_filing_date": "2026-09-03",
    "latest_filing_url": "https://www.sec.gov/Archives/edgar/data/1274494/000127449426000184/xslF345X06/form4.xml",
    "recent_filings": [
        {
            "form": "4",
            "filing_date": "2026-09-03",
            "report_date": "2026-09-01",
            "accession_number": "0001274494-26-000184",
            "primary_document": "xslF345X06/form4.xml",
            "description": "PRIMARY DOCUMENT"
        },
        {
            "form": "4",
            "filing_date": "2026-09-02",
            "report_date": "2026-09-01",
            "accession_number": "0001274494-26-000182",
            "primary_document": "xslF345X06/form4.xml",
            "description": "PRIMARY DOCUMENT"
        }
    ]
}
```

`match_source` records how the company was found: `input_cik`,
`ticker_index_exact`, `ticker_index` or `full_text_search`.

### Notes

- Runs with empty input (defaults to a `solar` search across 10-K filers).
- `business_state` / `mailing_state` hold the US state code, or the province
  or region of a foreign address when the SEC records one; the country is in
  `business_country` / `mailing_country`.
- `fiscal_year_end` is the SEC's month-and-day code, `MMDD` (`1231` = 31
  December, `0926` = 26 September).
- `filings_listed` is the total number of filings EDGAR lists for the company,
  including older filings beyond the recent-filings window.
- The SEC's submissions records leave the company website and LEI fields
  blank, so neither is returned.
- EDGAR full-text search covers filings from 2001 onward.
- `ein` is blanked when the SEC record carries the all-zero placeholder.
- SEC EDGAR data is U.S. government public-domain data; the SEC asks automated
  clients to declare a User-Agent and stay under 10 requests/second, which this
  actor does.

# Actor input Schema

## `query` (type: `string`):

What to look for. A ticker ('AAPL') or a company name ('First Solar') is matched against the official SEC CIK/ticker index; the same text is then run through EDGAR full-text search, so any phrase ('solar', 'lithium battery', 'artificial intelligence') also returns the registrants whose filings talk about it. Ignored when 'CIKs or tickers' is filled in.

## `ciks` (type: `array`):

Fetch these specific companies instead of searching. Accepts CIK numbers ('320193', '0000320193', 'CIK0000320193') or tickers ('AAPL', 'MSFT'). Leave empty to use the search query.

## `filing_forms` (type: `string`):

Comma-separated EDGAR form types that the full-text keyword search is restricted to, e.g. '10-K' (annual reports, biased towards real operating companies), '10-K,10-Q', 'S-1', '8-K'. Leave empty to search every form type. Does not affect direct CIK/ticker lookups.

## `include_recent_filings` (type: `boolean`):

Attach each company's 10 most recent EDGAR filings (form type, filing date, report date, accession number, primary document) to its record.

## `max_results` (type: `integer`):

Maximum number of company profiles to return. One SEC request per company, paced to respect the SEC fair-access rate limit.

## `proxyConfiguration` (type: `object`):

Proxy settings for the run. The SEC endpoints are open worldwide and no proxy is required — enable one only if your own network rate-limits or filters sec.gov.

## Actor input object example

```json
{
  "query": "solar",
  "ciks": [
    "AAPL",
    "MSFT"
  ],
  "filing_forms": "10-K",
  "include_recent_filings": true,
  "max_results": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "query": "solar",
    "ciks": [
        "AAPL",
        "MSFT"
    ],
    "filing_forms": "10-K",
    "include_recent_filings": true,
    "max_results": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("moving_beacon-owner1/sec-edgar-company-profile-scraper").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 = {
    "query": "solar",
    "ciks": [
        "AAPL",
        "MSFT",
    ],
    "filing_forms": "10-K",
    "include_recent_filings": True,
    "max_results": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("moving_beacon-owner1/sec-edgar-company-profile-scraper").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 '{
  "query": "solar",
  "ciks": [
    "AAPL",
    "MSFT"
  ],
  "filing_forms": "10-K",
  "include_recent_filings": true,
  "max_results": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call moving_beacon-owner1/sec-edgar-company-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,moving_beacon-owner1/sec-edgar-company-profile-scraper"
        }
    }
}
```

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/773lD2ImWyDTKRDnS/builds/X3himpkyilm0jWoaj/openapi.json
