Pinnacle Odds Scraper
Pricing
from $2.50 / 1,000 results
Pinnacle Odds Scraper
Extracts pre-match and live betting odds from Pinnacle: teams, league, start time, and moneyline, spread, total and team-total prices in both American and decimal formats.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
MrDoe
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share

What does Pinnacle Odds Scraper do?
Pinnacle Odds Scraper collects betting odds from Pinnacle and returns one clean row per match: the two teams, competition, start time, live status and decimal prices for the main markets (moneyline, spread, total and team-total). Choose sports, leagues or single matches, switch between pre-match and live, and export the result as JSON, CSV or Excel or call it from the API. Use it for odds comparison, line movement tracking, value-bet and arbitrage screening and model back-testing.
Why use Pinnacle Odds Scraper?
- Odds ready to use: named markets, no decoding.
- Pre-match and live in one Actor.
- Whole sports or leagues in one run.
- Clean, deduplicated rows with ISO times.
- Plugs into the odds comparison and value-bet Actors.
What makes this different
Pinnacle is the sharpest bookmaker in the world, so its prices are the standard fair line for value-bet and closing-line work. This Actor returns its prices as flat rows with the main markets already named, so comparing Pinnacle against other bookmakers, or against your own model, needs no extra parsing.
How it works

- Your input — choose the sports, leagues or matches.
- The Actor collects it — the Actor reads the current Pinnacle board.
- Your output — you get one row per match with the odds attached.
What data can you extract?
The dataset has 19 fields per row:
| Field | Type | Description |
|---|---|---|
matchId | integer | Bookmaker event ID. |
url | string | Match page URL. |
bookmaker | string | Always Pinnacle. |
sport | string | Sport. |
sportId | integer | Sport ID. |
league | string | Competition. |
leagueId | integer | Competition ID. |
country | string | Country of the competition. |
home | string | Home team or player. |
away | string | Away team or player. |
rotationNumber | integer | Rotation number. |
startTime | string | Start time (ISO 8601). |
status | string | Match status: scheduled or live. |
isLive | boolean | True while the match is in play. |
periodsOffered | array | Periods offered. |
totalMarkets | integer | Number of markets on the match. |
odds | object | Ready-to-use main markets with decimal prices. |
markets | array | Every priced market for the match. |
scrapedAt | string | ISO timestamp of collection. |
How to use Pinnacle Odds Scraper

- Open the Actor and go to the Input tab.
- Choose a Feed and one or more Sports, set Max matches (0 for everything) and press Start. Optionally target a league name such as Premier League.
- Optionally set filters and a Max results limit.
- Click Start. A default run finishes in under a minute.
- Open the Output tab, then download the dataset or connect it to your tools.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
mode | string | No | "prematch" | Which odds to collect: pre-match, live (in-play), or both. |
sports | array | No | [] | Sports to collect, by name ("Soccer", "Tennis", "Basketball", "American Football", "Baseball", "Hockey", "Esports", "MMA", ...) or numeric Pinnacle sport ID. Use ["all"] for every sport that currently has fixtures. Leave empty when you only want the League IDs or Match URLs below. |
leagueIds | array | No | [] | Optional. Pinnacle numeric league IDs to target specific competitions (for example 1980 for England - Premier League). Collected in addition to the sports above. |
matchUrls | array | No | [] | Optional. Paste individual Pinnacle match page URLs, for example https://www.pinnacle.com/en/soccer/england-premier-league/manchester-city-vs-coventry-city/1634530078/ . Each returns every market for that match. |
maxMatches | integer | No | 5 | Maximum number of matches to collect per sport, league, or run. Default is 5 for a quick test; set 0 to return everything available. |
includeMarkets | boolean | No | true | Add a markets array with every line (including alternate handicaps and totals) on top of the tidy odds object. Turn off for smaller rows. |
useCache | boolean | No | false | Reuse match records collected in an earlier run. Disabled by default so every run returns live odds. |
proxyConfiguration | object | No | {"useApifyProxy":false} | Optional. Pinnacle odds are reachable without a proxy from most regions. Enable a proxy only if runs start failing in your location. |
Output Data

odds holds the main markets as decimal prices, status and isLive show whether the match is in play, and the full selection list is kept alongside for less common markets.

