Free full-day, tick-by-tick samples across major spot, derivatives and prediction-market venues — one complete, settled trading day per instrument (mostly about a week back, rolling daily), in the exact same format every file in the Data Shop ships in.
unzip cryptostruct-market-data.zip -d ~/.claude/skills/Each sample is one complete trading day — rolling samples sit about a week back and refresh daily, the pinned high-volatility day stays fixed · IDs match the Data Shop and analytics
trades .csv.gz · .parquet — Every fill: exchange_timestamp, adapter_timestamp, trade_id, side, price, quantity — microsecond UTC timestamps, side = buy/sell.bbo .csv.gz — Top of book: bid_price, bid_quantity, ask_price, ask_quantity per update — not on every venue (BitMEX, Coinbase and Kraken record depth only).liquidations .csv.gz · .parquet — Forced liquidations with the bankruptcy price (derivatives venues, 2026+ files).python3 cryptostruct_reader.py trades <file>.txt.zst --out trades.parquetzstd -d <file> or any libzstd tooling.?kind=series_day&zip=1 streams every contract file of that day, &manifest=1 lists them, &status=1 reports readiness, and &restore=1 brings a whole day back from cold storage in one call. Add &complete=1 for scripted pulls: it turns a partially-available day into an error instead of a short archive, so a successful response always means you got everything. Poll &status=1 and fetch once it reports no cold files./api/download/order/{order}/{bundle}/range?kind=series_day&from=…&to=… streams every owned day in that window as a single uncompressed .tar — the “Download N days (.tar)” button on a bundle in your account does exactly this. It is strict: the response carries an exact Content-Length and a strong ETag, and anything less than the full length is a truncated transfer, never a quietly shorter archive. That also makes it resumable — curl -C - picks up where it stopped. The window covers the days of ONE order, and it takes the same &status=1, &restore=1 and &manifest=1 companions.Trouble accessing or analyzing the files? Write to support@cryptostruct.com.
One complete, settled UTC trading day per curated instrument — tick-by-tick trades, full Level-2 order-book depth and liquidation events, byte-identical to the files sold in the Data Shop. Most sample days roll forward daily, the prediction-market rows always pick the busiest recent contract, and one high-volatility Bitcoin day is pinned; no account or email required.
Request one archive per day instead of one request per file. A prediction-series day bundle can hold several thousand contract files, and the order download URL with kind=series_day and zip=1 streams all of them as a single archive — so a full series history is a few hundred requests, not hundreds of thousands. The same URL also accepts manifest=1 to list a day’s files, status=1 to check readiness, and restore=1 to bring an entire day back from cold storage in one call. For scripted downloads add complete=1, which makes a partially-available day return an error rather than a short archive, so a successful response always means every file is included. Days older than about a month sit in deep-archive storage and need roughly twelve hours to become retrievable after a restore, and they stay retrievable for about seven days. There is no per-account download quota that a paced archive-per-day loop would reach.
Yes, for prediction-series bundles: the range endpoint on an order download URL takes kind=series_day with from and to, and streams every owned day in that window as one uncompressed tar file. Your account shows it as a “Download N days (.tar)” button on the bundle. Because the archive layout is fixed, the response carries an exact content length and a strong entity tag, so the download resumes where it stopped with curl -C - and a short transfer is always a visible error rather than a quietly incomplete archive. The window covers the days of a single order, up to one hundred days per stream, and the same URL also accepts status=1 to check the whole range, restore=1 to bring it back from cold storage, and manifest=1 to list what it will contain.
Yes — every sample and every purchased tick day also exports as gzipped CSV or Parquet at no extra cost, via the ▾ menu on any Download button: trades and liquidations (derivatives, 2026 onward) in both formats, top-of-book (BBO) quotes as CSV. Timestamps are integer microseconds UTC and the columns load straight into pandas, polars or DuckDB. BitMEX, Coinbase, Kraken spot and the prediction markets record full order-book depth without a separate BBO stream — there the free reader script converts depth locally.
One zstd-compressed JSON-lines file per instrument per UTC day: the instrument masterdata header on line one, then every order-book update, trade, liquidation and funding event with nanosecond timestamps, in one schema across all venues — documented in the market-data specification.
Simple Binary Encoding is the compact binary wire format our realtime feeds offer next to JSON — the same market-data messages, delivered over WebSocket or Unix domain socket. The spec package above ships the SBE schema XML plus sample messages for every type in both encodings; see the SBE documentation.
Use the free stdlib-only Python reader from the AI toolkit — it streams files of any size and converts trades, depth-grid snapshots at any interval, prices and funding to CSV or Parquet locally. Agents can install the Agent Skill for the full format reference and ready-made recipes.