Skip to main content
ℹ️ Informational only. Transcript sources and audio APIs change over time. Always verify data independently. Nothing here is investment advice.
📞 TRANSCRIPTS & AUDIO · PART 1 OF 5

Earnings Call Transcript Monitor

How transcripts get published

Companies report earnings quarterly. The call happens, then transcripts appear:

  • Same day / next day: Seeking Alpha, Motley Fool (free, ad-supported)
  • 2–4 days: Some IR pages post official transcripts
  • Via 8-K: Companies sometimes file earnings call transcripts as 8-K exhibits (searchable in EDGAR)

The free Seeking Alpha and Motley Fool RSS feeds are the fastest free sources.

What to extract

  • Prepared remarks: revenue, guidance, key initiatives
  • Q&A section: analyst concerns, management hedging language
  • Specific phrases: "headwinds," "macro uncertainty," "raised guidance," "below expectations," "AI," "tariff," "pricing power"
  • Tone: confident vs hedging, specific vs vague

HEARTBEAT configuration

name: earnings_transcript_monitor
schedule: "0 */4 * * *"
steps:
  - fetch_rss:
      sources:
        - url: "https://seekingalpha.com/earnings/earnings-call-transcripts"
          type: seeking_alpha
        - url: "https://www.fool.com/earnings-call-transcripts/"
          type: motley_fool
      filter_tickers: "{{ watchlist_tickers }}"
  - check_seen:
      dedup_key: transcript_url
      store: seen_transcripts.json
  - extract:
      sections:
        - prepared_remarks
        - qa_section
      phrases_to_flag:
        - "guidance"
        - "raised"
        - "lowered"
        - "headwinds"
        - "macro"
        - "tariff"
        - "pricing power"
  - llm:
      prompt: |
        Analyze this earnings call transcript and produce a structured brief:

        1. GUIDANCE: What guidance was given? Raised, lowered, or maintained?
        2. KEY THEMES: Top 3 topics management emphasized
        3. ANALYST CONCERNS: What did analysts probe hardest in Q&A?
        4. TONE: Rate management confidence 1-5. Note any hedging language.
        5. NOTABLE QUOTES: 2-3 verbatim quotes worth flagging

        Transcript: {{ transcript_text }}
  - notify:
      channel: email
      subject: "📞 Earnings Transcript: {{ company }} Q{{ quarter }} {{ year }}"

RSS parsing — Python snippet

import httpx
import feedparser
import json
import os
from datetime import datetime

SEEN_FILE = "seen_transcripts.json"

def load_seen() -> set:
    if os.path.exists(SEEN_FILE):
        with open(SEEN_FILE) as f:
            return set(json.load(f))
    return set()

def save_seen(seen: set):
    with open(SEEN_FILE, "w") as f:
        json.dump(list(seen), f)

def fetch_new_transcripts(rss_url: str, watchlist: list) -> list:
    seen = load_seen()
    feed = feedparser.parse(rss_url)
    new_transcripts = []
    for entry in feed.entries:
        if entry.link in seen:
            continue
        title_upper = entry.title.upper()
        for ticker in watchlist:
            if ticker.upper() in title_upper or "TRANSCRIPT" in title_upper:
                new_transcripts.append({
                    "ticker": ticker,
                    "title": entry.title,
                    "url": entry.link,
                    "published": entry.get("published", ""),
                })
                seen.add(entry.link)
                break
    save_seen(seen)
    return new_transcripts

Guidance extraction

def extract_guidance_language(text: str) -> dict:
    """Find guidance-related sentences in transcript text."""
    import re
    guidance_patterns = [
        r"(?:we (?:raise|lower|maintain|reiterate|withdraw)|guidance).{0,200}",
        r"(?:full[- ]year|fiscal \d{4}|Q[1-4]).{0,100}(?:expect|guide|anticipate).{0,100}",
        r"(?:EPS|revenue|margin).{0,50}(?:between|of|approximately).{0,100}",
    ]
    results = []
    for pattern in guidance_patterns:
        matches = re.findall(pattern, text, re.IGNORECASE)
        results.extend(matches[:3])
    return {"guidance_sentences": results[:10]}

Frequently asked questions

Q: How do I get the full transcript text, not just a summary?
A: Fetch the HTML of the transcript page and extract the article body. Most transcript pages have a clear article element. Use BeautifulSoup with a 3-second delay and check robots.txt first.
Q: Can I monitor transcripts for multiple companies at once?
A: Yes — build a watchlist of tickers and filter RSS entries by ticker symbol appearing in the title.
Q: How do I handle companies that don't get covered by Seeking Alpha or Motley Fool?
A: Check their IR page directly and monitor the 8-K RSS feed for transcript exhibits filed under Item 7.01.