A real dataset item:
{"matchId": 1636713986,"url": "https://www.pinnacle.com/en/soccer/scotland-challenge-cup/east-kilbride-vs-celtic-ii/1636713986/","bookmaker": "Pinnacle","sport": "Soccer","sportId": 29,"league": "Scotland - Challenge Cup","leagueId": 2420,"country": "Scotland","home": "East Kilbride","away": "Celtic II","rotationNumber": 25750,"startTime": "2026-09-22T18:45:00.000Z","status": "prematch","isLive": false,"periodsOffered": ["match","firstHalf"],"totalMarkets": 28,"odds": {"moneyline": {"match": {"home": 1.228,"away": 7.24,"draw": 5.35}},"teamTotal": {"match": {"points": 0.5,"home_over": 1.68,"home_under": 2.02,"away_over": 1.538,"away_under": 2.34},"firstHalf": {"points": 1.5,"home_over": 2.4,"home_under": 1.463}},"spread": {"match": {"handicap": -1.75,"home": 1.806,"away": 1.877},"firstHalf": {"handicap": -0.75,"home": 1.752,"away": 1.926}},"total": {"match": {"points": 3.5,"over": 1.775,"under": 1.909},"firstHalf": {"points": 1.5,"over": 1.84,"under": 1.826}}},"markets": [{"market": "moneyline","period": "match","side": null,"isAlternate": false,"status": "open","cutoff": "2026-09-22T18:45:00.000Z","maxStake": 100,"prices": [{"selection": "home","points": null,"priceAmerican": -438,"priceDecimal": 1.228},{"selection": "away","points": null,"priceAmerican": 624,"priceDecimal": 7.24},{"selection": "draw","points": null,"priceAmerican": 435,"priceDecimal": 5.35}]},{"market": "team_total","period": "match","side": "home","isAlternate": false,"status": "open","cutoff": "2026-09-22T18:45:00.000Z","maxStake": 100,"prices": [{"selection": "over","points": 2.5,"priceAmerican": -147,"priceDecimal": 1.68},{"selection": "under","points": 2.5,"priceAmerican": 102,"priceDecimal": 2.02}]},{"market": "team_total","period": "match","side": "away","isAlternate": false,"status": "open","cutoff": "2026-09-22T18:45:00.000Z","maxStake": 100,"prices": [{"selection": "over","points": 0.5,"priceAmerican": -186,"priceDecimal": 1.538},{"selection": "under","points": 0.5,"priceAmerican": 134,"priceDecimal": 2.34}]},{"market": "spread","period": "match","side": null,"isAlternate": false,"status": "open","cutoff": "2026-09-22T18:45:00.000Z","maxStake": 100,"prices": [{"selection": "home","points": -1.75,"priceAmerican": -124,"priceDecimal": 1.806},{"selection": "away","points": 1.75,"priceAmerican": -114,"priceDecimal": 1.877}]}],"scrapedAt": "2026-09-21T16:35:24.168Z"}
Usage Examples
Pinnacle Soccer Odds
{"sports": ["Soccer"],"maxMatches": 0}
Pinnacle Basketball Odds
{"sports": ["Basketball"],"maxMatches": 0}
Pinnacle Tennis Odds
{"sports": ["Tennis"],"maxMatches": 0}
Tips for Best Results
- Default is 5 results for a fast test. Set the max to 0 to return everything available.
Known Limitations
- Pinnacle availability depends on your region; the Actor uses the proxy configured in the input.
- Odds move constantly; a row is a snapshot at collection time.
- Live markets can be briefly suspended, leaving some prices missing.
- Only public odds are collected: no accounts, no bets.
Integrations
Run it from the Apify API, on a schedule, or from a webhook. Send results straight to Google Sheets, Make, Zapier, Slack or your own database with Apify's built-in integrations.
Export Formats
Download the dataset as JSON, CSV, Excel, XML, HTML table or RSS from the Output tab or the API.
Frequently Asked Questions
Does it need an account or API key?
No. The Actor reads public data and needs no account or key.
Am I charged for failed results?
No. You are only charged for results that are written to the dataset.
Do I need an account or login?
No. The Actor reads public data and needs no account or key.
Am I charged for failed runs or empty results?
You are only charged for results that are actually written to the dataset.
Can I run it on a schedule?
Yes. Create a Task with your input and add a schedule in Apify Console. With monitor mode on, each scheduled run returns only what changed since the previous one.
Support
Questions or a missing field? Open an issue from the Issues tab on this Actor's page and it will be looked at.
Legal / Responsible Use
You are responsible for how you use this data, including compliance with Pinnacle's terms and the gambling laws that apply to you. This Actor collects publicly displayed odds for analysis; it does not place bets or access any account. Gambling is age-restricted; if you or someone you know has a problem, seek support such as BeGambleAware or 1-800-GAMBLER.