28,412,683 one-minute OHLC bars across 15 instruments, 2021 to 2026. No account, no API key, no rate limit. This page also lists where the data is missing, which almost no free provider will tell you — and which matters more than the headline bar count.
Everything is stored at one-minute resolution and aggregated on demand to M5, M15, M30, H1, H4, D1 or W1 on true clock boundaries.
| Instrument | M1 bars | From | To |
|---|---|---|---|
| BTCUSD | 2,627,549 | 2021-07-24 | 2026-07-23 |
| ETHUSD | 2,270,819 | 2021-01-01 | 2026-08-03 |
| GBPJPY | 1,939,025 | 2021-01-03 | 2026-04-30 |
| USDCAD | 1,936,731 | 2021-01-03 | 2026-04-30 |
| EURUSD | 1,911,141 | 2021-01-03 | 2026-04-30 |
| AUDUSD | 1,909,057 | 2021-01-03 | 2026-04-30 |
| EURGBP | 1,905,973 | 2021-01-03 | 2026-04-30 |
| GBPUSD | 1,898,746 | 2021-01-03 | 2026-04-30 |
| USDJPY | 1,894,950 | 2021-01-03 | 2026-04-30 |
| EURJPY | 1,890,388 | 2021-01-03 | 2026-04-30 |
| AUDCAD | 1,888,257 | 2021-01-03 | 2026-04-30 |
| XAUUSD | 1,871,487 | 2021-01-03 | 2026-04-30 |
| SPX500 | 1,390,177 | 2021-01-04 | 2026-08-03 |
| NAS100 | 1,383,498 | 2021-01-04 | 2026-08-03 |
| US30 | 1,357,757 | 2021-01-03 | 2026-08-03 |
Every historical dataset has holes. Weekends and holidays are expected; unexplained multi-day gaps are not, and they will quietly distort any statistic computed across them.
These are the gaps longer than three days in this archive, which you can regenerate yourself:
node scripts/research.mjs holes GBPUSD
LAST BAR NEXT BAR DAYS
2021-01-31 2021-02-09 8
2021-03-10 2021-03-14 4
2021-10-13 2021-10-17 4
2023-12-29 2024-01-01 3
2025-08-21 2025-08-25 3
2026-03-12 2026-03-16 3
The eight-day gap in early 2021 is the largest in the set. If your study window covers February 2021, that absence is real and you should account for it rather than assume continuous coverage.
EURUSD carries a five-day gap around 2025-07-22, and several instruments share a hole in mid-March 2021 where the upstream source genuinely has no index data.
Three routes, depending on what you are doing.
The free backtester at fxabsolute.com loads this archive directly. Nothing to download, no account.
The MCP server exposes the whole archive to Claude Code, Cursor or any MCP client, with aggregation and session filtering done server-side so you are not moving millions of rows around.
git clone --depth 1 --filter=blob:none --sparse https://github.com/varsansri/fxabsolute
cd fxabsolute && git sparse-checkout set mcp
cd mcp && npm install
claude mcp add fxabsolute -- node "$PWD/src/index.js"
The .bin files are a deliberately trivial format — a 4-byte big-endian bar count, then fixed 20-byte records of uint32 timestamp and four float32 prices. Twenty bytes per bar instead of roughly sixty for the equivalent CSV row, which is why five years of M1 loads in a browser at all.
const dv = new DataView(buf)
const count = dv.getUint32(0, false)
for (let i = 0; i < count; i++) {
const o = 4 + i * 20
const time = dv.getUint32(o, false)
const open = dv.getFloat32(o + 4, false)
const high = dv.getFloat32(o + 8, false)
const low = dv.getFloat32(o + 12, false)
const close = dv.getFloat32(o + 16, false)
}
| Source | Free limit | Key needed | M1 depth |
|---|---|---|---|
| Alpha Vantage | 25 requests/day | Yes | Capped by request limit |
| Finnhub | 60 calls/min | Yes | Limited intraday history |
| Dukascopy | Unmetered | No | Deep, but tick files need assembly |
| Yahoo Finance | Unofficial | No | ~30 days of intraday |
| FXAbsolute | None | No | 5 years, pre-assembled |
Two honest notes on that table. Dukascopy is the upstream source for much of this archive — if you want raw ticks and are willing to do the assembly, go straight there. And Yahoo's roughly 30-day intraday window is the reason it is unsuitable for multi-year studies, not a criticism of the data itself.
What this archive saves you is the assembly step: fetching, de-duplicating, checking for empty responses and stitching years of chunks into something continuous. That work is genuinely tedious, and it is where most people's data projects quietly die.
Downloading makes sense when you want the archive on disk — for a backtest engine, a database, or work that has to run offline. It is the wrong shape for two common cases.
Exploring. If you do not yet know which instrument or period you care about, pulling gigabytes to answer one question is wasteful. A query interface answers it in a call.
Feeding an AI agent. A model cannot usefully be handed a 38 MB CSV; it can only be handed what fits in its context. A tool call has no such ceiling, because the aggregation happens before the model sees a number.
For both, the same archive is queryable without downloading it:
claude mcp add fxabsolute -- npx -y fxabsolute-mcp
The server pulls only the instrument you ask about, caches it under ~/.cache/fxabsolute-mcp, and never fetches the rest. So it is not really "no download" — it is a download you do not have to manage, scoped to what you actually used.
No. For scripts and AI agents you can query the same archive through an MCP server — npx -y fxabsolute-mcp — which fetches only the instruments you ask about and caches them locally. Downloading is still the better choice for offline work or loading into your own database.
FXAbsolute publishes 28,412,683 one-minute OHLC bars across 15 forex, index and crypto instruments spanning 2021 to 2026, with no account or API key. Dukascopy offers deeper raw tick data free but requires assembly. Alpha Vantage and Finnhub offer free tiers but cap requests, which makes long intraday histories impractical.
It is real market data from an institutional source, not synthetic. It is mid-price OHLC with no spread and no volume, and it contains coverage gaps — the largest being eight days in GBPUSD during February 2021. Those gaps are published so you can account for them rather than discovering them mid-study.
No. Forex trades over the counter with no central exchange, so there is no true market-wide volume figure. Feeds that report forex volume are reporting their own tick counts. This archive omits the field rather than publishing something that could be mistaken for real volume.
Everything is stored at one-minute resolution and aggregated on demand to M5, M15, M30, H1, H4, D1 and W1. Aggregation happens on true clock boundaries, so an H1 bar begins exactly on the hour.
The MCP server code is MIT licensed. The underlying market data originates from third-party feeds, so check the original provider’s terms before redistributing it or building a commercial product on top of it.
A bar costs 20 bytes in this format against roughly 60 for the equivalent CSV row. Five years of one-minute data is around 1.9 million bars per instrument, so the difference decides whether it loads in a browser at all.
The free browser backtester runs on this exact archive — bar-by-bar replay with a full trade journal. No account.
Open FXAbsolute →