Sports Betting Odds Scraper - Live Lines, Arbitrage & +EV
Pricing
from $8.00 / 1,000 game / event odds records
Sports Betting Odds Scraper - Live Lines, Arbitrage & +EV
Scrape live sports betting odds from FanDuel, Bovada & Pinnacle (sharp lines): moneyline, spread & totals for NFL, NBA, MLB, NHL, UFC, soccer & more. Best price per outcome, no-vig fair odds, arbitrage & +EV value detection, line-movement monitoring. No third-party API key. JSON, CSV, Excel.
Pricing
from $8.00 / 1,000 game / event odds records
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Sports Betting Odds Scraper — Live Lines, Best Price, Arbitrage & +EV
Pull live sports betting odds from FanDuel, Bovada and Pinnacle in one run — moneyline, spread/handicap and totals for NFL, NBA, MLB, NHL, WNBA, UFC/MMA, FIFA World Cup, soccer, tennis, golf and more. Every game comes back as one clean record with every book's price side by side, the best price per outcome (line shopping), no-vig fair odds, and automatic arbitrage and +EV value-bet detection.
No third-party odds API key. The actor reads each sportsbook's own JSON directly — fast, keyless, no browser. Add monitoring mode to capture only new games and line movement since your last run.
Why this sports odds scraper?
Most odds scrapers give you one book, or wrap a paid third-party odds API, and return raw prices with no analysis. This actor aggregates multiple books directly and ships the richest, most actionable odds dataset in the category:
| Feature | Typical scrapers | This actor |
|---|---|---|
| Books in a single run | 1 | ✅ FanDuel + Bovada + Pinnacle (sharp) |
| Needs a paid third-party odds API key | often | ✅ No — direct from each book |
| Best price per outcome (line shopping) | ❌ | ✅ |
| No-vig fair odds & implied probability | ❌ | ✅ per book + sharp/consensus |
| Arbitrage detection with stake split | ❌ | ✅ |
| +EV value bets vs the sharp line | ❌ | ✅ |
| Moneyline + spread + totals (full game) | partial | ✅ all three |
| 2-way and 3-way (soccer draw) markets | ❌ | ✅ |
| Live / in-play odds | ❌ | ✅ opt-in |
| Line-movement monitoring (only changes) | ❌ | ✅ |
| Output as rich per-game records or flat rows | ❌ | ✅ both |
Pinnacle is the book sharp bettors price off because it runs the lowest margin (often ~2% vs 4–5% at recreational books). This actor uses Pinnacle's no-vig line as the fair-value reference, so a FanDuel or Bovada price that beats it is flagged as +EV automatically.
Use cases
- Line shopping — always bet the best available number. Each outcome shows every book's price and which book has the best one.
- Arbitrage / sure bets — surface games where the best price on each side guarantees a profit, with the exact stake split per leg.
- +EV / value betting — find recreational-book prices that beat Pinnacle's sharp no-vig fair odds.
- Line-movement & steam tracking — schedule the actor with monitoring mode to capture only odds that moved, perfect for alerts.
- Models & backtesting — feed clean, normalized moneyline/spread/total data (American + decimal + implied probability) into your prediction or pricing models.
- Odds comparison sites, bots & dashboards — power a comparison widget, Discord/Telegram bot, or BI dashboard with structured multi-book odds.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Sports Betting Odds Scraper, pick your leagues, books and markets, and click Start.
- Watch games stream into the dataset table.
- Export as JSON, CSV, Excel, XML or RSS — or pull results via the Apify API.
Input
{"leagues": ["MLB", "WORLDCUP", "NBA", "UFC"],"books": ["pinnacle", "fanduel", "bovada"],"markets": ["moneyline", "spread", "total"],"outputMode": "events","includeLive": true,"onlyArbitrage": false,"maxEvents": 200}
- leagues — MLB, NBA, WNBA, NCAAB, NFL, NCAAF, NHL, UFC, FIFA World Cup, EPL, UCL, MLS, La Liga, ATP, WTA, PGA, Boxing. Out-of-season leagues simply return nothing.
- books —
pinnacle(sharp reference),fanduel,bovada. Use 2+ to unlock best price + arbitrage. - markets —
moneyline,spread(run line / puck line / handicap),total(over/under). - outputMode —
events(one rich record per game, default) orrows(one flat row per book × market × selection). - includeLive (default true) — include in-play games.
- includeAlternateLines (default false) — capture every alternate spread & total, not just the main line.
- onlyArbitrage / onlyValueBets — emit only games with an arbitrage or a +EV bet.
- minArbitrageProfit / minValueEdge — minimum % thresholds for those flags.
- monitorMode (default false) — emit only new games and moved lines since the last run (great with Schedules).
- maxEvents — cap on games per run.
- fanduelState — which state's FanDuel lines to read (default Virginia).
Output
Event mode — one rich record per game (type: "event"):
{"type": "event","eventKey": "MLB|2026-06-17|cincinnati reds-new york mets","sport": "Baseball","league": "MLB","leagueName": "MLB","eventName": "New York Mets @ Cincinnati Reds","homeTeam": "Cincinnati Reds","awayTeam": "New York Mets","startTime": "2026-06-17T16:40:00.000Z","isLive": false,"books": ["pinnacle", "fanduel", "bovada"],"bookCount": 3,"sharpBook": "pinnacle","markets": {"moneyline": {"selections": {"home": {"team": "Cincinnati Reds","prices": [{ "book": "bovada", "american": 111, "decimal": 2.11, "impliedProbability": 0.4739 },{ "book": "fanduel", "american": 114, "decimal": 2.14, "impliedProbability": 0.4673 },{ "book": "pinnacle", "american": 115, "decimal": 2.15, "impliedProbability": 0.4651 }],"best": { "book": "pinnacle", "american": 115, "decimal": 2.15 }},"away": { "team": "New York Mets", "prices": [ "..." ], "best": { "book": "pinnacle", "american": -127 } }},"fairProbabilities": { "home": 0.454, "away": 0.546 },"fairReference": "pinnacle","bestPrice": { "home": { "book": "pinnacle", "american": 115 }, "away": { "book": "pinnacle", "american": -127 } }},"spread": { "lines": [ { "point": 1.5, "awayPoint": -1.5, "home": { "best": { "book": "pinnacle", "american": -141 } }, "away": { "best": { "book": "bovada", "american": 125 } } } ] },"total": { "lines": [ { "point": 9, "over": { "best": { "book": "fanduel", "american": -108 } }, "under": { "best": { "book": "bovada", "american": -105 } } } ] }},"arbitrage": { "exists": false, "count": 0, "opportunities": [] },"valueBets": [],"scrapedAt": "2026-06-17T15:30:00.000Z"}
Rows mode — one flat record per price (type: "oddsRow"):
{ "type": "oddsRow", "league": "MLB", "eventName": "New York Mets @ Cincinnati Reds", "market": "moneyline", "selection": "home", "team": "Cincinnati Reds", "point": null, "book": "fanduel", "american": 114, "decimal": 2.14, "impliedProbability": 0.4673, "isBestPrice": false, "fairProbability": 0.454 }
When an arbitrage exists, each opportunity includes the legs and the exact stake split:
{ "market": "moneyline", "profitPercent": 1.84, "impliedBookSum": 0.982,"legs": [ { "side": "home", "book": "bovada", "american": 118, "stakePercent": 47.1 },{ "side": "away", "book": "fanduel", "american": -115, "stakePercent": 52.9 } ] }
Automate & schedule
Run this actor on autopilot and pull odds into your own stack:
- Apify API — start runs, fetch datasets, manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run every few minutes/hourly to track line movement, or daily to grab the next slate. Combine with monitoring mode to capture only what changed.
- Webhooks — fire a Slack/Discord alert or CRM/sheet update the moment a run finds an arbitrage or a moved line.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/sports-betting-odds-scraper').call({leagues: ['MLB', 'WORLDCUP', 'NBA'],books: ['pinnacle', 'fanduel', 'bovada'],markets: ['moneyline', 'spread', 'total'],onlyArbitrage: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got odds for ${items.length} games`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push arbs or line moves straight into a sheet or chat.
- Slack — get notified when a monitored slate has a value bet.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe odds into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT or any agent framework through the Apify MCP server — ask your assistant to "find tonight's MLB games where FanDuel beats the Pinnacle no-vig line" and let it run this scraper for you.
More scrapers from scrapesage
Build a complete real-time data stack:
- CoinGecko Crypto Scraper — crypto prices, markets, NFTs & exchanges with monitoring.
- Yahoo Finance Scraper — stocks, ETFs, FX, crypto quotes, financials & analyst ratings.
- Google News Scraper — articles, full text & related coverage with monitoring.
- Google Trends Scraper — search-demand & trending topics across Google surfaces.
- Eventbrite Scraper — events, ticket prices & organizer leads.
- Resident Advisor Scraper — electronic-music events, venues & promoter leads.
- Steam Scraper — game store data, prices & reviews.
- YouTube Scraper — channels, videos & creator contacts.
Tips
- Get data right now: pick an in-season league. In summer, MLB, WNBA and the FIFA World Cup are live; in fall/winter, NFL, NBA, NHL and college sports.
- Best price & arbitrage need 2+ books — keep at least two books selected (Pinnacle + one recreational book is the most useful pairing).
- More opportunities: arbitrage and +EV fire most often on live games, alternate lines, soccer and less efficient markets — enable
includeLiveandincludeAlternateLines. - Line-movement monitoring: turn on
monitorModeand schedule the run; you'll only get games whose odds changed. - Proxies: the default Apify Proxy (datacenter, US) works for all three books. If one starts blocking, switch to Residential in the proxy settings.
FAQ
Do I need a sportsbook account or a paid odds API key? No. The actor reads each sportsbook's own public JSON directly. No login, no third-party odds API, no browser.
Which books are supported? FanDuel, Bovada and Pinnacle. Pinnacle is included as the sharp reference book used for no-vig fair odds and +EV detection.
What are no-vig / fair odds? Sportsbooks bake a margin ("vig") into their prices. Removing it gives the implied "fair" probability of each outcome. The actor reports per-book no-vig probabilities and a sharp/consensus fair line so you can spot mispriced sides.
How does arbitrage detection work? For each market it takes the best available price on every outcome across your selected books; if their implied probabilities sum to under 100%, it's an arbitrage, and the actor returns the guaranteed profit % and the stake split per leg.
Can I get only the opportunities? Yes — enable onlyArbitrage and/or onlyValueBets, and set minArbitrageProfit / minValueEdge thresholds.
How do I track line movement? Turn on monitorMode and run on a Schedule. The actor remembers prior odds and emits only games that are new or whose lines moved.
American or decimal odds? Both — every price includes American odds, decimal odds and implied probability.
Is scraping odds legal? This actor collects publicly available odds data. You are responsible for using the data in compliance with applicable laws and each site's terms, and for gambling responsibly where legal.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests (more books, leagues, player props) are welcome — this actor is actively maintained.