Data API
Your Earnings Whispers data in a spreadsheet, a script, or an AI assistant. One key, three ways to use it.
What you can access
Every endpoint covers your watch list, and that is what a request returns unless
you say otherwise. A Trader subscription can also reach the whole universe —
every company with analyst coverage, around 4,500 names — by adding
scope=universe. It is a choice per request, not a setting: ask for
scope=watchlist any time you only want your own stocks.
| Subscription | Watch list | All covered companies | Confirmed calendar | Last quarter & guidance | Requests a day |
|---|---|---|---|---|---|
| Member | Yesup to 10 | — | Watch list only | — | 100 |
| Investor | Yesup to 100 | — | Everyone | Yes | 1,000 |
| Trader | Yes | Yes~4,500 | Everyone | Yes | 5,000 |
Written previews follow the watch-list rule: your own list, or every upcoming preview with a Trader subscription. The confirmed calendar is wider on purpose — a schedule of who reports when isn’t analysis, so Investors get the whole population too.
Requests return up to 500 rows at a time; use offset to page through
the rest. The per-company limits above are a ceiling on how much one subscription
can pull, not a limit on how many stocks you can follow.
Your keys
A key identifies you and carries your subscription. Anyone holding it can read your data, so treat it like a password — and if one ever gets out, revoke it here.
Sign in to create a key.
Sign inQuick start
In a browser or with curl
curl -H "X-EW-Key: YOUR_KEY" \
"https://www.earningswhispers.com/api/v1/earnings?limit=10"
In Excel or Google Sheets
Excel: Data → Get Data → From Web, and paste this URL. It refreshes on whatever schedule you set.
https://www.earningswhispers.com/api/v1/earnings?format=json&key=YOUR_KEY
The key parameter exists for tools that can’t send headers. When you
can send one, prefer X-EW-Key — a key in a URL ends up in browser
history and server logs along the way.
In Python
import requests
r = requests.get(
"https://www.earningswhispers.com/api/v1/earnings",
headers={"X-EW-Key": "YOUR_KEY"},
params={"scope": "universe", "grade_min": 10, "confirmed": True, "limit": 50},
)
for row in r.json()["data"]:
print(row["Ticker"], row["EPSDate"], row["Whisper"], row["Grade"])
Endpoints
Base URL https://www.earningswhispers.com/api/v1. Everything returns JSON.
Authenticate with an X-EW-Key header or a key query parameter.
GET /me
What your key can do, and how many requests you have left today. The first thing to check when something is refused.
GET /earnings
Upcoming earnings, filtered. Narrow it — a date range or a handful of tickers uses one request where an unfiltered pull uses many.
| Parameter | Values | What it does |
|---|---|---|
scope | watchlist, universe | Your list, or every company with analyst coverage (Trader) |
detail | standard, expanded | Expanded adds last quarter’s results and guidance |
from, to | YYYY-MM-DD | Earnings date range |
tickers | NKE,MU,ORCL | Specific companies, up to 200 |
grade_min, grade_max | 0–12 | Earnings Whisper Grade, 0 is F and 12 is A+ |
confirmed | true | Only companies that have confirmed their date |
sector | number | One sector |
limit, offset | 1–500 | Page size and where to start |
GET /calendar
The confirmed earnings calendar: who reports on which day, the time of day,
market cap, and the implied and average moves. Lighter than /earnings,
and available across every confirmed date for Investors as well as Traders.
Defaults to every confirmed date from today out to 120 days.
| Parameter | Values | What it does |
|---|---|---|
scope | all, watchlist | Every confirmed date (default), or just your own stocks |
from, to | YYYY-MM-DD | Date range. Defaults to today through 120 days, which is also the maximum span |
limit, offset | 1–500 | Page size and where to start |
Returns ticker, company, epsDate,
epsTime, period, confirmed,
marketCap, url, impliedMove,
avgMove and avgVolume. The same data backs the
download button on the monthly calendar.
GET /company/{ticker}
One company’s next report. Takes detail.
GET /previews
The written previews: headline, opening paragraph and a link to the full piece.
Takes scope — watchlist by default, or
universe for every upcoming preview (Trader) — plus
limit and offset.
When something goes wrong
| Status | Means |
|---|---|
401 | No key, or the key is wrong or revoked |
403 | Your subscription doesn’t cover what you asked for |
404 | No upcoming earnings for that ticker |
429 | Out of requests for today. Retry-After says when it resets |
Every error carries a plain-English error.message explaining what happened.
Fields
Every row carries these:
| Field | What it is |
|---|---|
Ticker, Company | Symbol and name |
EPSDate, EPSTime, Period | When it reports. Period is BMO, DMH or AMC |
Confirmed | Whether the company has confirmed the date |
Whisper | The Earnings Whisper number for the coming quarter |
EarningsEst, RevenueEst | Consensus estimates |
Grade, Score | Earnings Whisper Grade (0–12) and Score (−5 to +5) |
Sentiment | −1 most bearish to +1 most bullish |
ImpliedMove, AvgMove, ExpectedMove | Options-implied and historical average moves |
Drift, Revision | Move since the last report, and estimate revisions |
PrevClose, DayOpen, High, Low, LastTrade, Volume | Today’s prices |
MarketCap, AvgVolume, EAVWAP | Size, average volume, anchored VWAP |
ShortRatio, ShortPercent | Short interest |
CallDirection, CallMomentum | AI call analysis on the last conference call |
RevenueTrend, MarginTrend, DemandTrend, GuidanceTrend, ToneTrend | Direction on each axis: Up, Flat or Down |
Trends, CompositeAvg | Trend snapshot |
With detail=expanded (Investor and Trader)
| Field | What it is |
|---|---|
ReportedDate, ReportedEPS, ConsensusEst, ReportedWhisper | The last quarter as reported |
ReportedOptExp | The option-expense adjustment applied to EPS and consensus |
ReportedRevenue, ReportedRevenueEst | Revenue against its estimate |
LYReportedEPS, LYReportedRevenue | Same quarter a year earlier, split-adjusted |
EPSGrowthYoY, RevenueGrowthYoY | Year-over-year growth |
GuidanceDirection, GuidanceRange, GuidancePeriod | Guidance issued with that report |
GuidEpsLow, GuidEpsMid, GuidEpsHigh, GuidEpsConsensus | Guided EPS against consensus |
GuidRevLow, GuidRevMid, GuidRevHigh, GuidRevConsensus | Guided revenue against consensus |
GuidancePerc | How far the guidance sits from consensus |
EPS and consensus are both reported on the option-expense-adjusted basis, so they compare directly. The Whisper is already quoted that way.
Use with AI
The MCP server connects your data to an AI assistant, so you can ask questions instead of writing requests:
What’s reporting on my watch list this week, and which have a grade of A− or better?
Works with Claude Desktop, Claude Code, Cursor and anything else that supports MCP. You need Node.js 18 or newer.
Claude Desktop
Settings → Developer → Edit Config, then add:
{
"mcpServers": {
"earnings-whispers": {
"command": "npx",
"args": ["-y", "earningswhispers-mcp"],
"env": { "EW_API_KEY": "YOUR_KEY" }
}
}
}
Claude Code
claude mcp add earnings-whispers \
--env EW_API_KEY=YOUR_KEY \
-- npx -y earningswhispers-mcp
Restart the app afterwards. Four tools appear:
| Tool | What it does |
|---|---|
ew_account | What your subscription covers, requests left today |
ew_earnings | Upcoming earnings, filtered |
ew_company | One company in full |
ew_calendar | Who reports on which day, and when |
ew_previews | The written previews for your watch list |
Limits and fair use
- Requests are counted per key per day and reset at midnight.
/mereports what’s left. - Up to 500 rows a page; use
offsetfor the rest. - The data is for your own use. Redistributing it, or republishing it as your own feed, needs a licence — get in touch.
- Keys are yours alone. If you need access for a team, talk to us about an institutional licence rather than sharing one.