SEC EDGAR Filings Scraper: 10-K, 10-Q, 8-K, Form 4, 13F avatar

SEC EDGAR Filings Scraper: 10-K, 10-Q, 8-K, Form 4, 13F

Pricing

from $1.40 / 1,000 filings

Go to Apify Store
SEC EDGAR Filings Scraper: 10-K, 10-Q, 8-K, Form 4, 13F

SEC EDGAR Filings Scraper: 10-K, 10-Q, 8-K, Form 4, 13F

Get SEC EDGAR filings by ticker, CIK or company name, or every new filing of a form type: 10-K, 10-Q, 8-K, Form 4, 13F, Form D, S-1. Filter by form and date, add the document text as Markdown, and schedule it with only-new mode. Live from the SEC's official APIs.

Pricing

from $1.40 / 1,000 filings

Rating

0.0

(0)

Developer

Michael Costa

Michael Costa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share

What does SEC EDGAR Filings Scraper do?

SEC EDGAR Filings Scraper gets SEC filings (10-K, 10-Q, 8-K, Form 4, 13F, Form D and every other form) for the companies you list by ticker, CIK or name, or every company's new filings of a form type, live from the SEC's official EDGAR APIs, with dates, links and optionally the text as Markdown.

It is not a full-text search of filing contents (the SEC doesn't publish that search for programs; see the FAQ).

For real use, give your own contact (name or company + email). The SEC requires every automated tool to say who runs it. It goes only into the request header sent to the SEC; this actor never logs or stores it.

Try it in one click: just start it: the input is pre-filled with Apple and Microsoft, 20 filings each. A run that small (up to 2 companies, 20 filings each, no document text, no only-new) works without a contact, as a demo under the actor developer's contact. Anything bigger needs yours. That's 40 filings, or roughly $0.08 (40 × $0.002 per filing, plus $0.00005 for the run start). Then replace it with what you actually want.

Monitor new SEC filings (filing alerts)

SEC EDGAR Filings Scraper can run on a schedule and give you only the filings it hasn't returned before:

  1. Save a task. Fill in your contact, your Companies (or pick Latest filings of every company and the Form types, e.g. D for new private fundraises or 8-K for material events), turn on Only new filings since the last run (onlyNew: true in the API), and click Save as a new task. The first run returns what matches; later runs only filings this search hasn't returned before.
  2. Schedule it. In Apify Console, open Schedules, click Create new, pick the task and set how often it runs: hourly for a company watchlist (the SEC's company data is updated as filings come in), once a day for latest filings (the SEC publishes each day's index after its business day ends).
  3. Send the new filings where you work, from the task's Integrations tab:
    • Slack: a message in the channel you choose when a run succeeds.
    • Email: Send results email via Gmail sends the run's results, with the dataset attached.
    • Webhook: a POST to your URL on the ACTOR.RUN.SUCCEEDED event. The payload's resource.defaultDatasetId points to the new filings: GET https://api.apify.com/v2/datasets/<defaultDatasetId>/items?format=json with your API token.
    • Make, Zapier or n8n: each has an Apify step that starts on a finished run and reads its dataset.

A run that finds nothing new returns 0 filings and costs only the $0.00005 start fee. Keep the task's filters fixed: the memory is per company line and filter set, so changing them starts a fresh search.

What data does SEC EDGAR Filings Scraper return?

FieldExampleNotes
formType8-KEDGAR's form type, amendments end in /A.
filingDate, acceptedAt2026-07-30, 2026-07-30T20:30:28.000ZreportDate is the period or event date (null if the form has none).
companyName, tickers, cikApple Inc., ["AAPL"], 0000320193tickers is empty for companies without one.
items["2.02", "9.01"]8-K item numbers (Form D: exemptions claimed); empty for other forms.
filingIndexUrlhttps://www.sec.gov/Archives/edgar/data/320193/...-index.htmEvery document and exhibit of the filing.
documentUrl, primaryDocument.../aapl-20260730.htmThe main document; for Forms 3/4/5, D and 13F, the SEC's readable rendering.
documentTextUNITED STATES SECURITIES AND EXCHANGE COMMISSION ...With Include the document text: Markdown with tables, or plain text.
sic, sicDescription, stateOfIncorporation3571, Electronic Computers, CAThe filer's industry and state.
accessionNumber (= id)0000320193-26-000018EDGAR's unique filing number, the same on every run.

Every filing has the same fields; the full record is under Output.

How much does it cost to scrape SEC filings?

You pay per filing returned: $2.00 per 1,000 filings, plus $0.00005 each time a run starts. Companies that aren't found, filings already returned (only-new mode) and anything past your limits are free, and a repeat run with nothing new costs only the start fee. The document text is included in the price.

  • The example below: 40 filings × $0.002 = $0.08, plus the $0.00005 start fee.
  • A month, for example: a daily watch of 50 companies' 8-Ks, 10-Qs and 10-Ks (about 150 new filings a month): 150 × $0.002 = $0.30, plus 30 starts ($0.0015). All new Form D filings every day (216 and 297 on the two days we measured, amendments included): about 22 × 250 × $0.002 ≈ $11 a month.
  • Caps: Max results per run in the input, and Maximum cost per run in the run options. It stops cleanly at whichever comes first, before downloading any more documents.

How to scrape SEC EDGAR filings

  1. Open the actor and put your name or company and email in Your contact for the SEC (the SEC requires it; see the FAQ).
  2. Choose What to fetch: the filings of the companies you list, or the latest filings of every company.
  3. List the Companies (tickers like AAPL, CIKs like 320193, or exact names like Apple Inc), and narrow with Form types (10-K, 8-K, 4, 13F-HR, D...), Filed on or after / before or Only the last N days.
  4. Turn on Include the document text if you want the filing itself, as Markdown or plain text.
  5. Click Start, then open the Output tab and export as JSON, CSV or Excel.

Example: Apple's and Microsoft's latest reports

The pre-filled input (with your contact added):

{"secContact": "<your name and email>", "companies": ["AAPL", "MSFT"], "formTypes": ["10-K", "10-Q", "8-K"]}

It returned 40 filings in 2 seconds (per company the 20 newest: 13 8-Ks and 5 10-Qs each, plus 10-Ks and an 8-K/A), for $0.08. One of them (real output from a local run on 2026-09-28):

{
"id": "0000320193-26-000018",
"accessionNumber": "0000320193-26-000018",
"cik": "0000320193",
"companyName": "Apple Inc.",
"tickers": ["AAPL"],
"formType": "8-K",
"filingDate": "2026-07-30",
"reportDate": "2026-07-30",
"acceptedAt": "2026-07-30T20:30:28.000Z",
"items": ["2.02", "9.01"],
"primaryDocument": "aapl-20260730.htm",
"primaryDocumentDescription": "8-K",
"filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/0000320193-26-000018-index.htm",
"documentUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/aapl-20260730.htm",
"fullSubmissionUrl": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000018/0000320193-26-000018.txt",
"fileNumber": "001-36743",
"filmNumber": "261223821",
"sizeBytes": 417360,
"isXbrl": true,
"isInlineXbrl": true,
"sic": "3571",
"sicDescription": "Electronic Computers",
"stateOfIncorporation": "CA",
"filerCount": null,
"query": "AAPL",
"scrapedAt": "2026-09-29T01:46:40.352566Z"
}

Input

FieldWhat it does
Your contact for the SEC (secContact)Required, except for a demo-sized run. Your name or company and email, e.g. Jane Doe jane@yourfirm.com. Sent to the SEC in the User-Agent header only.
What to fetch (mode)companyFilings (default): the companies you list. latestFilings: every company's filings of the chosen form types, from the SEC's daily indexes (last 5 days by default, up to 31).
Companies (companies)Tickers, CIKs or exact listed company names, one per line. For companies without a ticker (private funds, Form D issuers) use the CIK.
Form types (formTypes)e.g. 10-K, 10-Q, 8-K, 4, 13F-HR, D, S-1, DEF 14A. 13F, 13D and 13G cover their variants. Empty = all.
Include amendments (includeAmendments)Default on: 10-K also returns 10-K/A.
Filed on or after / before (dateFrom, dateTo)Filing date range, YYYY-MM-DD.
Only the last N days (lastDays)A range that moves with each run, for schedules.
Max filings per company (maxFilingsPerCompany)Default 20, newest first.
Only new filings since the last run (onlyNew)Skip (and don't charge) filings this search returned before.
Include the document text (includeDocumentText), format, max lengthThe main document as Markdown (default) or plain text, cut at 200,000 characters by default (up to 2,000,000).
Max results per run (maxResults)Caps the total number of filings.

Output

Every filing has the same fields. Fields EDGAR doesn't give for a filing are null.

{"id": "0002100882-26-000002", "formType": "D", "companyName": "16S Irrigation Investors LLC", "tickers": [],
"filingDate": "2026-09-25", "items": ["06b"], "primaryDocument": "xslFormDX01/primary_doc.xml",
"documentUrl": "https://www.sec.gov/Archives/edgar/data/2100882/000210088226000002/xslFormDX01/primary_doc.xml",
"stateOfIncorporation": "DE", "filerCount": 1, "query": "latest D", "...": "..."}

(A new Form D from a latestFilings run, real output from a local run on 2026-09-28, shortened.)

  • id is the accession number, stable across runs: use it to deduplicate.
  • filerCount (latest filings only) is how many filers the SEC lists for the filing. A Form 4 or a Schedule 13D/G lists the company and each insider or fund; it's returned once, under the company that has a ticker.
  • With Include the document text: documentText, documentTextTruncated (cut at your maximum length or at the 30 MB download limit) and documentTextError (why there's no text, e.g. the document is a PDF).
  • The run's RUN_STATS record lists every company line with its CIK, how many filings matched, how many were returned before, and any error, plus the number of SEC requests made.

Run it on a schedule, or from your own code

  1. Save your input as a task and add it to a schedule (Console → Schedules); see Monitor new SEC filings.
  2. Collect results: download the dataset, call GET https://api.apify.com/v2/actor-tasks/<task id>/runs/last/dataset/items?status=SUCCEEDED&format=csv with your API token, add a webhook, or connect Make, Zapier or n8n.

Can I use SEC EDGAR Filings Scraper from an AI agent (MCP)?

Yes: through Apify's MCP server, an agent can call it with secContact (the user's own contact; an agent must not make one up), companies and formTypes, and read the filings, with includeDocumentText to get a filing as Markdown to read or quote.

Who it's for

Investors and analysts who follow a list of companies' 10-Ks, 10-Qs and 8-Ks; people who track insider trades (Form 4) or fund holdings (13F); dealmakers and lead-generation teams who want every new private fundraise (Form D) each day; and anyone feeding filings into a spreadsheet, a database or an LLM.

Why this one?

  • Only new filings, per search, for schedules: a quiet run returns nothing and costs only the start fee.
  • Every company's latest filings by form type from the SEC's daily indexes, each filled in from the company's record (primary document, report date, 8-K items, industry), and one record per filing even when a Form 4 lists eight filers.
  • Document text as Markdown with tables, without the hidden inline-XBRL data that fills the top of modern filings, ready for an LLM.
  • Plays by the SEC's rules: your own declared contact, at most one request every 0.4 s per SEC server (about half of the SEC's 10 requests/second at most), a pause and retry when the SEC says slow down, and no proxies to dodge its limits.
  • Reliable. One failing company never affects the others. The log and RUN_STATS say which line had a problem and why.

Limits

  • No full-text search of filing contents: the SEC's full-text search isn't documented for programs, so this actor doesn't use it. Filter by company, form type and date instead, and search the document text yourself.
  • Names and tickers are looked up among companies with a ticker (the SEC's list of about 10,000). For a private company, fund or insider, use the CIK (EDGAR's company search shows it).
  • Latest filings come from the SEC's daily indexes, which appear after each business day: a filing made today shows up in tomorrow's run. For minutes-fresh filings of specific companies, use the company list.
  • Document text is converted from HTML, text and XML documents; PDFs and images are not (they're reported in documentTextError), and insider Forms 3, 4 and 5 get none (see the FAQ). Exhibits aren't read; filingIndexUrl lists them.
  • The SEC counts 10 requests per second per user and IP address, and Apify's addresses are shared. If the SEC says slow down, the run pauses for 1 minute, then 10 minutes, then stops and returns what it has.

FAQ

Why do I have to give my contact? Is it stored?

The SEC's Fair Access policy asks every automated tool to declare who is behind it, with a contact, in the User-Agent header, and blocks "unclassified" bots. So each request carries your contact after this actor's name, as the SEC's own sample shows (Sample Company Name AdminContact@<sample company domain>.com). This actor uses it for nothing else: it isn't logged, written to your dataset, RUN_STATS or the only-new memory, or shown in any error. The field is marked secret, so Apify stores it encrypted in the run input. Placeholder addresses (example.com, noreply@...) are refused, because the SEC asks for a real contact. The one exception is a demo-sized run (up to 2 companies, 20 filings each, no document text, no only-new), which may go without a contact and then runs under the actor developer's contact.

EDGAR is the SEC's public database, and the SEC publishes these APIs and indexes for automated use (https://www.sec.gov/about/developer-resources). Its website policy says "Information presented on sec.gov is considered public information and may be copied or further distributed by users of the web site without the SEC's permission." No login is used. Filings name the people the law requires them to (officers, directors, insiders): the actor returns what the SEC publishes and the company it's filed under.

Why did a company return nothing, or fewer filings than expected?

Check the log and RUN_STATS: a name or ticker that isn't in the SEC's list of listed companies is reported as not found (use the CIK), and a line with no filings matching your form types and dates returns none. Max filings per company (default 20) keeps the newest ones only.

Can I get only new filings since my last run?

Yes: turn on Only new filings since the last run. See Monitor new SEC filings above.

How is this different from EDGAR itself or the SEC's APIs?

It's the same data (live, not a copy), turned into one clean table: company lookup by ticker or name, form and date filters, 8-K items as a list, working links, optional document text, and a memory of what you've already seen. The SEC's APIs are free if you'd rather write that yourself.

Does it get insider trades (Form 4) and 13F holdings?

It finds and links every Form 3/4/5 and 13F filing (company, dates, links). Document text is not returned for Forms 3, 4 and 5: those forms carry insiders' personal details such as home addresses, so documentTextError says so and filingIndexUrl links the filing on the SEC's site. 13F and other forms get their text. It doesn't split filings into one row per transaction or holding.

How fresh is the data?

Company filings come from the SEC's submissions API, which the SEC updates as filings are accepted. Latest filings across all companies come from the daily indexes, published after each business day.

ActorUse it when
Company Registers SearchYou need French company register and LEI records rather than US filings.
Document to TextYou need the text of a PDF exhibit or another document by URL.

Feedback and support

Found a bug, or need a field or form that isn't here? Open an issue on the Issues tab with the input you used (leave your contact out).

Versions

Current version: 1.0. See the Changelog tab for what changed in each version.