The largest earnings call transcript database, accessible through a fast REST API. Full transcripts. Speaker segments. Sector data. Simple HTTP requests.
curl -s -H "X-API-Key: ect_your_key" \
"https://earningscalls.dev/api/v1/earnings?sector=Technology&limit=5" | jq
Clean endpoints. Fast responses. Zero bloat.
Filter by date, sector, industry, exchange. Paginated with full metadata.
Search by name or ticker. Complete earnings history per company.
Prepared remarks, Q&A, everything. Structured with headers and components.
800K+ segments by speaker name and role — CEO, CFO, Analyst, Operator.
Find "guidance raised" or "inventory writedown" across all transcripts.
11 GICS sectors, 100+ industries. Filter, aggregate, compare.
PostgreSQL + connection pooling. No cold starts, no rate limit games.
Try every endpoint live. OpenAPI 3.0 spec. Python, JS, cURL examples.
From solo hackers to enterprise teams — one API, endless possibilities.
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.
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]}"""
}]
)
16,000+ calls, structured and searchable. Integrate our API, focus on your product, launch while competitors are still parsing SEC filings.
// 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());
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.
# 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")
})
No SDK required. Standard HTTP. Works everywhere.
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")
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());
# 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
Start free. Scale when you're ready. Cancel anytime.
Explore and prototype
For builders who need the full dataset
For production apps and teams
Subscribe on RapidAPI in 30 seconds. No credit card for the free tier.
Get it on RapidAPI →