16,697 Calls · 8,087 Companies · 800K+ Segments

Earnings Call Transcripts.
One API Call Away.

The largest earnings call transcript database, accessible through a fast REST API. Full transcripts. Speaker segments. Sector data. Simple HTTP requests.

Quick Start
curl -s -H "X-API-Key: ect_your_key" \
  "https://earningscalls.dev/api/v1/earnings?sector=Technology&limit=5" | jq
16,697
Earnings Calls
8,087
Companies
800K+
Speaker Segments
<50ms
Avg Response

Everything You Need.
Nothing You Don't.

Clean endpoints. Fast responses. Zero bloat.

Earnings Calendar

Filter by date, sector, industry, exchange. Paginated with full metadata.

Company Lookup

Search by name or ticker. Complete earnings history per company.

Full Transcripts

Prepared remarks, Q&A, everything. Structured with headers and components.

Speaker Segments

800K+ segments by speaker name and role — CEO, CFO, Analyst, Operator.

Full-Text Search

Find "guidance raised" or "inventory writedown" across all transcripts.

Sector & Industry

11 GICS sectors, 100+ industries. Filter, aggregate, compare.

Sub-50ms Responses

PostgreSQL + connection pooling. No cold starts, no rate limit games.

Interactive Docs

Try every endpoint live. OpenAPI 3.0 spec. Python, JS, cURL examples.

Built for People Who Build

From solo hackers to enterprise teams — one API, endless possibilities.

Traders & Coders

Your edge, automated.

Pipe earnings data straight into Claude, GPT, or your own models. Pull transcripts into trading bots. Search "guidance raised" across 16K calls. Ship before the market moves.

  • 3 lines of Python to any transcript
  • Feed directly into LLMs
  • Full-text search across all calls
  • Free tier — no credit card
earnings_bot.py
import requests, anthropic

# Grab latest NVDA transcript
t = requests.get(
  "https://earningscalls.dev/api/v1/search",
  headers={"X-API-Key": KEY},
  params={"q": "NVIDIA guidance"}
).json()

# Ask Claude what it means
client = anthropic.Anthropic()
resp = client.messages.create(
  model="claude-sonnet-4-20250514",
  messages=[{
    "role": "user",
    "content": f"""Analyze this earnings 
call excerpt for trading signals:
{t['data'][0]['text_content'][:2000]}"""
  }]
)
Startups

Ship your fintech feature this week.

16,000+ calls, structured and searchable. Integrate our API, focus on your product, launch while competitors are still parsing SEC filings.

  • REST API — any stack, any language
  • Speaker roles tagged (CEO, CFO, Analyst)
  • Sector & industry filtering
  • $49/mo — cheaper than an engineer-hour
dashboard.ts
// Your product's earnings feed
const earnings = await fetch(
  `${API}/earnings?sector=Technology`,
  { headers: { "X-API-Key": key } }
).then(r => r.json());

// Render in your dashboard
earnings.data.map(call => ({
  company: call.company_name,
  ticker: call.ticker,
  date: call.event_date_time,
  speakers: call.speaker_count,
  sentiment: analyzeSentiment(call)
}));

// Full transcript for deep dives
const transcript = await fetch(
  `${API}/transcripts/${call.id}`,
  { headers }
).then(r => r.json());
Enterprise

Institutional-grade, API-first.

50K requests/day, 99.9% SLA, webhooks on new calls. Power your research platform or client-facing analytics with data that's always fresh and structured.

  • 50K req/day with burst capacity
  • Webhooks on new transcripts
  • 99.9% SLA + dedicated support
  • Bulk export for data warehousing
pipeline.py
# Enterprise: bulk ingest + warehouse
import earningsapi, snowflake

client = earningsapi.Client(api_key=KEY)

# Stream all Tech earnings from Q4
for call in client.earnings(
    sector="Information Technology",
    date_from="2025-10-01",
    date_to="2025-12-31"
):
    # Get speaker-level breakdown
    segments = client.speakers(call.id)
    
    # Load into Snowflake
    snowflake.insert("earnings_raw", {
        "call_id": call.id,
        "transcript": call.full_text,
        "ceo_remarks": segments.by_role("CEO"),
        "analyst_qa": segments.by_type("Analyst")
    })

Three Lines to Your First Call

No SDK required. Standard HTTP. Works everywhere.

earnings.py
import requests

API_KEY = "ect_your_api_key_here"
BASE = "https://earningscalls.dev/api/v1"
headers = {"X-API-Key": API_KEY}

# Latest tech earnings
calls = requests.get(f"{BASE}/earnings", headers=headers,
    params={"sector": "Information Technology", "limit": 10}
).json()

for c in calls["data"]:
    print(f"{c['company_name']} — {c['event_date_time']}")

# Full transcript
transcript = requests.get(
    f"{BASE}/transcripts/{calls['data'][0]['id']}", headers=headers
).json()

# Search across everything
hits = requests.get(f"{BASE}/search", headers=headers,
    params={"q": "artificial intelligence"}
).json()

print(f"AI mentioned in {hits['pagination']['total']} segments")
earnings.js
const API_KEY = 'ect_your_api_key_here';
const BASE = 'https://earningscalls.dev/api/v1';
const headers = { 'X-API-Key': API_KEY };

// Latest tech earnings
const { data, pagination } = await fetch(
  `${BASE}/earnings?sector=Information+Technology&limit=10`,
  { headers }
).then(r => r.json());

console.log(`${pagination.total} calls found`);

// Speaker segments — who said what
const speakers = await fetch(
  `${BASE}/speakers/${data[0].id}`, { headers }
).then(r => r.json());

speakers.data.segments.forEach(s =>
  console.log(`[${s.speaker_type}] ${s.speaker_name}: ${s.text_content.slice(0, 80)}…`)
);

// Search: find revenue guidance mentions
const hits = await fetch(
  `${BASE}/search?q=revenue+guidance`, { headers }
).then(r => r.json());
Terminal
# Latest earnings
curl -s -H "X-API-Key: $KEY" \
  "https://earningscalls.dev/api/v1/earnings?limit=5" | jq

# Full transcript for call #42
curl -s -H "X-API-Key: $KEY" \
  "https://earningscalls.dev/api/v1/transcripts/42" | jq .data.full_transcript_text

# Search: who's talking about AI?
curl -s -H "X-API-Key: $KEY" \
  "https://earningscalls.dev/api/v1/search?q=AI&type=speakers" | jq

# All sectors at a glance
curl -s -H "X-API-Key: $KEY" \
  "https://earningscalls.dev/api/v1/sectors" | jq

# Database stats
curl -s -H "X-API-Key: $KEY" \
  "https://earningscalls.dev/api/v1/stats" | jq

Honest Pricing. No Surprises.

Start free. Scale when you're ready. Cancel anytime.

Free
$ 0 /month

Explore and prototype

  • ✓ 100 requests/day
  • ✓ Earnings calendar & metadata
  • ✓ Company search & lookup
  • ✓ Sectors, industries, exchanges
  • ✓ Database statistics
  • ✗ Full transcript text
  • ✗ Speaker segments
  • ✗ Full-text search
Start Free on RapidAPI
Enterprise
$ 499 /month

For production apps and teams

  • ✓ 50,000 requests/day
  • ✓ Everything in Pro
  • ✓ Webhooks for new calls
  • ✓ Priority support
  • ✓ 99.9% SLA
  • ✓ Dedicated account manager
  • ✓ Custom integrations
  • ✓ Bulk data export
Contact Sales

The data is here.
What will you build?

Subscribe on RapidAPI in 30 seconds. No credit card for the free tier.

Get it on RapidAPI →