Products
Transcripts & Corporate Events
Transcripts & Corporate Events provides earnings-call listings, available speaker-turn text, and corporate-event history from the warehouse archive, plus the pipeline of companies going public. Transcript text coverage is 2020–2025. Corporate-event metadata extends to 1990; that earlier date does not describe transcript text coverage.
What's inside
- Earnings-call transcripts: 1.75M transcript versions from a licensed institutional archive, one clean row per call. Duplicate versions of the same call are collapsed to the best available copy (Proofed > Edited > Spellchecked), so you always get the most authoritative text.
- Full transcript text with speakers: ~24M speaker-turn components rendered as an ordered script: each turn carries the speaker's name, their role (executive / analyst / operator) and the component type (prepared remarks / question / answer). Slice to just the prepared remarks or just the analyst Q&A.
- Full-text search: search call headlines across every company, or search the spoken words inside one company's transcripts and get back per-call hit counts and a first-hit snippet.
- Key Developments events: 41.9M dated corporate events, 1990–2026: M&A announcements/closings, corporate guidance (raised/lowered/new), executive & board changes, buybacks, bankruptcy, index adds/drops, offerings, investor activism, litigation and more. Each event carries a headline and a situation summary.
- Event-type taxonomy: the full 105-type legend (id, human label, and the filter slug) so you can filter
/events/{ticker}precisely. - IPO pipeline. Deals that are priced, upcoming or newly filed, with offer size, share count, exchange and dates. Use it for new-issue supply and going-public timing.
Coverage caveats (stated honestly):
- Full transcript text covers 2020-01-01 → 2025-12-31. Listings can include metadata outside that window. The text endpoint returns
404 transcript_when no usable spoken words are present, with a coverage note.text_ not_ found - Key Developments events cover 1990–2026.
- The IPO pipeline serves only deals refreshed in the last 30 days for the requested status. It is a second, independent view of going-public activity: corroborate it against S-1 filings on Public Filings rather than treating either source as complete.
- Ticker resolution is scoped to the US security master. Tickers map exchange symbol →
gvkey→companyid; a symbol outside the security master returns an explicitticker_not_resolvederror rather than a wrong company. - These tables are large and archival. Treat them as a deep, authoritative record, not a real-time wire.
Access
3 credits/call. Pro plan ($499/mo) or higher. Every endpoint requires a valid API key. Reads use bounded warehouse queries. Listings may return metadata with warnings. The text endpoint distinguishes confirmed absence (404) from source or budget failure (503); neither is billable data delivery. See pricing and credits for pending refund settlement.
Endpoints
Earnings-call transcripts
| Method | Path | MCP tool | Description |
|---|---|---|---|
GET | /api/v3/transcripts/{ticker} | transcripts_list | List a company's calls (newest first), one row per call. Query: since (YYYY-MM-DD, calls on/after), limit (1–100, default 25). Returns {ticker, company, companyid, gvkey, n, transcripts[], note, source}; each item has event_. |
GET | /api/ | transcript_text | Full transcript text as ordered speaker turns. event_id is the id from the list/search route. Query: components (all|presentation|qa, default all), max_turns (1–1500, default 800). Returns {ticker, event_; each turn has order, section, component_. Capped at ~2 MB (truncated: true when hit). |
GET | /api/v3/transcripts/search | transcripts_search | Full-text search across transcripts. Query: q (the search term, 3 to 80 characters; a missing q or one outside that length is rejected with 422), ticker (optional, restrict to one company), since (YYYY-MM-DD), scope (headlines|text, default headlines), limit (1–50, default 20). scope=headlines searches call titles across all companies; scope=text searches the spoken words and requires ticker. Returns {query, scope, ticker, n, results[], source}. |
Corporate events
| Method | Path | MCP tool | Description |
|---|---|---|---|
GET | /api/v3/events/{ticker} | corporate_events | Key Developments corporate-event history (newest first). Query: type (comma-separated slugs or numeric ids from /events/types), since, until (YYYY-MM-DD window), limit (1–500, default 100, counts events), include_closed (default false). Returns {ticker, company, gvkey, n, events[], filters, source}. Each key development appears once, with keydev_. |
GET | /api/v3/events/types | corporate_event_types | The event-type taxonomy (105 types). Returns {n, types[], source} where each type is {id, label, slug}. Use the slug (or id) in the type filter of /events/{ticker}. |
GET | /api/ | intel_ | When a company's next earnings calls are, from this archive, which dates scheduled calls ahead: one row per call with date, the fiscal period and period_year the call's title names, headline and keydev_id, soonest first. tickers is required (at most 5). Default window today to 90 days ahead; up to 366 days with both date_from and date_to. Start time, dial-in and webcast details are not carried (fields_not_carried), and importance is refused. Full reference in Macro, Rates & FX. |
IPO pipeline
| Method | Path | MCP tool | Description |
|---|---|---|---|
GET | /api/v3/origin/ipo_ | origin_ipo_pipeline | What is going public. Query: status (priced|upcoming|filed, default upcoming), limit (1–200, default 50). Returns {available, status, n_; each deal has symbol, company, ipo_, freshest first. An upcoming deal has no ipo_date or filed_date yet: read its expected_price_date, and share_price as the filed price range (for example "40.00-44.00"); on a priced deal share_price is the price. With no deals in that state in the last 30 days: available: false with a reason. |
Examples
Example 1: List a company's calls, then pull one transcript (bash + curl)
Find Apple's most recent calls, then fetch the full Q&A section of one of them (3 credits per call).
# 1. List the 5 most recent calls (3 credits)curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/v3/transcripts/AAPL?limit=5" # Response envelope:# {# "ok": true,# "timestamp": "2026-07-19T14:22:00Z",# "ticker": "AAPL",# "company": "APPLE INC",# "companyid": 24937,# "gvkey": "001690",# "n": 5,# "transcripts": [# {# "event_id": 2864051,# "keydev_id": 998123456,# "date": "2025-10-30",# "title": "Apple Inc., Q4 2025 Earnings Call, Oct 30, 2025",# "event_type": "Earnings Calls",# "version": "Proofed Copy",# "version_status": "Final"# }# // ... 4 more# ],# "note": "full text coverage is 2020-01-01 → 2025-12-31; calls outside that window have metadata only.",# "source": "warehouse:transcript-meta-archive"# } # 2. Pull just the analyst Q&A of that call using its event_id (3 credits)curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/v3/transcripts/AAPL/2864051?components=qa&max_turns=400" # Response envelope:# {# "ok": true,# "timestamp": "2026-07-19T14:22:05Z",# "ticker": "AAPL",# "event_id": 2864051,# "transcript": {# "event_id": 2864051,# "keydev_id": 998123456,# "date": "2025-10-30",# "title": "Apple Inc., Q4 2025 Earnings Call, Oct 30, 2025",# "event_type": "Earnings Calls",# "version": "Proofed Copy",# "version_status": "Final"# },# "components": "qa",# "n_turns": 128,# "turns": [# {# "order": 42,# "section": "qa",# "component_type": "question",# "speaker": "Erik Woodring",# "speaker_role": "analyst",# "text": "Thanks for taking my question. Tim, on Services gross margin..."# },# {# "order": 43,# "section": "qa",# "component_type": "answer",# "speaker": "Timothy Cook",# "speaker_role": "executive",# "text": "Yeah, thanks Erik. On Services, we feel great about the momentum..."# }# // ... more turns# ]# }When usable text is absent, the text route returns 404 transcript_, with metadata when available and "warning": "no_. Source or request-budget failures return 503 instead of claiming that the archive is empty. If the response hits the ~2 MB cap it sets "truncated": true; re-fetch the sections separately with components=presentation and components=qa.
Example 2: Full-text search across transcripts (Python)
Search call headlines across every company, then search the spoken words inside one company's transcripts (3 credits per call).
import os, requests HEADERS = {"Authorization": f"Bearer {os.environ['WEALTHNOW_API_KEY']}"}BASE = "https://firm.wealthnow.io" # 1. Headline search across ALL companies (default scope)r = requests.get( f"{BASE}/api/v3/transcripts/search", params={"q": "artificial intelligence", "limit": 10}, headers=HEADERS, timeout=30,)r.raise_for_status()data = r.json()print(f"{data['n']} calls with '{data['query']}' in the title")for hit in data["results"]: print(f" {hit['date']} {hit['title']} (event_id={hit['event_id']})") # 2. Full-text search inside ONE company's transcripts (scope=text REQUIRES ticker)r = requests.get( f"{BASE}/api/v3/transcripts/search", params={"q": "supply chain", "ticker": "TSLA", "scope": "text", "since": "2024-01-01", "limit": 10}, headers=HEADERS, timeout=30,)r.raise_for_status()data = r.json()# Envelope:# {# "ok": true,# "timestamp": "2026-07-19T14:23:00Z",# "query": "supply chain",# "scope": "text",# "ticker": "TSLA",# "n": 6,# "results": [# {# "event_id": 3120774,# "hits": 9,# "snippet": "...our supply chain has never been more resilient, and we expect..."# }# // ... more calls, most hits first# ],# "searched_recent_calls": 42,# "note": "full text coverage is 2020-01-01 → 2025-12-31; calls outside that window have metadata only."# }for hit in data["results"]: print(f" event_id={hit['event_id']} {hit['hits']} hits, {hit['snippet']}")Note: scope=text without a ticker returns 422 ticker_: text search scans transcript bodies and must be scoped to a single company to stay inside the request budget. Pass any returned event_id to /api/ for the full text.
Example 3: Corporate events + the type taxonomy (bash + Python)
Look up the event-type legend, then pull Microsoft's M&A and guidance events since 2023 (3 credits per call).
# 1. Fetch the taxonomy so you know the filter slugs/ids (3 credits)curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/v3/events/types" # Response envelope (105 types):# {# "ok": true,# "timestamp": "2026-07-19T14:24:00Z",# "n": 105,# "types": [# { "id": 1, "label": "Seeking to Sell/Divest", "slug": "seeking_to_sell_divest" },# { "id": 27, "label": "Corporate Guidance - Raised", "slug": "corporate_guidance_raised" },# { "id": 48, "label": "Earnings Calls", "slug": "earnings_calls" },# { "id": 80, "label": "M&A Transaction Announcements", "slug": "m_and_a_transaction_announcements" },# { "id": 101,"label": "Executive Changes - CEO", "slug": "executive_changes_ceo" }# // ... 100 more# ],# "source": "warehouse:key-developments-archive"# }One event per key development
The vendor keeps a key development's history: a row for each version, each event type it is filed under, and each role the company plays in it (for example target or buyer). /events returns the development once, from the vendor's current version:
typeslists every type it is filed under, androlesevery role the company plays.- The top-level
type_idis one of the types you filtered for, when you passtype. limitandncount events.sinceanduntilapply to the current version's announce date.
The vendor sometimes closes a development (it has no current version). It is left out unless you pass include_closed=true, which returns it with vendor_status: "closed" and closed_at, the vendor's timestamp (no zone is stated). Every other event has vendor_status: "open".
An unknown type slug/id returns 422 unknown_event_type with a hint to call /api/v3/events/types. A ticker outside the security master returns "error": "ticker_, and a valid ticker with no matching events returns "warning": "no_, both inside a normal 200 envelope.
Example 4: Deals that priced recently (bash)
Pull the deals that have priced, freshest first (3 credits).
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/v3/origin/ipo_pipeline?status=priced&limit=20" # Response envelope:# {# "ok": true,# "timestamp": "2026-09-24T14:40:00Z",# "available": true,# "status": "priced",# "n_deals": 20,# "deals": [# {# "symbol": "...",# "company": "...",# "ipo_date": "2026-09-23",# "filed_date": "2026-08-14",# "offer_amount_usd": 412500000.0,# "share_count": 16500000.0,# "exchange": "NASDAQ Global Select"# }# // ... 19 more# ],# "data_source": "...",# "note": "a second, independent view of going-public activity; corroborate against the filing index rather than treating either source as complete on its own"# }status=upcoming (the default) returns deals that have not priced yet and status=filed newly filed ones. symbol, ipo_date, filed_date and exchange are null when the calendar does not carry them for a deal.