Sign up

Products

Status

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_text_not_found when no usable spoken words are present, with a coverage note.
  • 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 explicit ticker_not_resolved error rather than a wrong company.
  • These tables are large and archival. Treat them as a deep, authoritative record, not a real-time wire.

Access

Note:

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

MethodPathMCP toolDescription
GET/api/v3/transcripts/{ticker}transcripts_listList 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_id, keydev_id, date, title, event_type, version, version_status.
GET/api/v3/transcripts/{ticker}/{event_id}transcript_textFull 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_id, transcript, components, n_turns, turns[], source}; each turn has order, section, component_type, speaker, speaker_role, text. Capped at ~2 MB (truncated: true when hit).
GET/api/v3/transcripts/searchtranscripts_searchFull-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

MethodPathMCP toolDescription
GET/api/v3/events/{ticker}corporate_eventsKey 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_id, type_id, type, type_slug, date, announced, headline, situation, types[], roles[], vendor_status, closed_at.
GET/api/v3/events/typescorporate_event_typesThe 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/v3/intel/calendar/conference_callsintel_calendar_conference_callsWhen 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

MethodPathMCP toolDescription
GET/api/v3/origin/ipo_pipelineorigin_ipo_pipelineWhat is going public. Query: status (priced|upcoming|filed, default upcoming), limit (1–200, default 50). Returns {available, status, n_deals, deals[], data_source, note}; each deal has symbol, company, ipo_date, filed_date, expected_price_date, share_price, offer_amount_usd, share_count, exchange, 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).

Shell
# 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_text_not_found, with metadata when available and "warning": "no_text_for_transcript". 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).

Python
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_required_for_text_search: 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/v3/transcripts/{ticker}/{event_id} 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:

  • types lists every type it is filed under, and roles every role the company plays.
  • The top-level type_id is one of the types you filtered for, when you pass type.
  • limit and n count events.
  • since and until apply 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_not_resolved", and a valid ticker with no matching events returns "warning": "no_events_for_filters", both inside a normal 200 envelope.

Example 4: Deals that priced recently (bash)

Pull the deals that have priced, freshest first (3 credits).

Shell
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.