Parsed SEC 8-K filings and speaker-tagged earnings call transcripts as structured JSON, callable over REST or MCP.
Press enter or click to view image in full size
Every 8-K a US public company files lands on SEC EDGAR within minutes, and every earnings call gets transcribed somewhere. Turning either into analyzable data is the grind: EDGAR hands you raw HTML, and transcripts live scattered across sites that hate being parsed. I have written the DIY version, and it works right up until a filing arrives with its exhibits arranged some new way and the parser quietly mislabels the event. This post covers the shortcut.
What the Earnings Call Transcript API does
The Earnings Call Transcript API is a scraper that returns two record types as structured JSON: parsed 8-K filings from EDGAR, and speaker-tagged earnings call transcripts. Give it tickers and a dataType (filings, transcripts, or both), or run a full-text keyword search across every US filer.
For filings you get item codes and item names, the extracted press release, isolated guidance sentences, a sentiment score, and the source EDGAR url. For transcripts you get participants with roles, prepared remarks, and analyst question-and-answer pairs matched to the executives who answered. Every record links back to its filing, so a claim is always checkable.
Who it is for
Data engineers building event feeds off item codes instead of regex. Fintech and AI builders who want a clean Q&A corpus for LLM and RAG work. Analysts who screen disclosures across every filer with a keyword instead of a browser.
Run it from the Apify Console
Open the Actor, click Try for free, enter tickers, pick a dataType, and run. Export the records as JSON, CSV, or Excel.
Call it as a REST API
Every run is callable over HTTP, so a scheduled job pulls fresh records without a browser:
POST /v2/acts/johnvc~earnings-call-transcript-api/runs
{ "tickers": ["AAPL"], "dataType": "both", "filingsLimit": 5 }Full parameters are in the Apify API docs. Output comes back as one record per filing or transcript.
Parse filings and transcripts in Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("johnvc/earnings-call-transcript-api").call(run_input={"tickers": ["AAPL"], "dataType": "both", "transcriptsLimit": 1})
for rec in client.dataset(run["defaultDatasetId"]).iterate_items():
print(rec["recordType"], rec["ticker"], rec.get("title"))Query filings from Claude with MCP
Through the Model Context Protocol, Claude, Claude Code, and Cursor can call the Actor as a tool mid-conversation. Ask “summarize Apple’s latest 8-K and pull its guidance language” and the answer runs against the real filing instead of the model’s memory. You can read more about Claude at claude.ai.
Grab a ticker’s earnings call transcript
There is a ready-made task per major ticker, each returning the speaker-tagged call in JSON: AAPL, NVDA, and TSLA, with more on the examples tab.
Pull parsed 8-Ks by ticker
The filings surface on its own: SEC EDGAR 8-K filings by ticker returns recent filings per company, and 8-K item codes, guidance, and sentiment shows the parsed structure in full.
Screen EDGAR for red-flag language
Full-text keyword search across all US filers powers the screener tasks: material weakness disclosures, going concern warnings, and guidance withdrawals.
Monitor material events as a feed
With onlyNew set, scheduled runs return only fresh records, which turns item-code filters into event trackers: material events watchlist, cybersecurity incidents under Item 1.05, and executive departures under Item 5.02.
Build an LLM dataset from Q&A pairs
Because qaPairs ships pre-matched, the task Earnings call Q&A dataset for LLM and RAG produces a training-ready corpus, and Earnings guidance monitor does the same for forward-looking statements.
FAQ About Scraping SEC Filings and Earnings Calls
EDGAR is free, so why pay for a scraper at all?
Because EDGAR returns documents and this scraper returns data. You pay for the parsing: item codes tagged, press releases extracted, guidance sentences isolated, Q&A matched to speakers, plus transcripts that EDGAR never had.
How do I call the scraper as an API and what does it cost?
POST to the Actor’s runs endpoint with your tickers and dataType, then read the dataset as JSON, CSV, or Excel. Billing is one event per record with no start fee, so a hundred records cost about a cent and a quarterly refresh of a 50-ticker watchlist runs about the same.
Can Claude run this scraper through MCP?
Yes. Connect the Apify MCP server and the Actor becomes a callable tool, which makes filings and transcripts available to an agent as grounded context instead of recall, no code required.
Should I build my own SEC scraper instead?
You can, and the documents are free to fetch. The work is the parsing and the upkeep: tagging item codes, isolating guidance, matching Q&A, and keeping all of it alive across thousands of filers whose layouts drift. This Actor is that maintenance, rented.
Can I schedule this scraper to watch for new 8-Ks?
That is what the onlyNew flag is for. Save a task with your tickers or item codes, attach an Apify schedule from the Console, and each run returns only records you have not seen. Start from the Earnings Call Transcript API.
What can’t this scraper do?
Transcripts cover roughly 1,000 to 1,500 mostly large and mid cap US companies per quarter, with an archive back to about 2007, so a thin micro cap may have filings but no call. There is no audio, and no 10-K or 10-Q statements or XBRL fundamentals; this is an events-and-calls feed. Sentiment is a dictionary score, not an LLM read.
Can an AI agent pay for this scraper in USDC with x402?
Yes. The Earnings Call Transcript API supports agentic payments via the x402 protocol, so AI agents and MCP clients can pay for runs in USDC on Base with no Apify account or API token. Point your agent at the Apify MCP server and it can discover, pay for, and run the scraper autonomously; the Apify x402 announcement has the details.
The filings were always public; the structure was the missing part. Point the Earnings Call Transcript API at your watchlist and get 8-Ks and calls back as records you can compute on.
Disclosure: links to my own tools are affiliate links.