Polymarket vs Kalshi API: Matched Markets, Gaps & Sports
Pricing
from $2.10 / 1,000 results
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
Maintained by CommunityActor 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.
/alertsreturns gaps that just opened, newest first. Poll it from a bot, a sheet or a Discord webhook. - Every market in one format.
/marketslists every open market on both platforms with prices, volume and closing dates. - History.
/historyreturns 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_TOKENhttps://forgedata--prediction-markets-api.apify.actor/pairs?sports=only&league=nba&type=spreadhttps://forgedata--prediction-markets-api.apify.actor/alerts?minGap=3&hours=1https://forgedata--prediction-markets-api.apify.actor/markets?q=bitcoin&platform=kalshihttps://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
| Endpoint | What it returns | Main filters |
|---|---|---|
GET /pairs | Same market on both platforms, biggest gap first | q, category, sports (only, exclude), league (nba, nfl, nhl, cfb, cbb, epl...), type (moneyline, spread, total), minGap, minEdge, minVolume, tradedToday, tier, sort, limit, offset |
GET /alerts | Gaps that opened recently | minGap (default 3), hours (default 6, max 72), newPairs, plus the /pairs filters |
GET /markets | Every open market on both platforms | q, platform, category, minVolume, closesBefore, sort |
GET /history | Price history of one pair | pairId |
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.