Free Stock Market Data API, No Key Required
A free stock market data API with no key and no signup: seven curated JSON queries over US equities and options, cached at the edge and open to AI agents.
Strasmore runs a free stock market data API that needs no key and no signup. It serves seven curated, read-only queries over US equities and options data as plain JSON over HTTPS, and it is deliberately open to AI agents as well as people. It is also the keyless demo of something rarer: a free SQL API where a free account writes its own queries. This page documents every endpoint, shows working calls, and charts the same data the API returns.
What the free API serves
Each key answers one question a market reader actually asks. The seven queries as of today:
spy_qqq: SPY and QQQ normalized returns over the last 45 sessionsdividend_yield_leaders: the highest large-cap dividend yields at the latest sessionupcoming_ex_dividends: US ex-dividend dates ahead, with cash amounts and pay datesshort_interest_watch: days-to-cover leaders at the latest short-interest settlementiv_leaders: end-of-day implied-volatility leaders among liquid option underlyingsrecent_ipos: US listings from the last 180 days, with offer price and sizelatest_market_news: the newest market headlines and the tickers they mention
Equity prices are delayed. Options greeks and implied volatility are end-of-day values. Every payload includes the exact SQL that produced it, so any number can be traced to its query.
How to call it
One GET request, no headers required:
curl "https://ai.strasmore.com/api/demo?q=dividend_yield_leaders"
The catalog endpoint lists every available key with a ready-to-fetch URL, a plain-English description of each query, and usage notes. Fetch it first if you are discovering the API programmatically:
curl "https://ai.strasmore.com/api/demo/catalog"
A response carries the resolved key, the question it answers, the SQL, column names, rows, and two pointer fields. The shape (values elided):
{
"key": "dividend_yield_leaders",
"label": "Highest dividend yields, large caps, latest session",
"nl": "Which large-cap US stocks currently have the highest dividend yields?",
"sql": "SELECT ...",
"columns": ["as_of", "ticker", "dividend_yield_pct", "..."],
"rows": ["..."],
"source": "Strasmore Research",
"more": "Get more at https://www.strasmore.com ..."
}
Passing a key that does not exist serves the default query and flags it with a fallback_from field instead of failing. Treat that field as a spelling alarm, and treat the catalog as the source of truth for valid keys.
Built for agents and LLMs
The demo is designed to be called by software you did not have to write today. Responses set access-control-allow-origin: *, CORS preflights answer permissively from any origin, and results are cached at the network edge for ten minutes. Browser apps, notebooks, and LLM agents can all fetch it directly.
Machine-readable entry points, in the order an agent should read them:
https://www.strasmore.com/llms.txtnames the content index and the demo API in one short file.https://ai.strasmore.com/api/demo/catalogenumerates every query with a URL.- Each response's
morefield points back to the catalog and the full product.
Two etiquette notes. Responses are cached for ten minutes, and polling faster than that returns identical bytes. The source field inside each payload names where the data came from; keep it visible where practical when you republish a number.
The data behind the demo
The API's answers come from the same warehouse this blog reads. The panels below run the demo's queries through the blog pipeline, with the SQL open under each one.
The spy_qqq key normalizes SPY and QQQ closes to percentage returns from the start of a 45-day window. Over the 31 sessions in the current window, SPY's cumulative move measures -1.08% and QQQ's measures -6.06%.
The exact SQL behind every number
SELECT day,
round((spy / first_value(spy) OVER (ORDER BY day ASC) - 1) * 100, 2) AS spy_return_pct,
round((qqq / first_value(qqq) OVER (ORDER BY day ASC) - 1) * 100, 2) AS qqq_return_pct
FROM (
SELECT toDate(window_start) AS day,
argMaxIf(close, window_start, ticker = 'SPY') AS spy,
argMaxIf(close, window_start, ticker = 'QQQ') AS qqq
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ') AND window_start >= now() - INTERVAL 45 DAY
GROUP BY day
)
ORDER BY dayThe dividend_yield_leaders key screens for yields between 2% and 15% with a market cap above $2 billion. The floor removes noise and the ceiling removes special-dividend artifacts that read as yields no company sustains. As of Jul 17, the top of the screen is STRC at 13.45%. For how a single company's payout history reads over decades, see Microsoft's dividend history.
The exact SQL behind every number
SELECT ticker,
round(dividend_yield * 100, 2) AS dividend_yield_pct,
formatDateTime(date, '%b %e') AS as_of_label
FROM global_markets.stocks_ratios
WHERE date = (SELECT max(date) FROM global_markets.stocks_ratios)
AND dividend_yield BETWEEN 0.02 AND 0.15
AND market_cap > 2e9
AND ticker NOT IN ('SPCX')
ORDER BY dividend_yield DESC
LIMIT 12The iv_leaders key averages end-of-day implied volatility per underlying across all listed strikes and expiries, keeps names with meaningful option volume, and ranks them. The current leader is SNXX at an average implied volatility of 299.1%. High readings on this screen mark names where the options market prices large moves; the screen states the level and leaves the interpretation to you.
The exact SQL behind every number
SELECT underlying_symbol AS ticker,
round(avg(implied_volatility) * 100, 1) AS avg_iv_pct
FROM global_markets.options_greeks
WHERE date = (SELECT max(date) FROM global_markets.options_greeks)
AND iv_converged
AND underlying_symbol NOT IN ('SPCX')
GROUP BY underlying_symbol
HAVING sum(volume) > 10000
ORDER BY avg_iv_pct DESC
LIMIT 12The short_interest_watch key ranks days-to-cover from the same FINRA dataset explained in our short-interest data guide, and upcoming_ex_dividends reads the corporate-actions calendar. Both follow the pattern above: a fixed screen, a bounded result, the SQL in the payload.
From the demo to the full warehouse
The demo's seven queries are fixed on purpose: they stay cheap, cacheable, and safe to open to everyone. The warehouse behind them holds 22 years of US equities and 12 years of options history, and a free account (no card) writes its own SQL against it, 100 queries a day. Paid tiers open the full history, tick data, and programmatic API keys. When a fixed screen stops being enough, the free SQL tier is the step up.
FAQ
Is the Strasmore market data API really free?
Yes. The demo endpoints need no key, no signup, and no payment details. They serve fixed queries only; arbitrary questions run on the full product.
Do I need an API key or authentication?
No. Every demo endpoint answers plain unauthenticated GET requests. Keys exist only for the paid programmatic API, which runs custom queries.
How fresh is the demo data?
Equity prices are delayed rather than real-time. Ratios, short interest, and corporate actions update on their source cadence. Greeks and implied volatility are end-of-day. Each response is cached for ten minutes.
Can my LLM agent or browser app call it directly?
Yes. Responses answer with open CORS from any origin, preflights succeed everywhere, and the catalog at /api/demo/catalog describes every query in JSON an agent can read without documentation.
What happens if I request a key that does not exist?
The API serves the default spy_qqq query and adds a fallback_from field naming what you asked for. Check the catalog for the list of valid keys.
Every panel on this page is a live stored query, and the same warehouse answers questions you write yourself in SQL or plain English on the Strasmore terminal.