Polymarket vs Kalshi API: Matched Markets, Gaps & Sports avatar

Polymarket vs Kalshi API: Matched Markets, Gaps & Sports

Pricing

from $2.10 / 1,000 results

Go to Apify Store
Polymarket vs Kalshi API: Matched Markets, Gaps & Sports

Polymarket vs Kalshi API: Matched Markets, Gaps & Sports

The same prediction market on Polymarket and Kalshi, matched and verified, with both prices, the gap and alerts when a gap opens. Elections, economics, crypto and sports: winner, spread and total lines in 100+ leagues. Instant API. $3 per 1,000 rows.

Pricing

from $2.10 / 1,000 results

Rating

0.0

(0)

Developer

Data Forge

Data Forge

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 hours ago

Last modified

Categories

Share

Polymarket vs Kalshi API: matched markets, gaps, sports and alerts

The same prediction market on Polymarket and Kalshi, matched and verified, with both prices, the gap between them and alerts when a gap opens. Covers elections, politics, economics, crypto and sports: game winners, spreads and totals across 100+ leagues.

What you get

  • Matched pairs. The same question on both platforms, checked so the names, numbers, thresholds, teams and deadlines agree. Each pair has both Yes prices, the gap in cents, the pre-fee edge from buying Yes on one side and No on the other, volume on both sides and links to both markets.
  • Sports, line by line. Around 1,300 games at a time (NFL, NBA, NHL, college football and basketball, MLS, Premier League, La Liga, Serie A, Champions League, esports and more). Game winner, spread and total markets are paired line by line, so "Raptors -3.5" on Polymarket meets "Toronto wins by over 3.5 points" on Kalshi.
  • Alerts. /alerts returns gaps that just opened, newest first. Poll it from a bot, a sheet or a Discord webhook.
  • Every market in one format. /markets lists every open market on both platforms with prices, volume and closing dates.
  • History. /history returns 30 days of prices for any pair.

Gaps are only reported when both platforms show a live two-sided quote, so empty order books do not show up as fake opportunities.

How to use it

As an API (Standby mode). Call the Actor's URL with your Apify token:

https://forgedata--prediction-markets-api.apify.actor/pairs?minGap=3&tradedToday=true&token=YOUR_APIFY_TOKEN
https://forgedata--prediction-markets-api.apify.actor/pairs?sports=only&league=nba&type=spread
https://forgedata--prediction-markets-api.apify.actor/alerts?minGap=3&hours=1
https://forgedata--prediction-markets-api.apify.actor/markets?q=bitcoin&platform=kalshi
https://forgedata--prediction-markets-api.apify.actor/history?pairId=PAIR_ID

As a normal run. Pick "Matched pairs", "Alerts" or "All markets" in the input, set filters, and get the rows in the dataset (JSON, CSV or Excel).

Endpoints and filters

EndpointWhat it returnsMain filters
GET /pairsSame market on both platforms, biggest gap firstq, category, sports (only, exclude), league (nba, nfl, nhl, cfb, cbb, epl...), type (moneyline, spread, total), minGap, minEdge, minVolume, tradedToday, tier, sort, limit, offset
GET /alertsGaps that opened recentlyminGap (default 3), hours (default 6, max 72), newPairs, plus the /pairs filters
GET /marketsEvery open market on both platformsq, platform, category, minVolume, closesBefore, sort
GET /historyPrice history of one pairpairId

Example pair

{
"id": "6392155-o0~KXNBASPREAD-26OCT30CHAWAS-WAS6",
"title": "Hornets vs. Wizards: spread",
"outcome": "Wizards (-5.5)",
"category": "Sports",
"gapPoints": 0.0,
"edgePointsPreFee": 0,
"game": { "league": "NBA", "date": "2026-10-30", "type": "spread", "line": -5.5 },
"polymarket": { "yesPrice": 0.345, "yesBid": 0.33, "yesAsk": 0.36, "url": "https://polymarket.com/event/nba-cha-was-2026-10-30" },
"kalshi": { "ticker": "KXNBASPREAD-26OCT30CHAWAS-WAS6", "question": "Charlotte vs Washington: Washington wins by over 5.5 points", "yesPrice": 0.345 }
}

How matching works

Political, economic and other questions are matched on their wording with strict checks: numbers, years and dates must agree, words like "not", "before", "relegated" or a party name must appear on both sides, every named person or place must appear on both sides, and outcome labels must line up. Sports games are matched by league, date and both teams, then each winner, spread and total line is paired with the exact same line on the other platform. Pairs that are close but fail a check are kept as candidate with the reason in notes.

Freshness

The database refreshes every hour. Each response includes databaseUpdatedAt.

Notes

Data comes from the public market data both platforms publish. Not affiliated with Polymarket or Kalshi. Resolution rules can differ in the details between platforms, so read both before trading. Information only, not financial advice.