FanDuel Odds API | Live Lines, Player Props & Scores
Pricing
from $50.00 / 1,000 games
FanDuel Odds API | Live Lines, Player Props & Scores
Scrape the complete FanDuel odds board for any game: moneyline, spread, totals, every inning and quarter, and the full player prop set. 25 sports, three odds formats, previous line on every selection, live scores for in-play games. Batch export or always-on REST API.
Pricing
from $50.00 / 1,000 games
Rating
0.0
(0)
Developer
Zen Studio
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
6
Monthly active users
2 days ago
Last modified
Categories
Share
FanDuel Odds Scraper | Live Lines, Player Props & In-Play Scores (2026)
From Zen Studio, the team behind DraftKings Odds, BetMGM Odds and Bet365 Odds. Sportsbook data is an established part of our suite, from full game boards to dedicated player props.
Why choose this actor?
- The board goes beyond moneyline, spread and totals. Collect player props, alternate lines and period markets alongside the main game lines. Export passing yards, strikeouts, touchdown scorers and inning or quarter markets wherever FanDuel offers them.
- 22,026 selections across 16 games, in 93 seconds. A completed bulk run exported that board as individual priced selections, ready to compare or monitor. Each row includes its game, market, selection and odds. Choose how many games to collect; the number of selections follows the available board.
- Three odds formats, plus the previous price. Decimal, fractional and American odds come together, with previous decimal and American prices where supplied. Use batch exports for analysis or the always-on API for fresh odds and live scores.
Try one complete game board
{"sport": "baseball","league": "MLB","maxEvents": 1}
Open actor input to choose a sport and league. maxEvents counts games, not selections: one game can produce hundreds of rows. This example collects one currently available MLB game and its markets. Export JSON, CSV or Excel.
Data comes from FanDuel Ontario. Market availability and prices vary by region and event. Simulated leagues are excluded by default.
| Zen Studio · Sportsbook Data | ||||
You are here | Lines & props | Lines & futures | Live & pre-match | Player projections |
Copy to your AI assistant
zen-studio/fanduel-odds on Apify. Batch: ApifyClient("TOKEN").actor("zen-studio/fanduel-odds").call(run_input={"sport":"baseball","maxEvents":10}), then client.dataset(run["defaultDatasetId"]).list_items().items. Always-on API: https://zen-studio--fanduel-odds.apify.actor?token=TOKEN with GET /sports, /competitions, /events, /live, /events/{eventId}, /events/{eventId}/odds; get IDs from the list endpoints before the detail ones. Full spec: GET https://api.apify.com/v2/acts/zen-studio~fanduel-odds/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, actorDefinition.webServerSchema, readme. Token: https://console.apify.com/account/integrations To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
Key Features
- The complete board, not the headline markets: every tab FanDuel shows on a game page, plus the markets it prices for the game but shows on none of those tabs (quarter-by-quarter player yards, longest reception, listed-pitcher moneylines, flagged
onGamePage: false), merged into one result. A pre-game NFL game returns about 380 markets, an international soccer match about 240. - Player props included: passing, rushing and receiving yards, touchdown scorers, strikeouts, total bases, hits, RBIs, goals, assists, shots, cards and corners, each flagged with
isPlayerPropand a player headshot. - Previous odds where supplied:
previousDecimalOddsandpreviousAmericanOddsaccompany the current price when FanDuel provides them, so the most recent move can be compared in one export. - Real fixtures only: FanDuel's computer-played leagues (eBasketball, eSoccer) are filtered out by default and flagged with
isSimulatedwhen you ask for them. - Free tier: 5 runs, one complete game board each, no credit card.
How to Scrape FanDuel Odds
- Open the Input tab and pick a sport from the dropdown.
- Set Number of games to the size of the slate you want.
- Press Start and wait; a game takes a few seconds.
- Open Storage and download the dataset as JSON, CSV, Excel or XML.
Every game exports its full board, one row per bet option.
Basic: one league's slate
{"sport": "basketball","league": "NBA","maxEvents": 10}
Partial league names work, so NHL, MLB, NFL and Premier League all match. Leave league out for every league in the sport.
One game, every market it has
{"sport": "baseball","maxEvents": 1}
A full slate across the popular sports
{"sport": "ALL","maxEvents": 100}
ALL works through American football, basketball, baseball, ice hockey, soccer, tennis, MMA and golf in that order until it reaches your game limit.
Include the computer-played leagues
{"sport": "soccer","maxEvents": 20,"includeSimulated": true}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
sport | string | basketball | Sport to pull. ALL walks the eight most popular in order. |
league | string | all leagues | Narrow to one league; whole words match (NHL, Premier League). A league from another sport switches the run to that sport. |
maxEvents | integer | 10 | Number of games, 1 to 500. Each returns its complete board. Free runs return 1 game whatever you set: the fullest board among games not yet started. |
includeSimulated | boolean | false | Include FanDuel's computer-played leagues (eBasketball, eSoccer, eFootball). |
What Data Can You Extract from FanDuel?
Every row is one bet option, so the row count follows the game: about 3,100 on a pre-game NFL game, 1,300 to 1,800 on an MLB, NHL or major soccer game, a few dozen on a minor fixture.
- Game: sport, league, league region, name, start time, live flag, home and away teams, simulated flag
- Market: name, type, status, same-game-parlay eligibility, whether FanDuel shows it on the game page (
onGamePage), betting type, runner and winner counts - Selection: name, abbreviation, team logo, player headshot, player-prop flag, side, handicap, status
- Odds: decimal, fractional and American, plus the previous decimal and American price
- Identifiers: game, market, selection and league IDs, and the capture timestamp
decimalOdds is the exact value rather than FanDuel's rounded display price, so -138 comes back as 1.72463768115942. Round it yourself if you are showing it to people; keep it if you are computing edge.
Output Example
Two rows from a real MLB export: a team selection with its logo, and a player prop with the player's headshot.
[{"sport": "Baseball","sportSlug": "baseball","league": "MLB","leagueId": "2926d8429ed53300","leagueRegion": "USA","isSimulated": false,"event": "Chicago Cubs (K Gausman) @ Arizona Diamondbacks (M Kelly)","eventId": "d88a7e1ed6edb5a7","startDate": "2026-08-25T01:41:00.000Z","isLive": false,"homeTeam": "Arizona Diamondbacks","awayTeam": "Chicago Cubs","market": "4th Inning Result","marketType": "4TH_INNING_RESULT","marketId": "37c22a7209b7d630","marketStatus": "OPEN","sgmMarket": true,"onGamePage": true,"bettingType": "ODDS","numberOfRunners": 3,"numberOfWinners": 1,"selection": "Chicago Cubs","selectionId": "504c77ec8bbec3f5","selectionStatus": "ACTIVE","isPlayerProp": false,"side": null,"nameAbbr": "CHI Cubs","logo": "https://assets.sportsbook.fanduel.com/images/team/mlb/chicago_cubs.png","secondaryLogo": null,"handicap": 0,"decimalOdds": 3.5,"fractionalOdds": "25/10","americanOdds": 250,"previousDecimalOdds": 3.4,"previousAmericanOdds": 240,"timestamp": "2026-08-24T15:22:10.233534+00:00"},{"sport": "Baseball","sportSlug": "baseball","league": "MLB","leagueId": "2926d8429ed53300","leagueRegion": "USA","isSimulated": false,"event": "Chicago Cubs (K Gausman) @ Arizona Diamondbacks (M Kelly)","eventId": "d88a7e1ed6edb5a7","startDate": "2026-08-25T01:41:00.000Z","isLive": false,"homeTeam": "Arizona Diamondbacks","awayTeam": "Chicago Cubs","market": "To Record 5+ Total Bases","marketType": "TO_RECORD_5+_TOTAL_BASES","marketId": "c322273951ed882c","marketStatus": "OPEN","sgmMarket": true,"onGamePage": true,"bettingType": "ODDS","numberOfRunners": 18,"numberOfWinners": 1,"selection": "Pete Crow-Armstrong","selectionId": "c879d9ac41822ae6","selectionStatus": "ACTIVE","isPlayerProp": true,"side": null,"nameAbbr": null,"logo": "https://fdx-api.sportsbook.fanduel.com/images/headshots/mlb/2025/e9734861-bc3f-4157-88eb-007b1ed65984/120x120.png","secondaryLogo": "https://assets.sportsbook.fanduel.com/images/team/mlb/chicago_cubs.png","handicap": 0,"decimalOdds": 5.4,"fractionalOdds": "44/10","americanOdds": 440,"previousDecimalOdds": 5.2,"previousAmericanOdds": 420,"timestamp": "2026-08-24T15:22:10.233534+00:00"}]
Always-On REST API
The same data is available as a hosted API that stays warm. Open the Standby tab for your URL, then call it with your Apify token.
Endpoints
| Endpoint | Price | Returns |
|---|---|---|
/sports | free | The 25 sports and their slugs |
/competitions?sport=SLUG | $0.005 | Leagues with name, region and market count |
/events?sport=SLUG | $0.005 | Games with name, league, start time and market count |
/live?sport=SLUG | $0.005 | In-play games with per-sport live detail |
/events/{eventId} | $0.05 | One game's complete board |
/events/{eventId}/odds | $0.05 | The same board, prices only, for polling |
Find a league, then a game, then its board
$curl "https://zen-studio--fanduel-odds.apify.actor/competitions?sport=baseball&token=YOUR_APIFY_TOKEN"
$curl "https://zen-studio--fanduel-odds.apify.actor/events?sport=baseball&token=YOUR_APIFY_TOKEN"
$curl "https://zen-studio--fanduel-odds.apify.actor/events/d88a7e1ed6edb5a7?token=YOUR_APIFY_TOKEN"
Leagues
{"success": true,"sport": "baseball","count": 3,"competitions": [{"competitionId": "2926d8429ed53300","name": "MLB","region": "USA","isSimulated": false,"marketCount": 1762},{"competitionId": "23ce837210fc2ab7","name": "Japan - Baseball","region": "JPN","isSimulated": false,"marketCount": 36}]}
Games
{"success": true,"count": 21,"simulatedHidden": 0,"events": [{"eventId": "e4590d23b98a146a","name": "Tampa Bay Rays (D Rasmussen) @ Detroit Tigers (F Valdez)","sport": "Baseball","league": "MLB","leagueId": "2926d8429ed53300","isSimulated": false,"startDate": "2026-08-24T22:41:00.000Z","marketCount": 177,"isLive": false},{"eventId": "d849ad0380b54774","name": "Boston Red Sox (R Suarez) @ Miami Marlins (S Alcantara)","sport": "Baseball","league": "MLB","leagueId": "2926d8429ed53300","isSimulated": false,"startDate": "2026-08-24T22:41:00.000Z","marketCount": 180,"isLive": false}]}
marketCount is what FanDuel lists for the game, and the number of markets /events/{eventId} returns for it. simulatedHidden tells you how many computer-played fixtures were filtered out.
One game's board
Three markets from a real response: the moneyline with both team logos, a player prop with the player's headshot, and a total with OVER and UNDER labelled.
{"success": true,"event": {"eventId": "d88a7e1ed6edb5a7","name": "Chicago Cubs (K Gausman) @ Arizona Diamondbacks (M Kelly)","sport": "Baseball","sportSlug": "baseball","league": "MLB","leagueId": "2926d8429ed53300","leagueRegion": "USA","isSimulated": false,"startDate": "2026-08-25T01:41:00.000Z","isLive": false,"videoAvailable": true,"primaryMarketId": "2f23cd1c21d30ca8","awayTeam": "Chicago Cubs","homeTeam": "Arizona Diamondbacks"},"markets": [{"marketId": "e546214a2e8993cd","marketName": "Moneyline","marketType": "MONEY_LINE","marketStatus": "OPEN","sgmMarket": true,"onGamePage": true,"sortPriority": 10,"bettingType": "ODDS","marketTime": "2026-08-25T01:41:00.000Z","isLive": false,"canGoLive": true,"eachWayAvailable": false,"numberOfRunners": 2,"numberOfActiveRunners": 2,"numberOfWinners": 1,"selections": [{"selectionId": "504c77ec8bbec3f5","runnerName": "Chicago Cubs","nameAbbr": "CHI Cubs","logo": "https://assets.sportsbook.fanduel.com/images/team/mlb/chicago_cubs.png","secondaryLogo": null,"isPlayerProp": false,"side": "AWAY","sortPriority": 1,"handicap": 0,"runnerStatus": "ACTIVE","decimalOdds": 1.72463768115942,"fractionalOdds": "100/138","americanOdds": -138,"previousDecimalOdds": 1.735294117647059,"previousAmericanOdds": -136},{"selectionId": "a2f14986d62aaa25","runnerName": "Arizona Diamondbacks","nameAbbr": "ARI Diamondbacks","logo": "https://assets.sportsbook.fanduel.com/images/team/mlb/arizona_diamondbacks.png","secondaryLogo": null,"isPlayerProp": false,"side": "HOME","sortPriority": 2,"handicap": 0,"runnerStatus": "ACTIVE","decimalOdds": 2.28,"fractionalOdds": "128/100","americanOdds": 128,"previousDecimalOdds": 2.26,"previousAmericanOdds": 126}]},{"marketId": "c322273951ed882c","marketName": "To Record 5+ Total Bases","marketType": "TO_RECORD_5+_TOTAL_BASES","marketStatus": "OPEN","sgmMarket": true,"onGamePage": true,"sortPriority": 1764,"bettingType": "ODDS","marketTime": "2026-08-25T01:41:00.000Z","isLive": false,"canGoLive": true,"eachWayAvailable": false,"numberOfRunners": 18,"numberOfActiveRunners": 18,"numberOfWinners": 1,"selections": [{"selectionId": "c879d9ac41822ae6","runnerName": "Pete Crow-Armstrong","nameAbbr": null,"logo": "https://fdx-api.sportsbook.fanduel.com/images/headshots/mlb/2025/e9734861-bc3f-4157-88eb-007b1ed65984/120x120.png","secondaryLogo": "https://assets.sportsbook.fanduel.com/images/team/mlb/chicago_cubs.png","isPlayerProp": true,"side": null,"sortPriority": 1,"handicap": 0,"runnerStatus": "ACTIVE","decimalOdds": 5.4,"fractionalOdds": "44/10","americanOdds": 440,"previousDecimalOdds": 5.2,"previousAmericanOdds": 420},{"selectionId": "3b8d98990455bb36","runnerName": "Corbin Carroll","nameAbbr": null,"logo": "https://fdx-api.sportsbook.fanduel.com/images/headshots/mlb/2025/d06b32aa-b9c4-4e48-ae0f-058e3ebdbbfd/120x120.png","secondaryLogo": "https://assets.sportsbook.fanduel.com/images/team/mlb/arizona_diamondbacks.png","isPlayerProp": true,"side": null,"sortPriority": 2,"handicap": 0,"runnerStatus": "ACTIVE","decimalOdds": 7,"fractionalOdds": "60/10","americanOdds": 600,"previousDecimalOdds": 7.5,"previousAmericanOdds": 650}]},{"marketId": "9ba55eebd4bcaae1","marketName": "Total Runs","marketType": "TOTAL_POINTS_(OVER/UNDER)","marketStatus": "OPEN","sgmMarket": true,"onGamePage": true,"sortPriority": 30,"bettingType": "MOVING_HANDICAP","marketTime": "2026-08-25T01:41:00.000Z","isLive": false,"canGoLive": true,"eachWayAvailable": false,"numberOfRunners": 2,"numberOfActiveRunners": 2,"numberOfWinners": 1,"selections": [{"selectionId": "de578cc91cd9e21b","runnerName": "Over","nameAbbr": null,"logo": null,"secondaryLogo": null,"isPlayerProp": false,"side": "OVER","sortPriority": 1,"handicap": 9,"runnerStatus": "ACTIVE","decimalOdds": 1.909090909090909,"fractionalOdds": "100/110","americanOdds": -110,"previousDecimalOdds": 1.952380952380952,"previousAmericanOdds": -105},{"selectionId": "6f43bd63917f07f5","runnerName": "Under","nameAbbr": null,"logo": null,"secondaryLogo": null,"isPlayerProp": false,"side": "UNDER","sortPriority": 2,"handicap": 9,"runnerStatus": "ACTIVE","decimalOdds": 1.909090909090909,"fractionalOdds": "100/110","americanOdds": -110,"previousDecimalOdds": 1.869565217391304,"previousAmericanOdds": -115}]}]}
Prices only, for polling
{"success": true,"eventId": "d88a7e1ed6edb5a7","marketCount": 159,"markets": [{"marketId": "78035921d4563890","marketStatus": "OPEN","isLive": false,"selections": [{"selectionId": "f53474bf917098d7","handicap": 0.0,"runnerStatus": "ACTIVE","sortPriority": 10,"decimalOdds": 1.066666666666667,"fractionalOdds": "10/150","americanOdds": -1500,"previousDecimalOdds": 1.071428571428571,"previousAmericanOdds": -1400},{"selectionId": "cd6c6faeac30d06c","handicap": 0.0,"runnerStatus": "ACTIVE","sortPriority": 20,"decimalOdds": 8.9,"fractionalOdds": "79/10","americanOdds": 790,"previousDecimalOdds": 8.6,"previousAmericanOdds": 760}]}]}
Live scores
Detail varies by sport. Soccer carries cards, corners, booking points and a match timeline; tennis is set by set with the server; basketball and hockey are per period; baseball is a box score; cricket is innings; snooker is frames.
{"success": true,"count": 1,"events": [{"eventId": "4d2d9b50705e9580","sport": "Tennis","isLive": true,"mediaTypes": [],"homeScore": 0,"awayScore": 0,"currentSet": 1,"totalSets": 3,"serving": "AWAY","homePoints": "15","awayPoints": "30","homeGamesPerSet": [2],"awayGamesPerSet": [0]}]}
A score of 0 is returned as 0, not null, so a goalless first half is distinguishable from missing data.
Response Format
Every response carries the same envelope, errors included.
| Code | Meaning | What to do |
|---|---|---|
| 400 | Invalid parameter | Check the sport slug or the ID |
| 402 | Usage limit reached | Raise the billing limit on Apify |
| 404 | Unknown ID or endpoint | Discover IDs via /events or /competitions first |
| 405 | Wrong method | Every endpoint is GET |
| 502 | Upstream unavailable | Retry in a few seconds |
An empty result is a success, not an error. /events, /competitions and /live return count: 0 with a message explaining why, most often that the sport is between seasons, and nothing is charged for it.
Advanced Usage
Ready-made configurations for line-movement tracking, arbitrage screening, player-prop modelling and in-play monitoring.
These pull a full slate, so they need billing details on Apify: a free run returns 1 game and says so in the log.
Track line movement on tonight's slate
{"sport": "football","league": "NFL","maxEvents": 16}
Where FanDuel supplies a previous price, one run gives you the current line and the last move together.
Build a player-prop dataset
{"sport": "baseball","league": "MLB","maxEvents": 15}
Filter the export on isPlayerProp to keep only player markets. Each carries the player's headshot in logo and the team badge in secondaryLogo.
Compare against another sportsbook
{"sport": "basketball","league": "NBA","maxEvents": 12}
Run DraftKings Odds or BetMGM Odds with the same slate and join on team names and market type.
Poll a single game while it is in play
Use the always-on API rather than batch. /events/{eventId}/odds returns the same board with the metadata stripped, so responses stay small on a tight loop.
Pricing
Billed per game board, not per request, so the price tracks the data you receive.
| What | Price |
|---|---|
| One game's complete board | $0.05 |
| List request (leagues, games, live scores) | $0.005 |
| Run start | Apify's platform start fee |
A pre-game NFL board is about 3,100 priced bet options, which works out to roughly $0.016 per 1,000 odds rows; smaller fixtures carry fewer. /sports is free, and an empty result is never charged.
Free tier: 5 runs, one complete game board each.
Keeping the cost down
- Set
maxEventsto the slate you actually need; games are billed as you go. - Browse with
/eventsand/competitionsat $0.005 and pull only the boards you want. - On the always-on API, Apify's platform start fee applies per container rather than per request, and a container stays warm for five minutes after the last call. Frequent callers pay it rarely; if you poll on a long interval, batch mode is the cheaper shape.
FAQ
What is FanDuel? FanDuel is one of the largest sportsbooks in North America, operating in most regulated US states and in Ontario, alongside its daily fantasy product. This Actor covers the sportsbook side: the odds board for every game FanDuel prices, including the full player prop set. For its daily fantasy contests, see PrizePicks or Underdog Fantasy, which cover the same market from the DFS angle.
What markets are included?
Every market FanDuel prices for the game, merged across every game-page tab plus the markets it prices but does not show there (flagged onGamePage: false, so you can keep to exactly what the game page shows): moneyline, spread, totals and alternates, period and inning markets, same-game-parlay markets, and the full player prop set. A pre-game NFL game is about 380 markets and 3,100 bet options; an MLB game 180 to 250 markets.
Does FanDuel have an API? Not a public one. FanDuel offers no developer API, no documentation and no keys for its odds board, and its official partner feeds are enterprise agreements rather than something you can sign up for. This Actor gives you the same board as a normal REST response, with stable IDs and three odds formats, and no rate limit beyond your own budget.
Can I connect this to Google Sheets, Make or Zapier? Yes. Every run writes a normal Apify dataset, so the Google Sheets, Make, Zapier and Slack integrations on the Actor's Integrations tab work without any extra setup, and a webhook can push each finished run straight to your own endpoint.
How often should I schedule it?
For pre-match line movement, hourly on the day of the slate is usually enough; lines move most in the last few hours before a start. For in-play, use the always-on API and poll /events/{eventId}/odds rather than scheduling batch runs.
How fresh are the odds? Every run fetches live. There is no cache between you and the board, and each row carries the timestamp it was captured.
How do I export the data? JSON, CSV, Excel, XML or HTML from the run's Storage tab, or through the Apify API. JSON preserves the exact decimal odds; CSV and Excel are flat already, since every row is one bet option.
Is it legal to scrape FanDuel odds? The Actor reads publicly visible odds pages, nothing behind a login and no personal data. You are responsible for complying with FanDuel's terms and with the data protection law that applies to you, including GDPR, CCPA and PIPEDA in Canada. Odds data is factual pricing information, but gambling advertising and data use are separately regulated in many jurisdictions.
What is the free tier?
5 runs, one complete game board each, no credit card. The free game is the one with the fullest board among games that have not started, so the sample is a whole pre-game board rather than a game in progress with markets suspended. That is up to about 3,100 odds rows per run on an NFL game. maxEvents is capped to that one game on a free run, whatever you set it to, and the log says so; add billing details on Apify to pull a full slate.
What are simulated leagues?
FanDuel prices computer-played leagues that use real team names, such as "eBasketball H2H GG League 4x5 Mins". A new one starts every few minutes, so in start-soonest order they crowd out real fixtures. Batch runs, /events and /live all skip them by default and flag them with isSimulated. Genuine esports competitions between human players are not affected.
Why is side null on some selections?
side carries HOME, AWAY, OVER or UNDER on the markets where FanDuel provides it, which is mainly the main lines, roughly one selection in eight. Elsewhere it is null and the selection name is the label.
Do I get suspended lines?
Yes. An in-play game suspends most of its board between plays, and dropping those would leave you with nothing during the moments that matter most. Every selection comes through with its status, so filter on selectionStatus if you only want tradeable prices.
What are the opaque IDs?
Game, market, selection and league IDs are 16-character hex strings. They are stable and deterministic, so an ID you stored yesterday still works today. Discover them via /events or /competitions, then use them on the detail endpoints.
Can I get historical odds? Not as a back catalogue. Selections include a previous price where supplied, covering the most recent move. For a longer series, run on a schedule and keep the exports; every row is timestamped.
How do I get just one league?
Set league to any whole word from its name: NHL, MLB, NBA, NFL, Premier League. Matching is case-insensitive and on whole words, so Premier League finds "English Premier League" while NBA does not also return WNBA games. If the league belongs to a different sport than the one selected, the run switches to that sport and the log says so, so {"league": "NFL"} on its own works. If the league is not running anywhere right now, the run finishes with an empty dataset, uncharged, and the log lists the leagues that are running in the selected sport, which is the fastest way to find the right spelling.
Which sports are covered? 25: American football, basketball, baseball, ice hockey, soccer, tennis, MMA, golf, boxing, cricket, darts, snooker, table tennis, volleyball, handball, rugby union, rugby league, Australian rules, Gaelic games, lacrosse, motor sport, cycling, surfing, politics and special bets. Coverage follows the season, so an out-of-season sport returns an explained empty result rather than an error.
What is Standby mode? An always-on HTTP server. No queue and no cold start while it is warm; Apify keeps it running and routes requests straight to it.
More Zen Studio scrapers for sports betting
🏟️ Sportsbook odds
Action Network
DraftKings
BetMGM
Bet365
🎯 Daily fantasy & player props
Player Props Aggregator
PrizePicks
Underdog Fantasy
Sleeper
DraftKings Pick6
Bet365
🎾 Live scores & match data
Tennis Abstract
Flashscore
Support
- Bugs: Issues tab
- Features: Issues tab
Legal Compliance
Extracts publicly available data. Users must comply with FanDuel's terms and applicable data protection regulations, including GDPR, CCPA and PIPEDA.
Real-time FanDuel Sportsbook odds for 25 sports: the complete board per game, player props included, with line movement and live scores.
