Free returns data API
The same JSON that powers this site, served as static files. No key, no signup. Fair use — use it, cite it, build on it.
Everything on returnsview is precomputed into plain JSON and served from our CDN. That means you can read it directly — from a script, a spreadsheet, or your own app — for free. Data refreshes once a day around 00:30 UTC after markets settle. A polite request: if you publish with it, link back to returnsview.com.
Base URL
https://returnsview.com/dataEndpoints
| Path | What it returns |
|---|---|
| /meta.json | Generation timestamp and coin count. |
| /coins.json | Array of all coins with headline returns (24h/7d/30d/YTD/1y), rank, market cap. |
| /coins/{id}.json | Full history for one coin: monthly/quarterly/yearly returns matrices, weekly & daily, seasonality, and stats. id is the CoinGecko id, e.g. bitcoin. |
| /stocks.json | Array of all stocks, ETFs and world indices with headline returns and index-membership flags. |
| /stocks/{ticker}.json | Full history for one ticker, e.g. AAPL, GSPC (S&P 500 index), AZN-L (LSE). |
| /cycles.json | Bitcoin four-year halving cycles: growth-of-$1 series per coin per cycle. |
| /recaps.json | Per-month breadth, index moves, biggest movers and a written recap for every month on record. |
| /news.json | Latest crypto and markets headlines. |
The id and ticker values are exactly the last path segment of any asset page — e.g. /coin/solana → /data/coins/solana.json.
Key fields
Returns are percentages. Matrices are keyed by year; monthly is a 12-slot array (Jan…Dec), quarterly 4, weekly 52 (ISO week), with null where there's no data. Each has a parallel _val grid of period-end closes in the asset's currency.stats holds ret_24h/7d/30d/ytd/1y, best/worst month, and the history span.
Examples
Shell:
curl https://returnsview.com/data/coins/bitcoin.json | jq .statsPython:
import requests
d = requests.get("https://returnsview.com/data/stocks/AAPL.json").json()
print(d["name"], d["stats"]["ret_1y"], "% (1y)")Google Sheets — import Bitcoin's record as rows (IMPORTDATA returns the whole file, not one field):
=IMPORTDATA("https://returnsview.com/data/coins/bitcoin.json")JavaScript (browser or server — CORS is enabled):
const d = await (await fetch("https://returnsview.com/data/coins.json")).json();
const top = d.sort((a, b) => b.ret_1y - a.ret_1y)[0];Embeddable charts
If you want the chart rather than the numbers, every heatmap here can be iframed into your own page. No key, no script tag, and it rebuilds daily so the embed stays current without you touching it.
/embed/coin/{cg_id}/— one coin's monthly returns heatmap/embed/stock/{ticker}/— the same for a stock, ETF or index/embed/map/— the whole market as a treemap, sized by market cap
<iframe src="https://returnsview.com/embed/coin/bitcoin/"
width="600" height="420"
style="border:0;width:100%;max-width:600px"
loading="lazy" title="Bitcoin monthly returns heatmap"></iframe>
<p style="font:12px/1.4 system-ui,sans-serif;margin:6px 0 0">Source:
<a href="https://returnsview.com/coin/bitcoin/">Bitcoin monthly returns — returnsview</a></p>Keep the credit paragraph outside the iframe. An iframe is a separate document, so the caption is the only part that lands in your page — it is what tells a reader where the figures came from. The Embed button on any asset page builds this snippet for you.
Notes & fair use
- No authentication. It's a CDN — please cache responses and batch rather than hammering per-request. Abusive traffic may be throttled to keep it free for everyone.
- Updated daily (~00:30 UTC).
meta.jsontells you the freshness. - CORS is enabled on every
/data/path (Access-Control-Allow-Origin: *, GET/HEAD/OPTIONS), so browserfetch()works cross-origin — as do curl, Python and Sheets. - Machine-readable spec: openapi.yaml (OpenAPI 3.1), suitable for generating a client.
- Data is nominal returns in each asset's quote currency, from settled closes. See the methodology. Provided as-is, not financial advice.
- Attribution appreciated: “Data: returnsview.com” with a link.