Short answer: Crypto tick data means individual trades, aggregated trades, top-of-book quotes or depth deltas, and each is a different dataset with its own source and size. Several exchanges publish trade files free in bulk: a Binance Vision BTCUSDT trades file for 3 November 2026 was 18.8 MB zipped with 2,723,726 rows. Free to fetch is not free to use, because Binance's dataset terms are non-commercial, and order book history is much patchier than trades.
Turn millisecond and microsecond timestamps into dates: Unix timestamp converter.
This guide downloads files from exchange archives, verifies them and states sizes, row counts and failure cases, on files fetched 6 November 2026. BTCUSDT is an example only. Binance figures come from files published by Binance Vision (data.binance.vision (opens in a new tab)), which does not sponsor or endorse this page, and no data rows are reproduced.
It is a data engineering guide: it makes no claim that tick data improves any result, ranks no vendor or exchange and carries no referral links. Rules depend on your jurisdiction and the platform's terms. Article 99/A of Capital Markets Law No. 6362 treats activity by foreign crypto-asset platforms directed at Turkish residents as unauthorized.
What is tick data? Four different datasets
Tick data means one record per market event rather than one per time bar, but the event differs by dataset, so ask which one before comparing sizes or prices.
| Dataset | One row is | File | Zip | CSV | Rows |
|---|---|---|---|---|---|
| Individual trades | One fill | Spot, 3 November 2026 | 18.8 MB | 207.0 MB | 2,723,726 |
| Aggregated trades | Fills from one taker order at one price | Spot, same day | 10.9 MB | 62.9 MB | 726,208 |
| Top-of-book quotes | A change in best bid or ask | USD-M, 30 March 2024, the last daily file listed | 87.8 MB | 697.9 MB | 7,398,592 |
| Depth deltas | A change at any price level | None in this archive |
That Spot day holds 3.75 fills per aggregated row, so a row count means little without its dataset. Binance's USD-M bookDepth files are something else again: 34,560 rows a day, depth in 12 percentage bands every 30 seconds, which is not tick-by-tick data. To keep a live book from depth deltas yourself, see the WebSocket order book guide.
Crypto tick data API sources: streams, REST and archives
Venues offer streams, REST history and archives; history limits make REST the weakest route for backfills.
| Venue | Live stream | REST history | Bulk archive |
|---|---|---|---|
| Binance Spot | @trade, @aggTrade, @bookTicker | historicalTrades: 1,000 rows, weight 25. aggTrades: 1,000 rows, weight 4 | Daily and monthly zips with .CHECKSUM; BTCUSDT trades from August 2017 |
| Binance USD-M | @aggTrade, @bookTicker; no single-trade @trade stream listed | historicalTrades: 500 rows, weight 200, API key, last month only. aggTrades: weight 20, recent 2 days only (older calls gave -4166) | Trades from September 2019; bookTicker monthly files stop at April 2024 |
| Bybit | publicTrade.{symbol} | recent-trade: spot 60 rows, others 1,000, recent only | public.bybit.com: trading/ daily gzip per contract (BTCUSDT from 25 March 2020) and spot/; no checksum files listed |
| Hyperliquid | trades subscription | None listed for market trades; fills are per user | Requester-pays S3 buckets; the page says data may be missing |
| OKX | trades (aggregated), trades-all | history-trades: 100 rows, last 3 months, 20 requests per 2 seconds | market-data-history lists files: BTC-USDT trades from September 2021, order books from December 2022; usually T+2, books T+3 |
Besides a page of download links (opens in a new tab), OKX's market-data-history call returns each file's URL and size; its date field arrived as dateTs, as in the response example; the field table says dataTs.
REST or bulk download? The arithmetic
For anything older than today, the archive wins: one measured day takes seconds as a file and from minutes to hours over REST.
| Route | Rows | Requests | Weight | Time at the limit |
|---|---|---|---|---|
Spot historicalTrades | 2,723,726 | 2,724 | 68,100 | 11.35 minutes at 6,000 a minute |
Spot aggTrades | 726,208 | 727 | 2,908 | 0.48 minutes |
USD-M historicalTrades | 2,629,271 | 5,259 | 1,051,800 | 7.3 hours at 2,400 a minute, with a key |
OKX history-trades (BTC-USDT, 3 November file) | 470,227 | 4,703 | n/a | 7.8 minutes at 10 requests a second |
| Binance Spot archive file | 2,723,726 | 1 | n/a | 1.6 to 3.5 seconds, measured |
The archive time is four downloads on 6 November 2026 at 5 to 11 MB/s; the REST times are arithmetic and leave nothing for other programs on the IP, as the Binance rate limit guide explains. Per Binance's README, daily files appear the next day and monthly files on the first Monday of the month; live collection fills the gap.
Crypto tick data download: tested Python with checksum and gap checks
Verify a file before loading it: compare the SHA-256, then walk the trade IDs and timestamps.
import csv, hashlib, io, sys, urllib.error, urllib.request, zipfile
BASE = "https://data.binance.vision/data/spot/daily/trades" # USD-M: data/futures/um/daily/trades
SYMBOL, DAY = "BTCUSDT", "2026-11-03"
URL = f"{BASE}/{SYMBOL}/{SYMBOL}-trades-{DAY}.zip"
def fetch(url):
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
try:
with urllib.request.urlopen(req, timeout=120) as resp:
return resp.read()
except urllib.error.URLError as e: # 404 if not published yet
sys.exit(f"{e} for {url}")
body = fetch(URL)
expected = fetch(URL + ".CHECKSUM").decode().split()[:1]
if not [hashlib.sha256(body).hexdigest()] == expected:
sys.exit("checksum missing or wrong: do not load this file")
rows = gaps = missing = repeats = backwards = 0
prev_id = prev_ts = None
digits = set()
with zipfile.ZipFile(io.BytesIO(body)) as z:
if not len(z.namelist()) == 1:
sys.exit(f"expected one CSV, found {z.namelist()}")
for row in csv.reader(io.TextIOWrapper(z.open(z.namelist()[0]), "ascii", errors="replace")):
if row[:1] == ["id"]: # USD-M header row
continue
if len(row) < 5 or not (row[0].isdigit() and row[4].isdigit()):
sys.exit(f"bad row after {rows} rows: do not load this file")
trade_id, ts = int(row[0]), int(row[4])
if prev_id is not None:
step = trade_id - prev_id
gaps += step > 1
missing += max(step - 1, 0)
repeats += step < 1
backwards += ts < prev_ts
prev_id, prev_ts = trade_id, ts
rows += 1
digits.add(len(row[4]))
print("zip bytes", len(body), "| checksum ok")
print("rows", rows, "| gaps", gaps, "| missing ids", missing, "| repeats", repeats)
print("backwards timestamps", backwards, "| timestamp digits", sorted(digits))Output on 6 November 2026 (Python 3.11.3, standard library, 15 to 18 seconds with the download):
zip bytes 18770715 | checksum ok
rows 2723726 | gaps 0 | missing ids 0 | repeats 0
backwards timestamps 0 | timestamp digits [16]It exits with a message on a missing file, bad checksum, extra zip member or malformed row. Summing last minus first trade ID plus one over the same day's Spot aggTrades rows gives exactly 2,723,726.
Gaps that are not missing data: Spot versus USD-M files
A gap check written for Spot fails on USD-M files, and the two products differ in format as well.
| Check | Spot | USD-M |
|---|---|---|
| Rows | 2,723,726 | 2,629,271 |
| Trade ID gaps | None | 10,141 gaps and 10,353 missing IDs, in every hour: 0.39% of the ID range |
| Largest gap | None | 4 IDs; 98% of gaps are single IDs |
| Header row | No | Yes |
| Timestamp | 16 digits, microseconds | 13 digits, milliseconds |
Binance's USD-M documents say insurance fund and ADL trades are not returned. That may explain the skipped IDs, but the files do not label them, so it is a reading, not a confirmed cause: alert on any Spot gap, not on every USD-M gap.
- Bybit derivatives files use a 36-character
trdMatchIDwith no sequence, so check row counts, day boundaries andtimestamporder instead; that column is seconds with a fraction. Spot files have a numericidand millisecond timestamps. - Days differ. OKX dates trade files in UTC+8: its 3 November 2026 BTC-USDT file starts at 16:00 UTC on 2 November, while the Binance and Bybit files start at midnight UTC.
- File names vary. Bybit uses
BTCUSDT2026-11-03.csv.gzintrading/but dailyBTCUSDT_2026-11-04.csv.gzand monthlyBTCUSDT-2026-10.csv.gzinspot/; Binance's USD-M monthlyaggTradesfolder holds onepart-00000-...file. Match names strictly and report misses. - Files can change. Binance's README says archived files may be updated and lists past replacements, so store each file's checksum and recheck before a rebuild.
Tick data bitcoin: how much storage to budget
One symbol's full trade history on Binance is tens of gigabytes zipped, and a raw CSV was about 11 times its zip in the Spot sample.
| Dataset | Monthly files | All history | Latest 12 months |
|---|---|---|---|
| Spot trades, August 2017 to October 2026 | 111 | 80.41 GB | 10.08 GB |
Spot aggTrades | 111 | 59.54 GB | 5.57 GB |
| USD-M trades, September 2019 to October 2026 | 86 | 70.81 GB | 10.74 GB |
USD-M bookTicker, May 2023 to April 2024 | 12 | 53.55 GB | None, the folder ends there |
Monthly sizes swing widely: Spot's largest file, February 2023, was 3.25 GB, and the last 12 months average 0.84 GB. Zip ratios vary by dataset too, at 11.0 for Spot trades and 5.8 for Spot aggTrades. Loading such files into a queryable store is covered in the ClickHouse market data guide, and libraries that consume them in backtesting Python libraries.
Questions to ask a tick data vendor
Get every vendor's written answers to the same six questions, then test a free sample against them.
| Question | Why it matters | How to check |
|---|---|---|
| Exchange timestamp, receive timestamp or both? | Only a receive time shows what could have been known then | Look for two columns and the clock source |
| What is the gap policy? | A missed WebSocket message cannot be collected later | Ask for an incident list; run the ID check above |
| Are delisted symbols included? | Without them, history has survivorship bias | Request a symbol you know was delisted |
| Snapshot or delta? | Deltas rebuild a book; periodic snapshots cannot show what happened between | Rebuild a sample and compare it with a snapshot |
| Which file format and order? | Ties at one timestamp need a defined order | Inspect a sample day |
| What does the license allow in a product? | Display, storage and derived data are often separate rights | Get the clause in writing |
Tardis.dev's FAQ, read 6 November 2026 and named only as an example, says raw WebSocket-sourced data can have gaps and that gaps from outages or collection interruptions are permanent. Published prices are listed in the crypto price API guide; recheck them before budgeting. For integration work in general, see Fincode's exchange API integration page; naming Binance, Bybit, OKX or Hyperliquid here does not mean Fincode integrates them or has built on them.
Crypto tick data free: what the licenses allow
Bulk files are free to fetch and restricted in use, so read the terms before they reach a product.
| Source | Page | What it says |
|---|---|---|
| Binance Vision | Dataset Terms, updated 26 August 2026 | CC BY-NC-SA 4.0. Use is limited to academic research, non-monetized open educational projects, purely personal non-production backtesting and non-commercial open-source evaluation (4.1); derived data is covered too (2.4). Commercial use needs a separate written license (3.4) |
| Bybit | Public listing | No license or terms file in the listing, and the history page its docs link to did not load, so the rights could not be verified: ask Bybit in writing |
| Hyperliquid | Historical data page | States no license, only that the requester pays transfer costs and data may be missing, so the rights are unverified too |
| OKX | API Agreement, Section 9.4, 28 July 2026 | Personal, non-commercial trading and account management only. Publishing or displaying the data to others needs written consent, and public endpoints are covered |
Binance's README ends with a Licence heading that says MIT without saying what that covers, so do not read MIT as a license to the data.
Frequently asked questions
What is tick by tick data?
One record per market event instead of one per time bar. In crypto the event may be a fill, an aggregated trade, a best bid or ask change or a depth change, so check which one a source means.
Is there free crypto tick data?
Free to download, yes: Binance Vision, Bybit's public listing and OKX's files need no payment. Binance's and OKX's terms limit use to non-commercial purposes, so free does not mean usable in a product.
How big is Bitcoin tick data?
On Binance's listing of 6 November 2026, BTCUSDT Spot trades total 80.41 GB zipped from August 2017, and the latest 12 months are 10.08 GB. One day's CSV in the sample was 207.0 MB.
Why does my gap check fail on Binance futures files?
USD-M trade IDs skip values: on the tested day, 0.39% of the ID range, at most 4 IDs in a row. Binance says insurance fund and ADL trades are not returned, so treat small USD-M gaps differently from Spot gaps.
Sources
- Binance Public Data: README (file columns, checksums, microsecond Spot timestamps, updates) (opens in a new tab)
- Binance Vision Dataset Terms, version 1.0, updated 26 August 2026 (opens in a new tab)
- Binance Data Collection (Binance Vision) (opens in a new tab)
- Binance Spot API documentation: REST API (historicalTrades, aggTrades) (opens in a new tab)
- Binance Spot API documentation: WebSocket Streams (opens in a new tab)
- Binance USD-M Futures: Market data REST API (trade lists, weights, retention) (opens in a new tab)
- Bybit V5 API: Get Recent Public Trades (opens in a new tab)
- Bybit V5 API: Trade WebSocket stream (opens in a new tab)
- Bybit public data listing (directory of trading and spot files) (opens in a new tab)
- OKX API v5 documentation (trades, history-trades, historical market data) (opens in a new tab)
- Binance USD-M Futures: WebSocket market streams (stream list) (opens in a new tab)
- OKX API Agreement, Section 9.4, last updated 28 July 2026 (opens in a new tab)
- Hyperliquid Docs: Historical data (opens in a new tab)
- Tardis.dev: Data FAQ, read 6 November 2026 (opens in a new tab)
- Capital Markets Law No. 6362, consolidated text, Article 99/A (Turkish) (opens in a new tab)
This guide is general information about software and markets, not investment, legal or tax advice. Automated trading can lose money, past or backtested performance does not guarantee future results, and the rules that apply depend on your jurisdiction and your exchange's terms. Sources, checks and corrections: see the editorial policy.