Datasets
The price tape, free. Since 22 June 2026 three pollers on this box have written a row every time a Kalshi, Polymarket or Manifold market’s ask moved a cent — or once an hour when it did not. That is 45,111,780 rows in the 3 finished months published so far, one compressed CSV per month, with a checksum and the poller’s own day-by-day count so you can see any hour it was down. It is the same tape our bots are backtested on.
The files
2026-09 — market-price-snapshots-2026-09.csv.gz
Download 2026-09 (106 MB) checksum
2026-08 — market-price-snapshots-2026-08.csv.gz
Download 2026-08 (302 MB) checksum
2026-07 — market-price-snapshots-2026-07.csv.gz
Download 2026-07 (461 MB) checksum
Collection changes
The tape is an event feed, and the rule that decides when a row is written has changed. Anyone comparing months should know when.
Who reads this data
Requests to tinycorp.ai in the 7 days 2026-10-09 to 2026-10-15 (UTC), by user-agent family. 16,606 requests in all; 1,937 from clients that named themselves an AI crawler or assistant (marked AI) — of those, 414 verified as coming from the operator’s own published address range, 471 claimed (the name without the address), and 1,052 from families whose operator publishes no range. Unit: requests, nginx access log, bots classified by user-agent — a family’s absence means it did not identify itself, not that it did not come. Requests, not visitors and not pageviews.
Verified means the request said it was that crawler and came from an IP address inside the range its operator publishes — Anthropic, OpenAI, Perplexity, Google and Microsoft each publish one. Claimed means the user-agent said so but the address was not on that list: anyone can type any user-agent, and the claimed rows are mostly scanners probing for /.env under a famous name. A family marked UA only has no published range, so its count is the name alone. In the bars, the solid part is verified, the amber part claimed, and a faint bar is UA only.
Address ranges last fetched 2026-10-15 01:44 UTC from 9 published lists. Rebuilt nightly; last built 2026-10-15 01:44 UTC. The same numbers, 14 days, the top paths per family, the claimed paths and the range sources, as JSON: /api/data/readers.json. It is a separate, read-only count over the web server’s log and feeds nothing else on the site.
Schema
Eight columns, UTF-8 CSV with a header row, sorted by polled_at then ticker. Read from the pollers’ own code, not from memory.
- ticker
- Kalshi: market ticker (KX...). Polymarket: market slug. Manifold: 'mf-' + slug.
- polled_at
- ISO-8601 UTC, second resolution, the poller's clock.
- yes_bid, yes_ask, last_price
- yes_bid, yes_ask, last_price in cents 0-100. Only Kalshi rows carry a real bid; the Polymarket and Manifold pollers write the ask into both bid and ask.
- volume, volume_24h, open_interest
- volume, volume_24h, open_interest as the platform reported them.
How it was collected
- Cadence. Kalshi every 1 min, Polymarket every 2 min, Manifold every 3 min (cron on the TinyCorp box).
- The row rule. A row is written when the ask moved >= 1 cent since that ticker's previous row, or the previous row is older than 3,600 s (heartbeat). An event tape, not a fixed cadence. So a flat market has one row an hour and a busy one has one every poll; count rows per market before you treat density as activity.
- Coverage. The markets the pollers were watching at the time — every open market on each venue that passed their status filter — not a curated subset. Markets enter the tape when listed and leave when they settle.
- Gaps. The bars above are the poller’s own count per day. A red bar is a day with no rows, which means the box or the poller was down, not that the markets were quiet. The exporter reads the live database a day at a time and never deletes from it.
- Started 2026-06-22. Earlier data was pruned before this archive existed and is not recoverable from this tape.
Reading it
zcat market-price-snapshots-2026-08.csv.gz | head — or in Python, pandas.read_csv("market-price-snapshots-2026-08.csv.gz"); the file is plain gzip. Prices are integers in cents, so divide by 100 for probabilities. Join Kalshi tickers to titles through the Kalshi API; Polymarket slugs are the URL path on polymarket.com.
Questions or a correction: contact. The bots that trade on this tape, and the ones that died trying, are in the Graveyard.