In This Article
Introduction
During earnings season, the OpenClaw AI Earnings Tracker scans the financial calendar for specific tickers (NVDA, MSFT, etc.), searches for report drops, and posts a beat/miss summary with guidance highlights to a Telegram topic. Investors get real-time earnings intelligence without refreshing financial news sites.
Earnings move markets in minutes. Missing a beat or miss by an hour can mean missing a trade. The Earnings Tracker automates the watch, you get the key facts (EPS, revenue, guidance) in one message, the moment the report hits. No Bloomberg terminal required. No manual scraping. Just a Heartbeat task and a Telegram channel.
Quick Wins
- Watchlist in memory: Store tickers (NVDA, MSFT, AAPL) in a Markdown file. Add/remove without code changes.
- Two-tier saves money: Script checks calendar + news. LLM summarizes only when a new report is found. Most cycles = zero LLM calls.
- 15-30 min during earnings: Run Heartbeat every 15-30 min when earnings are expected. Back off to hourly or off when quiet.
- Cost: ~$5-15/earnings season for 5-10 tickers. Most of the cost is the few cycles when reports actually drop.
How It Works
Heartbeat task runs every 15-30 minutes during market hours when earnings are expected:
- Check financial calendar for tickers on watchlist
- If earnings expected today, poll news/API for report release
- When report detected: extract EPS (actual vs estimate), revenue, guidance
- Format summary: "NVDA: Beat on EPS ($0.52 vs $0.48 est). Revenue in line. Raised FY26 guidance."
- Post to Telegram topic or DM
Two-tier processing is critical. Tier 1: script fetches calendar + news. If no new report → no LLM call. Tier 2: when report detected, LLM extracts and formats. Result: you pay for tokens only when there's something to summarize. See two-tier processing.
Configuration
Watchlist in memory: NVDA, MSFT, AAPL, etc. Earnings calendar API (e.g., Finnhub, Alpha Vantage). News source for report detection. Telegram for delivery. Two-tier: script fetches data; LLM summarizes only when new report found.
APIs: Finnhub (free tier), Alpha Vantage, or Polygon.io. Most provide earnings calendar + basic fundamentals. For report detection, use news APIs (NewsAPI, Benzinga) or scrape earnings-specific sites. Store API keys in OpenClaw's encrypted credential store.
Watchlist: Keep in ~/clawd/WATCHLIST.md or similar. Format: ticker, company name, notes. The agent reads this at each cycle.
Output Format
Concise, actionable. Example: "MSFT Q2: EPS $2.45 (est $2.38) ✓. Rev $62B (est $61.5B) ✓. Azure +28%. Stock +3% AH." User gets the key facts in one message.
Include: EPS (actual vs est), revenue (actual vs est), key metric (e.g., Azure growth), guidance (raised/lowered/held), and after-hours stock move if available. One line per ticker. Just the good stuff.
Cost & Timing
Cost: ~$5-15 per earnings season for 5-10 tickers. Most Heartbeat cycles find nothing new → zero LLM calls. When a report drops, one summarization = ~500-1000 tokens. A typical season has 20-40 report events. At $3/M tokens, that's ~$0.50-2. Total cost dominated by the few cycles when reports actually hit.
Timing: Run every 15-30 min during earnings windows (typically 4-8 PM ET for many companies). Outside earnings season, reduce to daily or disable. No point polling when no reports are expected.
Pro Tips
- Pre-market vs after-market: Some companies report pre-market, some after. Adjust Heartbeat schedule. Pre-market: run at 6-7 AM. After-market: 4-8 PM.
- Deduplicate: Same report may hit multiple news sources. Track "last reported" per ticker. Don't summarize the same report twice.
- Guidance matters: Beat/miss on EPS is table stakes. Guidance (raised/lowered) often moves the stock more. Always include.
- Telegram topics: Use a dedicated "Earnings" topic in your channel. Keeps alerts separate from other notifications.
Wrapping Up
Earnings Tracker demonstrates OpenClaw's value for time-sensitive financial workflows. Real-time intelligence, minimal cost, zero manual effort. See OpenClaw finance, Heartbeat, and Telegram setup for configuration.