VenueGapLive screener →

The data, as JSON.

Everything the screener shows is available as plain JSON, free, no key. Rate limit 120 requests per minute per IP. Responses are gzip-compressed when you accept it. Please cache; the feed changes every 45 seconds, not faster.

Live

GET /api/pairs
Every matched event with outcomes, both venues' bid/ask/mid, gap (Kalshi − Polymarket), fee-adjusted cross-venue edge, flags (thin, lopsided, liveOrPast), 24h volume, deep links, and a short gap trend. Supports If-None-Match with the returned ETag.
{ "updatedAt": "…", "count": 330, "pairs": [ { "id": "nfl:KXNFLGAME-26SEP09NESEA", "kind": "game", "league": "nfl",
  "title": "Patriots vs. Seahawks", "start": 1789000000000, "gap": 0.02, "arb": { "net": -0.021, "fees": 0.0175, "desc": "…" },
  "thin": false, "lopsided": false, "liquidity": 12345, "focusIdx": 1, "trend": [0.01, 0.015, 0.02],
  "outcomes": [ { "name": "Seahawks", "kalshi": { "bid": 0.62, "ask": 0.63, "mid": 0.625 }, "poly": { "bid": 0.6, "ask": 0.61, "mid": 0.605 }, "gap": 0.02 } ],
  "kalshi": { "url": "…", "vol24": 39850 }, "poly": { "url": "…", "vol24": 1620 } } ] }
GET /api/health
Venue reachability and latency, last refresh, process stats.
GET /api/scoreboard
Settlement scoreboard: on settled games, which venue's closing price was closer, Brier scores per venue and per league.

History

GET /api/history?id=<pair id>&days=3
Snapshots (every 10 minutes) of both venues' bid/ask per outcome for one event, up to 7 days.
GET /api/days · GET /api/export?day=YYYY-MM-DD&format=csv|jsonl
Whole-day dumps for analysis. CSV is one row per outcome snapshot.

Pages and feeds

/c/<category> · /reports/<date> · /feed.xml · /embed.js
Server-rendered category tables, the daily report archive, an RSS feed of daily reports, and an embeddable widget: <script src="/embed.js" data-league="nfl" data-n="6"></script>.

Method and terms

Games are matched by league, team codes and date, then each Kalshi team market is aligned to the Polymarket moneyline outcome. Multi-outcome events are matched by outcome name. Polymarket prices come from its live order book, Kalshi from its public API. Gap is Kalshi mid minus Polymarket mid. Edge is $1 minus the two asks minus taker fees (Kalshi ⌈0.07·P·(1−P)⌉, Polymarket 0.05·P·(1−P) on sports). Data is provided as-is, free for any use with attribution; nothing here is advice and nothing here places orders.