Polymarket Sports Odds Scanner & Divergence Finder
Pricing
from $1.00 / 1,000 market rows
Polymarket Sports Odds Scanner & Divergence Finder
Scan live Polymarket sports markets across 13 sports, or surface sharp-line divergence vs Pinnacle and other books using your own The Odds API key (free tier works): edge percent, direction, quarter-Kelly sizing. Scan mode needs no key. From $1 per 1,000 markets.
Pricing
from $1.00 / 1,000 market rows
Rating
0.0
(0)
Developer
Jack Sheward
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Polymarket Sports Odds Scanner & Divergence Finder
Pull live Polymarket sports odds — every active sports market (soccer, NBA, NFL, MLB, NHL, UFC, tennis, cricket, esports and more) — as clean JSON records, then optionally surface divergence between Polymarket prices and sharp sportsbook lines (Pinnacle by default) using your own The Odds API key: no-vig fair probability, edge in percentage points, buy direction, and quarter-Kelly stake sizing per signal.
Polymarket data comes straight from the public, unauthenticated Gamma API — no login, no scraping. Sportsbook lines come from The Odds API with a buyer-supplied key (the free tier — 500 credits/month — covers daily runs; this actor spends at most 1 credit per active sport league per run, never per market).
What you get
scan mode — one market record per Polymarket sports market
| Field | Example | Notes |
|---|---|---|
record_type | market | |
market_id | 1356224 | Gamma market id |
condition_id | 0xace48… | on-chain condition id |
title | Will Houston Dynamo win on 2026-03-07? | market question |
sport | soccer | canonical sport from the built-in classifier (null if unclassifiable) |
teams | ["New England Revolution", "Houston Dynamo"] | best-effort, in title order (not home/away); null for outrights/props |
event_date | 2026-08-08T20:30:00Z | game start when known, else market end date |
yes_price | 0.28 | price of outcome 0 (USD, 0–1) |
no_price | 0.72 | price of outcome 1 |
outcome_labels | ["Yes", "No"] | may also be team names on some markets |
volume | 27480.27 | USD total traded |
liquidity | 2894.87 | USD posted liquidity |
outcome_token_ids | ["854285…", "637307…"] | CLOB token ids, index-aligned with outcome_labels |
url | https://polymarket.com/event/mls-ner-hou-2026-03-07 | event page |
Example market record (key fields):
{"record_type": "market","market_id": "1356224","title": "Will Houston Dynamo win on 2026-03-07?","sport": "soccer","teams": ["New England Revolution", "Houston Dynamo"],"event_date": "2026-08-08T20:30:00Z","yes_price": 0.28,"no_price": 0.72,"volume": 27480.27,"url": "https://polymarket.com/event/mls-ner-hou-2026-03-07"}
divergence mode — everything above plus one signal record per matched market × book with edge ≥ minEdgePct
Signal records repeat all market fields and add:
| Field | Example | Notes |
|---|---|---|
record_type | signal | |
book | pinnacle | bookmaker key |
book_odds_decimal | 3.40 | the book's decimal odds for the YES side's outcome |
implied_prob_novig | 0.2846 | fair probability after removing the book's vig |
polymarket_prob | 0.445 | Polymarket YES price — for buy_no signals the actionable price is no_price (same record) |
edge_pct | 16.04 | fair prob of the recommended side minus its Polymarket price, ×100 |
direction | buy_no | buy_yes or buy_no |
kelly_fraction_25 | 0.0901 | quarter-Kelly fraction of bankroll for that side |
match_confidence | high | high (exact team match) or medium (conservative fuzzy match) |
matched_event | New England Revolution vs Houston Dynamo | the sportsbook event it matched |
commence_time | 2026-08-08T20:30:00Z | game start per the book |
Example signal record:
{"record_type": "signal","market_id": "1356220","condition_id": "0xd1e93b3af50b6218aaf8ac710eef6dce437a93aad52cedacfbc0a45f36b5d7cd","title": "Will New England Revolution vs. Houston Dynamo end in a draw?","sport": "soccer","teams": ["New England Revolution", "Houston Dynamo"],"event_date": "2026-08-08T20:30:00Z","yes_price": 0.445,"no_price": 0.555,"outcome_labels": ["Yes", "No"],"volume": 31897.01,"liquidity": 2616.91,"outcome_token_ids": ["79383150873788993025…", "27555650786861172807…"],"url": "https://polymarket.com/event/mls-ner-hou-2026-03-07","book": "pinnacle","book_odds_decimal": 3.40,"implied_prob_novig": 0.2846,"polymarket_prob": 0.445,"edge_pct": 16.04,"direction": "buy_no","kelly_fraction_25": 0.0901,"match_confidence": "high","matched_event": "New England Revolution vs Houston Dynamo","commence_time": "2026-08-08T20:30:00Z"}
Export as JSON, CSV, or Excel directly from the dataset.
Input
Default (scan, all sports, 200 markets — fast):
{"mode": "scan","sports": ["all"],"maxMarkets": 200}
Divergence example (bring your own The Odds API key):
{"mode": "divergence","sports": ["soccer", "mlb", "nba"],"minVolume": 10000,"maxMarkets": 500,"oddsApiKey": "YOUR-ODDS-API-KEY","books": ["pinnacle"],"minEdgePct": 3}
mode—scan(Polymarket markets only) ordivergence(scan + sportsbook comparison).sports— canonical names (nba,wnba,nfl,mlb,nhl,ufc,soccer,tennis,cricket,f1,golf,boxing,esports) or"all".minVolume/minLiquidity— USD floors; 0 disables.maxMarkets— 1–2000 cap on market records.oddsApiKey— your The Odds API key; required only for divergence mode. Used solely for this run's requests — never stored, never logged. Missing key = warning + scan output.books— The Odds API bookmaker keys (default["pinnacle"], the sharp baseline).minEdgePct— signal floor in percentage points (default 3).regions— The Odds API regions (us,eudefault); only used whenbooksis empty.
How divergence detection works
- Scan active Polymarket sports markets (Gamma API, stale and non-trading markets filtered out at the market level).
- Classify each market's sport (Gamma tags first, then a two-pass keyword/team-name classifier carried over from a production sports trading system).
- Match conservatively: only game-level moneyline markets with two parsed team names; team names are normalized (case, accents, punctuation, common aliases like "Man City") and both home/away orientations are checked; game time must agree within 12 hours. Anything below medium confidence is dropped, not guessed.
- De-vig the book's h2h line: implied probabilities
1/oddsare normalized over all outcomes (including Draw for soccer), sop(team)is the true win probability with draws counting against — exactly the YES side of Polymarket's "Will X win?" game markets. - Score:
edge_pct = (fair probability of side − Polymarket price of side) × 100; the better ofbuy_yes/buy_nois emitted when it clearsminEdgePct, with quarter-Kelly sizing0.25 × (p − price) / (1 − price).
Pricing
Pay per result — no subscription:
- $0.005 per run (
actor-start) - $0.001 per market record (
market-row) - $0.02 per divergence signal (
divergence-signal)
A default scan run (200 markets) costs $0.205. A divergence run with 200 markets and 10 signals costs $0.405 — plus your own (free-tier) Odds API credits, typically 1–8 per run.
FAQ
How do I find arbitrage between Polymarket and sportsbooks?
Run divergence mode with your The Odds API key. Each signal tells you which side of the Polymarket market is cheap relative to the sharp no-vig line (direction), by how much (edge_pct), and a conservative stake size (kelly_fraction_25). True risk-free arbitrage additionally requires hedging the other side at the book — these signals are value signals against the sharp line.
What is no-vig (fair) probability?
Bookmaker odds embed a margin (vig): implied probabilities sum to more than 1. Dividing each implied probability by that sum removes the margin. Pinnacle's no-vig line is a widely used proxy for true probability.
Do I need an API key?
Not for scan mode — Polymarket's Gamma API is public. For divergence mode you supply your own The Odds API key; the free tier (500 credits/month) is plenty because this actor spends at most one credit per active sport league per run (Pinnacle-only counts as a single region).
How are Polymarket markets matched to sportsbook games?
By normalized team names (both orientations — Polymarket titles don't guarantee home team first) plus a ±12 h game-time window. Exact name matches are high confidence; token-subset/nickname matches are medium. Anything weaker is dropped rather than guessed.
How does it handle soccer's three-way (draw) odds?
The fair probability is computed over all three outcomes, so a team's implied_prob_novig already counts draws against it — directly comparable to Polymarket's binary "Will X win?" markets. Draw markets themselves match the book's Draw outcome. Double-chance or "to advance/qualify" markets are excluded from matching entirely.
Which sports are supported?
Scan: everything under Polymarket's Sports tag. Divergence: nba, wnba, nfl, mlb, nhl, ufc, boxing, soccer (top leagues + World Cup), tennis and cricket — golf, F1 and esports have no usable h2h coverage on The Odds API.
Is my Odds API key stored anywhere?
No. It is used for this run's HTTP requests only — never written to the dataset, key-value store, or logs (HTTP client URL logging is explicitly disabled, and error messages are scrubbed).
Is this financial advice?
No. It is market data plus arithmetic. Prediction markets and sports betting carry real risk; sizing outputs are informational.
Limitations
- Matching is conservative by design — markets that can't be matched at medium-or-better confidence produce no signal at all. Expect coverage, not completeness.
- Gamma prices can lag the live order book (responses are CDN-cached up to 5 minutes, and
yes_priceis the Gamma outcome price, not CLOB top-of-book). Always verify the live book before trading;outcome_token_idsare included so you can query the CLOB directly. - Divergence covers game-level moneyline markets only — no totals, spreads, props, or outright/futures markets.
liquidityis total deposited liquidity, not depth at the current price — don't size positions off it.- The Odds API stops listing games near/after start; Polymarket may still show them. Postponed games can mismatch on date.
event_datefalls back to the market end date when Gamma omitsgameStartTime; rescheduled games can then fall outside the ±12 h match window — missed signals, never false matches.- When Gamma tags are generic,
sportcomes from a text classifier; rare cross-sport team-name clashes (e.g. an NHL "Kings vs Oilers" title without league tags classifies asnba) can make asportsfilter miss a market. - The buyer's The Odds API key is required for divergence mode; without it the run still succeeds and ships scan records.
- Not financial advice.
Use with AI agents (MCP)
Connect your agent to the Apify MCP server (mcp.apify.com) and it can call this actor as a tool: ask for "scan Polymarket soccer markets over $10k volume" or "find divergence vs Pinnacle above 5% in MLB" and the agent fills the input schema (mode, sports, minVolume, minEdgePct) itself. Pair the scan output with the CLOB token ids for execution research.
More prediction-market data actors
- Kalshi Weather Markets Data — KXHIGH & KXLOW - live brackets and settlement history for Kalshi temperature markets.
- METAR & NWS Weather Station Observations API - the raw station observations weather markets settle on.
- Prediction Market Resolution Evidence Checker - paste a market URL, get the live observation that resolves it, graded.