# Crypto tick data API: free archives, sizes and licenses

URL: https://fincodelabs.com/en/blog/crypto-tick-data · Publisher: Fincode (Fincode Yazılım ve Teknoloji A.Ş.), Istanbul, Turkey · Category: Fintech development · Published: 2026-11-06 · Updated: 2026-11-06

Crypto tick data: trades, aggTrades, quotes and depth, exchange archives and REST limits, tested checksum and gap checks, real file sizes, license limits.

**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.

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](https://data.binance.vision/)), 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.

**Binance Vision files for BTCUSDT, measured 6 November 2026**

| 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](https://fincodelabs.com/en/blog/websocket-order-book).

## 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.

**Official documents read 6 November 2026 (alphabetical)**

| 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](https://www.okx.com/historical-data), 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.

> **Hypothetical full budget: one measured BTCUSDT day at the documented page size and weight**
>
> | 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](https://fincodelabs.com/en/blog/binance-api-rate-limit) 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.

```python
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.

**Binance Vision BTCUSDT trades, 3 November 2026**

| 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 `trdMatchID` with no sequence, so check row counts, day boundaries and `timestamp` order instead; that column is seconds with a fraction. Spot files have a numeric `id` and 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.gz` in `trading/` but daily `BTCUSDT_2026-11-04.csv.gz` and monthly `BTCUSDT-2026-10.csv.gz` in `spot/`; Binance's USD-M monthly `aggTrades` folder holds one `part-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.

**BTCUSDT zip totals from the public bucket listing, 6 November 2026 (1 GB = 10^9 bytes)**

| 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](https://fincodelabs.com/en/blog/clickhouse-market-data), and libraries that consume them in [backtesting Python libraries](https://fincodelabs.com/en/blog/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.

**What to ask and how to check**

| 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](https://fincodelabs.com/en/blog/crypto-price-api); recheck them before budgeting. For integration work in general, see Fincode's [exchange API integration](https://fincodelabs.com/en/services/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.

**What each official page allows, read 6 November 2026 (alphabetical)**

| 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)](https://github.com/binance/binance-public-data/blob/master/README.md)
- [Binance Vision Dataset Terms, version 1.0, updated 26 August 2026](https://github.com/binance/binance-public-data/blob/master/TERMS_AND_CONDITIONS.md)
- [Binance Data Collection (Binance Vision)](https://data.binance.vision/)
- [Binance Spot API documentation: REST API (historicalTrades, aggTrades)](https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md)
- [Binance Spot API documentation: WebSocket Streams](https://github.com/binance/binance-spot-api-docs/blob/master/web-socket-streams.md)
- [Binance USD-M Futures: Market data REST API (trade lists, weights, retention)](https://developers.binance.com/en/docs/catalog/core-trading-derivatives-trading-usd-s-m-futures/api/rest-api/market-data)
- [Bybit V5 API: Get Recent Public Trades](https://bybit-exchange.github.io/docs/v5/market/recent-trade)
- [Bybit V5 API: Trade WebSocket stream](https://bybit-exchange.github.io/docs/v5/websocket/public/trade)
- [Bybit public data listing (directory of trading and spot files)](https://public.bybit.com/)
- [OKX API v5 documentation (trades, history-trades, historical market data)](https://www.okx.com/docs-v5/en/)
- [Binance USD-M Futures: WebSocket market streams (stream list)](https://developers.binance.com/docs/derivatives/usds-margined-futures/websocket-market-streams)
- [OKX API Agreement, Section 9.4, last updated 28 July 2026](https://www.okx.com/help/okx-api-agreement)
- [Hyperliquid Docs: Historical data](https://hyperliquid.gitbook.io/hyperliquid-docs/historical-data)
- [Tardis.dev: Data FAQ, read 6 November 2026](https://docs.tardis.dev/faq/data)
- [Capital Markets Law No. 6362, consolidated text, Article 99/A (Turkish)](https://www.mevzuat.gov.tr/mevzuatmetin/1.5.6362.pdf)

> 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](https://fincodelabs.com/en/editorial-policy).

---

Published by Fincode (Fincode Yazılım ve Teknoloji A.Ş.), a software company in Istanbul, Turkey: https://fincodelabs.com/en/blog/crypto-tick-data

Cite as: Fincode, "Crypto tick data API: free archives, sizes and licenses", updated November 6, 2026, https://fincodelabs.com/en/blog/crypto-tick-data
