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.

What is real here, and what is not. These are our observations of public prices, at the times our pollers asked — not the venues’ official history and not every trade. Only Kalshi rows carry a real bid; the Polymarket and Manifold pollers write the ask into both columns. A market that did not move is silent for up to an hour. A month is exported only after it ends; June 2026 begins on the 22nd, when collection started, so it is a partial month. License: CC BY 4.0 — use it, cite TinyCorp Signal, tinycorp.ai/datasets. Nothing here is investment advice.

The files

2026-09 — market-price-snapshots-2026-09.csv.gz

5,599,135 rows106 MB gzip412,464 markets — 343,342 Kalshi · 65,258 Polymarket · 3,864 Manifold2026-09-01T00:00:02 → 2026-09-30T23:58:01 UTC

Download 2026-09 (106 MB)   checksum

sha256 d57e3fbf6f630bc24ffdcbeafd03142d5fecda860e6ea64304d353a31f949451
Rows per day, 2026-09-01 → 2026-09-30. Every day has rows; a short dip is the pollers, not the markets. Exported 2026-10-01T02:05 UTC in 133 s.

2026-08 — market-price-snapshots-2026-08.csv.gz

15,719,040 rows302 MB gzip407,224 markets — 341,050 Kalshi · 62,205 Polymarket · 3,969 Manifold2026-08-01T00:00:02 → 2026-08-31T23:59:01 UTC

Download 2026-08 (302 MB)   checksum

sha256 5d16f485a7259a02b2294b18c8ef8c8db753247508f119fca9aa8c3539504a1b
Rows per day, 2026-08-01 → 2026-08-31. Every day has rows; a short dip is the pollers, not the markets. Exported 2026-09-17T05:19 UTC in 423 s.

2026-07 — market-price-snapshots-2026-07.csv.gz

23,793,605 rows461 MB gzip330,279 markets — 262,565 Kalshi · 63,670 Polymarket · 4,044 Manifold2026-07-01T00:00:02 → 2026-07-31T23:59:02 UTC

Download 2026-07 (461 MB)   checksum

sha256 def2cebd44d1a9ca2f2923000403084edc00ed3d7d7dd8ea7dc16b163f6798d7
Rows per day, 2026-07-01 → 2026-07-31. Every day has rows; a short dip is the pollers, not the markets. Exported 2026-09-17T05:12 UTC in 645 s.

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.

2026-08-20 — Heartbeat row interval raised from 240 s to 3,600 s and rows byte-identical to the previous row for the same ticker are no longer written (predictive/kalshi_poller.py, polymarket_poller.py, manifold_poller.py). Rows per day fell from about 747,000 (1 Jul-19 Aug mean) to about 169,000 (21-31 Aug mean); 20 Aug itself is a half-and-half day (321,536 rows). A quiet market now goes silent for up to an hour instead of four minutes; the row rule in `schema.row_rule` describes the tape from this date on. Affects: every month from 2026-08; 2026-07 is entirely pre-change.

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.

FamilyVerifiedClaimedTotal
human-ishUA only — no published range8,917
other-botUA only — no published range4,854
meta-externalagentAIUA only — no published range488
Bingbotverified 349claimed 47396
Googlebotverified 260claimed 103363
ClaudeBotAIverified 194claimed 110304
BytespiderAIUA only — no published range261
AmazonbotAIUA only — no published range217
PerplexityBotAIverified 100claimed 44144
GPTBotAIverified 7claimed 107114
OAI-SearchBotAIverified 64claimed 45109
ChatGPT-UserAIverified 49claimed 53102
Claude-UserAIverified 0claimed 9090
GoogleOtherverified 54claimed 2680
CCBotAIUA only — no published range71
ApplebotUA only — no published range59
Perplexity-UserAIverified 0claimed 2222
cohere-aiAIUA only — no published range15

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

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.