Pinnacle Odds Scraper avatar

Pinnacle Odds Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Pinnacle Odds Scraper

Pinnacle Odds Scraper

Scrape Pinnacle betting odds, live and pre-match sports odds for soccer, tennis, basketball, football and more. Extract 1X2 moneyline, Asian handicaps, spreads, over/under totals and team totals with American and decimal prices for odds comparison, arbitrage and analysis.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

MrDoe

MrDoe

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Pinnacle Odds Scraper hero

What does Pinnacle Odds Scraper do?

Pinnacle Odds Scraper collects betting odds from Pinnacle and returns them as clean, ready-to-use data — one row per match. Pick a sport (or paste a league ID or a match URL), press Start, and download a dataset with the two teams, league, start time, live status, and prices for every main market: moneyline (1X2), spread / Asian handicap, totals (over/under) and team totals, for the full match and the first half. Every price comes in both American and decimal formats, and a full markets array keeps every alternate handicap and total line.

Use it for odds comparison, closing-line value analysis, model back-testing, arbitrage screening, and trading dashboards. Pinnacle's low margins and high limits make its price the reference line the rest of the market follows.

Why use Pinnacle Odds Scraper?

  • Sharp reference odds – Pinnacle is the market benchmark; its line is what serious models compare against.
  • Prices you can use immediatelyodds.moneyline.match.home, odds.total.match.over, odds.spread.match.handicap. No decoding.
  • American and decimal – both formats on every price, so no conversion downstream.
  • Pre-match and live – switch between the pre-match board and the in-play feed, or take both.
  • Whole leagues in one run – point it at a league and it walks every fixture.
  • Every line kept – alternate handicaps and totals are all in the markets array, not just the main line.
  • Clean, normalised output – odds as numbers, ISO start times, deduplicated by match.

What makes this different?

Most Pinnacle data online is either stale or the raw, deeply nested market feed. This Actor flattens it: the main markets come out as named fields (moneyline, spread, total, teamTotal) split by period, with the main line already picked and both odds formats attached — while the complete alternate-line detail stays available in markets. It also filters out the derived corner / card / booking prop markets that share the same shape, so a row is just the match itself.

What data can you extract?

Pinnacle Odds Scraper dataset output

Pinnacle Odds Scraper data fields

FieldDescription
matchIdPinnacle matchup ID
urlMatch page URL on pinnacle.com
bookmakerAlways Pinnacle
sport / sportIdSport
league / leagueIdCompetition
countryRegion / grouping the league sits under
home / awayTeam or player names
rotationNumberPinnacle rotation number for the match
startTimeScheduled start (ISO 8601)
status / isLiveprematch or live
periodsOfferedWhich periods have markets (full match, first half...)
oddsTidy main markets — see below
marketsEvery named line, including alternates
totalMarketsNumber of market lines in the row
scrapedAtISO timestamp of collection

The odds object:

{
"moneyline": {
"match": { "home": 1.18, "away": 13.46, "draw": 8.25 },
"firstHalf": { "home": 1.34, "away": 8.5, "draw": 4.9 }
},
"spread": {
"match": { "handicap": -1.75, "home": 1.93, "away": 1.92 },
"firstHalf": { "handicap": -0.75, "home": 1.9, "away": 1.9 }
},
"total": {
"match": { "points": 3.25, "over": 1.96, "under": 1.9 },
"firstHalf": { "points": 1.25, "over": 1.85, "under": 1.98 }
},
"teamTotal": {
"match": { "points": 2.25, "home_over": 1.9, "home_under": 1.9, "away_over": 2.1, "away_under": 1.75 }
}
}

How to use Pinnacle Odds Scraper

How Pinnacle Odds Scraper works

  1. Open the Actor.
  2. Choose a Feed (pre-match / live / both) and one or more Sports. That is enough to run.
  3. Optional — for specific competitions, add League IDs (for example 1980 for England - Premier League).
  4. Optional — for one match, paste its Match URL from pinnacle.com.
  5. Set Max matches and press Start.
  6. Download the dataset as JSON, CSV, Excel, or XML, or use the API.

Input Parameters

ParameterTypeRequiredDefaultDescription
modeStringNoprematchprematch, live (in-play), or both.
sportsArrayNo["Soccer"]Sport names (Soccer, Tennis, Basketball, American Football, Baseball, Hockey, Esports, MMA...) or numeric IDs. ["all"] for every sport. Leave empty to use only league IDs / match URLs.
leagueIdsArrayNoPinnacle numeric league IDs.
matchUrlsArrayNopinnacle.com match page URLs.
maxMatchesIntegerNo5Maximum matches per sport, league, or run. Raise for a full export (the form prefills 50).
includeMarketsBooleanNotrueKeep the full markets array (alternate lines included) next to the tidy odds object.
useCacheBooleanNofalseReuse match records from an earlier run.
proxyConfigurationObjectNoNo proxyPinnacle odds are reachable without a proxy from most regions; enable one only if runs start failing.

