Polymarket Sports Markets
Pricing
from $1.00 / 1,000 market records
Polymarket Sports Markets
Collect Polymarket sports markets with event context, outcome probabilities, liquidity, volume, and optional order books. One record per unique market with stable source identifiers and a versioned normalized envelope. Filter by event, tag, market type, and reported activity.
Pricing
from $1.00 / 1,000 market records
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Features
Share
Collect Polymarket sports markets with event context: the game or event, kickoff when reported, market type (moneyline, spreads, totals and more) and line, outcomes with their prices as probabilities, best bid and ask, liquidity, volume and optional order books, one record per unique market. Stable source identifiers and a versioned canonical envelope help you match markets across books. Built for traders, sports-data analysts and bot builders who schedule runs and pipe the JSON into dashboards, alerts or models. No Polymarket account or API key is needed.
Data only, not betting or financial advice.
Use cases
- Odds boards: every open NBA, NFL or soccer moneyline, spread and total with outcome probabilities, refreshed on a schedule.
- Line movement: store snapshots and chart how prices, liquidity and volume move toward kickoff.
- Cross-book comparison: join Polymarket markets with other prediction markets or sportsbooks on the
canonicalenvelope and event context. - Liquidity screens: keep only markets above a liquidity or volume floor for execution-aware research.
Quick start
- Open the Actor and click Start. The prefilled form collects up to 250 open sports moneylines, spreads and totals.
- Read the rows in the Output tab, or export them as JSON, CSV or Excel.
The prefilled input:
{"tagSlug":"sports","marketTypes":["moneyline","spreads","totals"],"maxResults":250,"includeOrderBooks":false}
The prefilled form also shows liquidityMin and volumeMin as 0, which means no bound: markets whose liquidity or volume is unknown are kept. A bound above 0 skips them.
An empty input ({}) keeps every market type, including futures and markets without a published type, up to 500 markets under the sports tag. A run returns up to maxResults, not necessarily the whole board. Open or active does not mean upcoming: older unresolved markets may still appear. Source tags and live flags are kept as reported; they are not independently verified game status.
Input
| Name | Type | Default | What it does |
|---|---|---|---|
eventSlugs | array | [] | Collects up to 50 selected events. Bypasses discovery tag and date bounds; other filters still apply. |
tagSlug | string | sports | Selects the discovery tag, for example nba. |
marketTypes | array | [] | Exact case-insensitive sportsMarketType values, such as moneyline, spreads, totals, or first_half_totals. Empty keeps every type. |
activeOnly | boolean | true | Excludes explicitly inactive events and markets. |
openOnly | boolean | true | Excludes closed events and markets. false includes both open and closed records. |
liveOnly | boolean | false | Keeps events explicitly marked live by the source. |
startDateMin / startDateMax | string | unset | Inclusive discovery bounds on listing time (eventListingTime), not game kickoff. ISO-8601; naive times mean UTC. Ignored for exact event slugs. |
liquidityMin / volumeMin | number | unset (form prefill 0) | Minimum reported market liquidity / lifetime volume. 0 or unset means no bound. A bound above 0 also excludes markets whose value is unknown. |
pageSize | integer | 100 | Events requested per page, from 1 to 500; each event may contain many markets. |
maxResults | integer | 500 | Maximum unique market records, from 1 to 5,000, across all events. |
includeOrderBooks | boolean | false | Adds order books for the market's outcome tokens. |
orderBookConcurrency | integer | 4 | Concurrent book requests, from 1 to 16; the request delay still applies. |
includeRaw | boolean | false | Retains original event and market objects. This can substantially enlarge each row. |
requestDelaySecs | number | 0.1 | Pause between page, event, or book requests, from 0 to 10 seconds. |
Unknown input fields, invalid types, non-finite numbers, reversed date ranges, and out-of-range limits fail validation. Very restrictive filters may require scanning many event pages before enough markets match.
Output
Each dataset row represents one unique market. Identity uses conditionId when available; recordKey includes the polymarket: prefix. Rows include event details, sportsMarketType, line, outcomes (names), parallel outcomePrices (probabilities, not decimal odds), token IDs, liquidity, volume, quotes, and a versioned canonical envelope. Unpublished values remain null or empty lists; no kickoff, market type, or probability is invented.
eventStartTime is the reported kickoff when present; eventListingTime is when the event was listed. canonical retains conservative market/participant evidence: ambiguous or unsupported interpretations remain unknown or quarantined rather than being forced into a match.
orderBooks is null when disabled. When enabled it follows clobTokenIds order; each successful book contains bids, asks, timestamps, and reported trading increments. A failed token has a tokenId and sanitized error, while its market is retained. raw is null unless enabled.
The separate OUTPUT summary reports written records, event counts, coverage counters, warnings, and succeeded, succeeded_empty, succeeded_partial, or failed. Collection or validation failures publish no buffered markets. Book failures preserve markets and report a partial result. A dataset charge limit can also produce a partial result, including zero written records; this is not reported as a genuine empty query. Coverage counters describe every market considered during collection, not necessarily the rows ultimately written.
Output example
Selected fields of a real record captured on 2026-10-16 (prices are historical, not current quotes):
{"recordKey": "polymarket:0xe0f7727d3f05d038618bc44f8cc2e14cefa02016b53805028e82070eb5c84a67","eventSlug": "nba-mia-orl-2026-10-16","question": "Heat vs. Magic","sportsMarketType": "moneyline","line": null,"outcomes": ["Heat", "Magic"],"outcomePrices": [0.415, 0.585],"liquidity": 51561.2906}
Pricing
Current price: $0.001 per market record plus a $0.00005 start fee, so 1,000 markets cost about $1.00.
Pay per result: each market record is one result, plus a small run-start charge. See the Actor's Pricing tab on Apify for current rates. Use maxResults, marketTypes and tagSlug to keep runs small.
Scheduling and monitoring
- Schedule a league-scoped run (for example
tagSlug: "nba", every 15 minutes on game days) and key your history onrecordKeypluscollectedAtto track price movement. recordKeyis stable per market (polymarket:plus the condition ID when available), so it is safe to de-duplicate on.
FAQ
What sports can I collect? Use the default sports tag, another supported source tag, or exact event slugs. Market availability and published metadata vary by sport.
Are all markets moneylines, spreads, or totals? No. Keep marketTypes empty for all source types; use explicit values to restrict the result. Unknown source types are preserved, not guessed.
Is this a trading service? No. It collects snapshots; it does not place trades or guarantee game status, executable prices, settlement equivalence, or cross-book matches.
What are the limits? Up to 5,000 unique markets per run (maxResults) and up to 50 exact event slugs. Turning on order books makes runs slower.
How fresh is the data? Each run reads the live board at run time; nothing is cached between runs.
Export formats? JSON, CSV, Excel, XML or RSS from the dataset, or read it through the Apify API in your own pipeline.
Limits
- Public market data only; no trading, order placement or account data.
startDateMin/startDateMaxfilter on listing time, not kickoff.- No price history; build history by scheduling runs.
For support, contact Apify support and include the Actor run ID.