Data sources
Every source we can pull prediction-market data from — what it gives, how you get it, and the specific way each one will mislead you. The last column is the one that took months to earn.
| Source | Access | Format | Metrics | Basis | History | Status |
|---|---|---|---|---|---|---|
Artemis aggregator | keyless free | API | volume, openInterest, fees | notional | 963 days verified for Kalshi and Polymarket (2024-01-01 →); ~2,400 days available on volume | live |
Kalshi public daily report venue-native archive | keyless free | Bulk download | volume, openInterest, high, low, settlement | contracts | back to 2021-06-28 | live |
Kalshi trade tape venue-native | keyless free | API | trades, prices, size, takerSide | matched | cursor-paginated, recent | live |
Kalshi events API venue-native | keyless free | API | markets, prices, openInterest, volume | contracts | current only | live |
Polymarket Gamma API venue-native | keyless free | API | markets, prices, volume, liquidity | matched | current, with volume windows (24h/1wk/1mo/1yr) | live |
Polymarket open interest (undocumented) venue-native | keyless free | API | openInterest | usd | NONE — current value only | live |
DefiLlama aggregator | keyless free | API | volume, fees | matched | multi-year | live |
Dune Analytics onchain + partner tables | keyed paid tier for meaningful use | API CSV | trades, fees, volume, combos | matched | full | live |
CFTC Part 16 public reports regulator | keyless free | CSV HTML | volume, openInterest | contracts | long | unbuilt |
Manifold venue-native | keyless free | API | markets, volume | play-money | full | live |
PM Atlas aggregator | keyless free | JS bundle | volume, mechanism, chain, funding | unknown | none | live |
YouTube channel RSS media | keyless free | RSS | videos | n/a | last 15 items | flaky |
Each of these cost real time or produced a wrong number before it was understood. Anyone can list endpoints; this is the part that does not come from documentation.
— PASSING A STALE KEY RETURNS 401. Passing NO key returns 200 with full data. We wrongly declared this source dead twice by testing with an expired key.
— Trailing slash is required on the metric path or it 307s.
— Without startDate/endDate it returns a single scalar, not a series.
— COMPANY-NOT-PRODUCT TRAP: for any venue whose main business is a crypto exchange, the symbol returns the EXCHANGE's volume. cryptocom ($112.9B) is the spot exchange, not its prediction market (nadex/CDNA). Same for gemini, hyperliquid, drift. Including those four would have reported ~$245B instead of $111B for Q2. Check metadata.about.description before trusting any symbol.
— Kalshi open interest reads ~$874M on a notional basis where our own priced figure is ~$110M — an 8x gap that is purely definitional, not an error in either.
— ~1.1 GB uncompressed per day. Cannot be JSON.parse'd — exceeds Node's max string. Must be streamed.
— Volume and open interest are CONTRACT COUNTS, not dollars. Multiply by price for USD; never by a flat $1 unless you mean notional.
— Carries only daily high/low, no per-trade price — so fees computed from it are per-market, not true row-level.
— A market that did not trade has no high/low, so its open interest cannot be priced. Report the coverage rather than assuming a price.
— min_ts/max_ts filtering returned empty in testing — ticker filtering works, time filtering did not.
— Per-ticker only in practice, so a whole-day sweep is impractical. This is the row-level source the fee methodology wants, but only for targeted markets.
— Use /events, NOT /markets — the flat /markets feed is dominated by MVE parlay shards (millions of rows, mostly zero open interest).
— Fields are suffixed _fp (open_interest_fp, volume_fp) and arrive as strings.
— Payload is large: ~2.6 MB per 100 events, which exceeds Next's 2 MB fetch-cache limit.
— 89 fields but NO open interest — liquidity is order-book depth, which is a different thing.
— Volume is native USD, so it is directly comparable to nothing on Kalshi without conversion.
— No history whatsoever. interval, startTs, fidelity, range and history params were all tried; every one returns the same single current value. There is no oi-history route.
— Accepts a comma-separated market list, so per-market OI is one round trip — but repeated ?market= params silently return only the last one.
— Reads ~24% below Artemis for the same venue and day ($359.5M vs $446.7M) — an unexplained basis gap worth resolving before either is published.
— Fee adapters embed the OLD Kalshi schedule (the one effective 4 Apr 2026) — so its fee figures lag schedule changes.
— Uses a hardcoded flat 25/50/25 split as an ASSUMPTION, not a measurement, in at least one adapter. Treat its fee output as modelled, not measured.
— Runs 2–4x below Artemis for the same venues because it reports matched rather than notional volume. Both are right; the basis differs.
— kalshi.trade_report has FIVE columns and none of them is a fee. No measured Kalshi fee figure exists anywhere; every number in circulation is a modelled schedule.
— EFFECTIVE-PRICE CORRECTION REQUIRED: (CASE WHEN price = 0 THEN 0.367 ELSE price + 0.45 END)/100.0 with price BETWEEN 0 AND 99. Omitting it drops sub-1c trades and HALVES combo notional ($46.6B → $26.9B).
— polymarket_polygon.combo_trades_raw writes one row per side; taker shares are exactly half of all rows and fees appear only on taker rows. Verified arithmetically, not documented — treat as inferred.
— Key lives in ~/Downloads/Pricedin/.env
— Not yet parsed. This is the dark-pool backstop — the only route to volumes for regulated venues that publish nothing themselves.
— Hardest to build and the most defensible thing on the list. Nobody else in the sector does it.
— PLAY MONEY. Must never enter a dollar league table. Its volume is not comparable to anything else here.
— Name collides with 'Manifold' the venture fund in our own investor data — this already caused a wrong-data bug on a venue profile.
— Self-reported free text, not measured. Preserve the raw claim verbatim and never promote it to measured.
— Strict USD-only parsing required; contract-count claims must be excluded from dollar rankings.
— ~50% success rate. The SAME url returns 200 and 404 minutes apart, and behaves identically under a browser User-Agent, so it is not bot filtering.
— Requires retry with widening backoff plus a last-good disk snapshot, or shows will blink in and out of the site.
— The YouTube Data API key (free quota) is the robust upgrade and is still unclaimed.
| Venue | Publishes | Withholds | Verdict |
|---|---|---|---|
| Kalshi | Daily per-market volume, open interest, high/low back to 2021, plus a live trade tape | Any fee field, anywhere. Every Kalshi fee figure in existence is modelled. | The most generous publisher in the sector, with one deliberate hole. |
| Polymarket | Markets, prices, volumes, and an undocumented open-interest endpoint. On-chain fees are measurable per transaction. | Any open-interest history. Current value only, permanently. | Rich on the present, blank on the past. History must be recorded live or it is gone. |
| Regulated US venues (ForecastEx, CDNA, Rothera, Railbird) | Nothing directly | Everything voluntary | The dark pool. Only reachable through CFTC Part 16 filings — free, public, and unparsed by anyone including us. |
| Sports exchanges (Novig, ProphetX, Sporttrade) | No public API found at any obvious path | Volume, open interest | Unprobed properly. Needs their docs or a browser network-tab session, not guessed URLs. |
Every source we can pull prediction-market data from, what it gives, how you get it, and the specific way each one will mislead you. Access and status were re-tested on the verifiedOn date, not taken from memory.