Output Data

{
"matchId": 1634530078,
"url": "https://www.pinnacle.com/en/soccer/england-premier-league/manchester-city-vs-coventry-city/1634530078/",
"bookmaker": "Pinnacle",
"sport": "Soccer",
"sportId": 29,
"league": "England - Premier League",
"leagueId": 1980,
"country": "England",
"home": "Manchester City",
"away": "Coventry City",
"rotationNumber": 12345,
"startTime": "2026-09-05T14:00:00.000Z",
"status": "prematch",
"isLive": false,
"totalMarkets": 35,
"odds": {
"moneyline": { "match": { "home": 1.18, "away": 13.46, "draw": 8.25 } },
"spread": { "match": { "handicap": -1.75, "home": 1.93, "away": 1.92 } },
"total": { "match": { "points": 3.25, "over": 1.96, "under": 1.9 } }
},
"markets": [
{
"market": "moneyline",
"period": "match",
"isAlternate": false,
"status": "open",
"maxStake": 1200,
"prices": [
{ "selection": "home", "points": null, "priceAmerican": -565, "priceDecimal": 1.18 },
{ "selection": "away", "points": null, "priceAmerican": 1146, "priceDecimal": 13.46 },
{ "selection": "draw", "points": null, "priceAmerican": 725, "priceDecimal": 8.25 }
]
}
],
"scrapedAt": "2026-09-05T09:00:00.000Z"
}

Usage Examples

Today's soccer prices

  • mode: prematch, sports: ["Soccer"], maxMatches: 200

Live in-play odds across sports

  • mode: live, sports: ["Soccer", "Tennis", "Basketball"]

One competition

  • sports: [], leagueIds: ["1980"]

One match, every line

  • sports: [], matchUrls: a pinnacle.com match URL

Tips for Best Results

  • Pinnacle returns its full board per sport in one pass; raise maxMatches for a complete export.
  • For closing-line value work, schedule the Actor near kick-off and again earlier, then diff the odds.
  • American and decimal are both provided — pick whichever your model uses; convert to fractional downstream if needed.
  • leagueIds are stable; find one by opening a competition on pinnacle.com and noting the number in its page URL.

Known Limitations

  • Odds move constantly; a row is a snapshot at collection time.
  • Live markets are suspended around goals and other in-play events, so some prices can briefly be missing.
  • Corner, card, booking and player-prop markets are out of scope — the row covers the match markets (moneyline, spread, total, team total) for the full match and first half.
  • Pinnacle does not operate in every country; availability of the odds feed can vary by region.
  • Some lower-tier competitions carry only moneyline, with no spread or total.

Integrations

Connect results to Google Sheets, Make, Zapier, Slack, or your own systems via the Apify API and webhooks. Schedule runs to build an odds history.

Export Formats

JSON, CSV, Excel, and XML from the Dataset tab or the Apify API.

Frequently Asked Questions

How many matches can I collect?

maxMatches applies per sport and per league. Raise it for a full export; Pinnacle's whole board for a sport is usually a few hundred matches.

Can I target a specific competition or match?

Yes. Add Pinnacle League IDs for competitions, or paste Match URLs for individual matches. Set sports to empty if you want only those.

Why are some odds fields null or missing?

Not every match offers every market — lower-tier competitions may have moneyline only. Live markets can also be suspended momentarily around in-play events.

Does it cover live betting?

Yes. Set mode to live (or both). Live rows are marked isLive: true.

How are duplicates handled?

Matches are deduplicated by Pinnacle matchup ID within a run.

How fresh is the data?

Every run reads the live odds feed. Schedule the Actor to keep an odds history.

Does the cache affect repeated runs?

With Use cache on, a match already collected in an earlier run is reused instead of being requested again, which speeds up recurring runs but can return an older price. Leave it off when you need the current line.

Support

Found a problem or want another market added? Open an issue on the Actor's Issues tab in the Apify Console.

You are responsible for how you use this Actor and the data it collects, including compliance with Pinnacle's Terms of Service and the gambling and data-protection laws that apply to you. This Actor collects publicly displayed betting odds for analysis; it does not place bets or access any account. Gambling is age-restricted and regulated, and Pinnacle is not licensed in every country — check your local rules before using odds data commercially. If you or someone you know has a gambling problem, seek support from a service such as BeGambleAware.

Preview

Pinnacle Odds Scraper input options