FanDuel Scraper | Odds, Spreads and Player Props avatar

FanDuel Scraper | Odds, Spreads and Player Props

Pricing

from $0.36 / 1,000 games

Go to Apify Store
FanDuel Scraper | Odds, Spreads and Player Props

FanDuel Scraper | Odds, Spreads and Player Props

FanDuel scraper for sportsbook odds: moneyline, spread and total in American and decimal odds, no-vig win probabilities, teams, logos and start times. NFL, NBA, MLB, NHL, soccer, UFC, player props and futures. 29 NFL games in 1 second, 39 fields each. Search by team or paste links. No account.

Pricing

from $0.36 / 1,000 games

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

FanDuel Scraper | Odds, Spreads, Moneylines and Player Props (2026)

1 sport. 29 FanDuel games. 39 fields per game.

From SilentFlow. Creators of Pinterest Scraper (#1 for โ€œpinterest pins scraperโ€ in Apify Store search) and Leboncoin Scraper Ppe, with 260,000+ combined lifetime runs.

Every FanDuel Sportsbook game as one clean row: the moneyline, the spread and the total in American and decimal odds, the no-vig win probability of each side, the bookmaker hold, both teams with their logos and the start time. Pick a league, type a team, or paste a FanDuel link, and get lines you can sort, chart, compare against other books or feed to a betting model. The default run returned the 29 NFL games on the New Jersey board in about a second, with no FanDuel account.

Why choose this actor?

Copying FanDuel lines into a spreadsheet one game at a time before kickoff? Converting -480 into a win probability by hand, then wondering how much of it is the book's margin? Running a scraper that only takes "pick a sport" when all you need is the Cowboys, or the one game your model flagged?

  • 37 fields filled on every game row. On the default run of 7 Oct 2026 (NFL, New Jersey, 29 games), all 37 data fields carried a value on every row: game id and link, teams and their FanDuel abbreviations, the league, home and away moneylines in American and decimal odds, both sides of the spread with their prices, the total with the over and under prices, the no-vig win probability of each side, the moneyline hold, the market status, the same game parlay flag, the start time, the live flag, both team logos and the state of the feed. The most used FanDuel scraper on the Store does not list its output fields at all.
  • Search by team or player across every sport. The most used FanDuel scraper only takes a sport. Here you can type names: Liverpool, Real Madrid and Yankees with futures on returned 9 games and 16 futures markets across soccer, basketball and baseball in 3 seconds, from a single run that looked through nine sports. A team shows up wherever it plays: league games, cup games and the futures that name it.
  • Paste FanDuel links or game ids. A game link, a league page such as /navigation/nba, a sport page such as /soccer or a league inside a sport such as /soccer/english-premier-league all work, and so does a bare FanDuel game id. One game id with the full betting board on (Buccaneers at Cowboys) came back with 274 markets and 2,227 priced selections in one row, in 3 seconds.

Try FanDuel Scraper

Try your first FanDuel odds slate

Paste this input into the Input tab (JSON view) and press Start. It is the default input of the form: every NFL game on the New Jersey board, soonest kickoff first, main lines only.

{
"sports": ["nfl"],
"state": "nj",
"maxItems": 100,
"includeAllMarkets": false,
"includeFutures": false
}

The Apify Free plan is enough to run it and to try the actor on your own leagues, teams and states: no credit card, no FanDuel account, no setup. Each game becomes one row of the dataset, which you can export as JSON, CSV or Excel, open in Google Sheets, or read from the API.

How it works

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it the full context of this actor:

You have access to the FanDuel Scraper on Apify: silentflow/fanduel-scraper
It reads the public FanDuel Sportsbook odds (sportsbook.fanduel.com) of one US state.
One dataset row per game (dataType "game"); futures markets are extra rows (dataType "future") when asked.
Input (no field is required; with no input it reads the NFL):
- sports (array of strings): "nfl", "ncaaf", "nba", "ncaab", "wnba", "mlb", "nhl", "soccer", "tennis",
"mma", "boxing", "cricket", "american-football", "basketball", "baseball", "ice-hockey"
(the last four read every league of the sport).
- keywords (array of strings): keep games and futures that name one of them, e.g. ["Cowboys", "Liverpool"].
With no sport and no link, every sport is searched.
- startUrls (array of {url}): FanDuel Sportsbook links. A game
(https://sportsbook.fanduel.com/football/nfl/arizona-cardinals-@-los-angeles-rams-36160495),
a league (https://sportsbook.fanduel.com/navigation/nba), a sport (https://sportsbook.fanduel.com/soccer)
or a league inside a sport (https://sportsbook.fanduel.com/soccer/english-premier-league).
- state (string, default "nj"): the state feed. Codes nj ny pa il oh mi ma az co ct dc ia in ks ky la md mo nc tn va vt wv wy,
or the state name ("Pennsylvania").
- maxItems (integer, default 100): cap on rows, games and futures together.
- includeAllMarkets (boolean, default false): add every market of each game in "markets" (player props,
touchdown scorers, quarters, halves, alternate lines, specials).
- includeFutures (boolean, default false): add long-term markets (champion, MVP, season wins) as rows.
- eventIds (array of strings): FanDuel game ids, e.g. ["36160495"].
Game row: id, url, title, sport, sportId, league, leagueId, homeTeam, awayTeam, homeTeamAbbr, awayTeamAbbr,
moneylineHome, moneylineAway, moneylineDraw (American odds, integers), moneylineHomeDecimal, moneylineAwayDecimal,
moneylineDrawDecimal, spreadHome, spreadHomeOdds, spreadHomeDecimal, spreadAway, spreadAwayOdds, spreadAwayDecimal,
totalPoints, overOdds, overDecimal, underOdds, underDecimal, homeWinProbability, awayWinProbability,
drawProbability (no-vig, 0 to 1), moneylineHold (bookmaker margin, 0.04 = 4%), marketStatus, hasSameGameParlay,
startTime (RFC 3339 UTC), isLive, homeTeamLogo, awayTeamLogo, marketsCount, markets[] (full board only:
id, name, type, status, isLive, hasSameGameParlay, selections[]: id, name, side, handicap, americanOdds,
decimalOdds, fractionalOdds, previousAmericanOdds, previousDecimalOdds, status), state, bookmaker, scrapedAt, dataType.
Future row: id, url, title, sport, sportId, league, leagueId, category, marketType, marketStatus, closeTime,
selectionsCount, favorite, favoriteOdds, favoriteDecimal, selections[], state, bookmaker, scrapedAt, dataType.
Absent values are null. Use the apify-client package for Python or JavaScript:
client.actor("silentflow/fanduel-scraper").call(run_input={...}), then read the run's default dataset.

How to scrape FanDuel odds

Three inputs, from the simplest to the most targeted. Each one runs as is.

Get this week's NFL lines

{
"sports": ["nfl"]
}

Every NFL game on the board with moneyline, spread and total. On 7 Oct 2026 this returned 29 games, the current week and the next one, in about a second.

Follow your teams across every sport

{
"keywords": ["Cowboys", "Lakers", "Liverpool", "Real Madrid"],
"state": "pa",
"maxItems": 50
}

No sport is picked, so every sport is searched and only the games that name one of these teams come back. On 7 Oct 2026 this returned 11 games across the NFL, the NBA, the Euroleague, La Liga, the Premier League and the Champions League in 6 seconds. Use a distinctive name: Lakers also matched the Vaxjo Lakers of the Swedish hockey league.

Pull the Premier League and the Champions League with futures

{
"startUrls": [
{ "url": "https://sportsbook.fanduel.com/soccer/english-premier-league" },
{ "url": "https://sportsbook.fanduel.com/soccer/uefa-champions-league" }
],
"includeFutures": true,
"maxItems": 200
}

Each match carries the three-way moneyline (home, draw, away) and the no-vig probability of each result. With futures on, the title winner, the top goalscorer and the top-four finish come as extra rows with every contender's price.

Input parameters

ParameterTypeDefaultWhat it does
sportsarraynone (the form suggests NFL)Leagues and sports to read. US leagues (nfl, ncaaf, nba, ncaab, wnba, mlb, nhl) also carry their futures. Whole sports: soccer, tennis, mma, boxing, cricket, and every league of american-football, basketball, baseball, ice-hockey.
keywordsarraynoneTeam, player or league names. Keeps the games and futures that name one of them. Alone, it searches every sport.
startUrlsarray of {url}noneFanDuel Sportsbook links: a game, a league page, a sport page, or a league inside a sport.
statestringnjThe state feed to read: 24 states, by code or name. Lines and markets differ slightly from state to state.
maxItemsinteger100Cap on rows, games and futures together.
includeAllMarketsbooleanfalseAdds every market of each game in a markets list.
includeFuturesbooleanfalseAdds long-term markets as rows.
eventIdsarraynoneFanDuel game ids, the number at the end of a game link.

Formats accepted. Links work with or without https:// and with any tab or query string after them. A game id works alone (36160495) or as a full link in the eventIds field. States work as a code (pa, PA, N.J.) or a name (Pennsylvania, Washington DC). Sports work as the key (nfl) or the name shown in the form (College Football, MMA / UFC). Lists can also be sent as one comma-separated text through the API. Entries that cannot be read are skipped and named in the log; the run stops only when nothing usable is left.

What gets combined. Sports, links and game ids add up: a game reached twice is delivered once. Keywords narrow the sports and links you picked, and never filter the game ids you pasted.

What data can you extract from FanDuel?

Each game row holds 44 fields in seven groups:

  • Identity (3): id is FanDuel's game id, stable for the life of the game; url is the game's page on sportsbook.fanduel.com; title is FanDuel's own name of the game ("Away @ Home" in US sports, "Home v Away" in soccer and tennis).
  • Game (8): sport, sportId, league, leagueId, homeTeam, awayTeam, homeTeamAbbr, awayTeamAbbr. Tennis doubles and fights read the players in the team fields.
  • Lines (17): the moneyline of each side (and the draw in soccer) in American odds and decimal odds; both sides of the spread (or puck line, or run line) with the line and its price in both formats; the total with the over and under prices in both formats.
  • Measures (6): homeWinProbability, awayWinProbability and drawProbability are the moneyline's implied probabilities with the bookmaker margin taken out, so they add up to 1; moneylineHold is that margin (0.0404 means 4.04%); marketStatus says whether the moneyline is open or suspended; hasSameGameParlay says whether the game can go in a same game parlay.
  • Time and media (4): startTime in RFC 3339 UTC, isLive for games already in play, and both team logos.
  • Full board (2) and meta (4): marketsCount and markets when the full board is on (marketsCount stays null when one tab of the board could not be read, the markets read are still there); state, bookmaker, scrapedAt (RFC 3339 UTC) and dataType.

Each market of the full board holds its name, type, status, live flag and every selection with its side, handicap, American, decimal and fractional odds and, when FanDuel shows it, the previous price. That previous price tells you which way the line just moved. A futures row holds the market, its category, its settle time, the favorite with its price and every contender with its price.

Output example

One row of the default run of 7 Oct 2026, unedited:

{
"id": "36132640",
"url": "https://sportsbook.fanduel.com/football/nfl/tampa-bay-buccaneers-@-dallas-cowboys-36132640",
"title": "Tampa Bay Buccaneers @ Dallas Cowboys",
"sport": "American Football",
"sportId": 6423,
"league": "NFL",
"leagueId": "12282733",
"homeTeam": "Dallas Cowboys",
"awayTeam": "Tampa Bay Buccaneers",
"homeTeamAbbr": "DAL Cowboys",
"awayTeamAbbr": "TB Buccaneers",
"moneylineHome": -480,
"moneylineAway": 370,
"moneylineDraw": null,
"moneylineHomeDecimal": 1.2083,
"moneylineAwayDecimal": 4.7,
"moneylineDrawDecimal": null,
"spreadHome": -8.5,
"spreadHomeOdds": -112,
"spreadHomeDecimal": 1.8929,
"spreadAway": 8.5,
"spreadAwayOdds": -108,
"spreadAwayDecimal": 1.9259,
"totalPoints": 47.5,
"overOdds": -110,
"overDecimal": 1.9091,
"underOdds": -110,
"underDecimal": 1.9091,
"homeWinProbability": 0.7955,
"awayWinProbability": 0.2045,
"drawProbability": null,
"moneylineHold": 0.0404,
"marketStatus": "OPEN",
"hasSameGameParlay": true,
"startTime": "2026-10-09T00:16:00Z",
"isLive": false,
"homeTeamLogo": "https://assets.sportsbook.fanduel.com/images/team/nfl/dallas_cowboys.png",
"awayTeamLogo": "https://assets.sportsbook.fanduel.com/images/team/nfl/tampa_bay_buccaneers.png",
"marketsCount": null,
"markets": null,
"state": "nj",
"bookmaker": "FanDuel",
"scrapedAt": "2026-10-07T15:00:51Z",
"dataType": "game"
}

With the full board on, the same game carries marketsCount: 274 and a markets list. Its first market, from a full board run of the same day:

{
"id": "734.188987858",
"name": "Moneyline",
"type": "MONEY_LINE",
"status": "OPEN",
"isLive": false,
"hasSameGameParlay": true,
"selections": [
{
"id": 50190,
"name": "Tampa Bay Buccaneers",
"side": "away",
"handicap": 0,
"americanOdds": 370,
"decimalOdds": 4.7,
"fractionalOdds": "37/10",
"previousAmericanOdds": 385,
"previousDecimalOdds": 4.85,
"status": "ACTIVE"
},
{
"id": 50189,
"name": "Dallas Cowboys",
"side": "home",
"handicap": 0,
"americanOdds": -480,
"decimalOdds": 1.2083,
"fractionalOdds": "10/48",
"previousAmericanOdds": -500,
"previousDecimalOdds": 1.2,
"status": "ACTIVE"
}
]
}

The previous prices show the Cowboys drifting from -500 to -480 before this read.

Advanced usage

Track line movement through the day

{
"sports": ["nfl", "ncaaf"],
"maxItems": 200
}

Save this input as a task and schedule it every 15 or 30 minutes on Apify. Each run stamps scrapedAt, and id stays the same from run to run, so you can stack the datasets and chart how each spread and moneyline moved up to kickoff.

Compare two state feeds

{
"sports": ["nba"],
"state": "ny",
"maxItems": 100
}

Run it once with "state": "ny" and once with "state": "nj", then join the two datasets on id. The state field tells the rows apart. On 7 Oct 2026 the New York NFL page was smaller than the New Jersey one, so expect some markets on one side only.

Build a player props dataset

{
"sports": ["nfl"],
"includeAllMarkets": true,
"maxItems": 16
}

Every game comes with its full board: anytime touchdown scorers, passing, rushing and receiving yards, quarter and half lines, alternate spreads and totals, specials. Filter markets by type (the ones starting with PLAYER_ are player markets) to get one line per player and stat. Twelve NBA games with their full board took 16 seconds on 7 Oct 2026.

Get the futures board of a season

{
"sports": ["nfl", "nba"],
"includeFutures": true,
"maxItems": 300
}

Championship and conference winners, MVP and other awards, season win totals and division finishes, each with the favorite and every contender's price. On 7 Oct 2026 this returned 47 games and 253 futures markets in about a second. Use the Futures view of the dataset to read them as a table.

Watch the games your model picked

{
"eventIds": ["36160495", "36132640"],
"includeAllMarkets": true,
"state": "Illinois"
}

Feed the FanDuel ids your own system already holds and get each game's current lines and full board. A game that has finished or that the state does not offer gives no row and is counted in the log, so the run never returns a half-empty row.

FAQ

What does this FanDuel scraper return? One row per game with the main lines (moneyline, spread, total) in American and decimal odds, the no-vig win probabilities, the bookmaker hold, both teams, logos and the start time. On request, it adds every market of each game (player props, quarters, specials) and the futures markets of the leagues you read.

Do I need a FanDuel account? No. The actor reads the odds FanDuel shows to every visitor of sportsbook.fanduel.com. No login, no API key, no account of any kind.

Which sports and leagues are covered? NFL, college football, NBA, college basketball, WNBA, MLB, NHL, soccer (every league FanDuel lists, Premier League, La Liga, Bundesliga, Serie A, MLS, Champions League and more), tennis, MMA and UFC, boxing and cricket, plus every league of American football, basketball, baseball and ice hockey (CFL, Euroleague, the Swedish and Finnish hockey leagues and others). A league link from the sportsbook works too, for leagues outside this list.

How fresh are the odds? They are read at run time, straight from the live board, nothing is cached on our side. FanDuel moves lines constantly, so schedule the actor as often as you need fresh prices, and use scrapedAt to know when each row was read. Games already in play carry isLive: true.

Why do odds differ between states? FanDuel prices each state on its own feed. Most main lines match, but some markets and props are offered in one state and not in another, and a price can differ slightly. Pick the state you bet in with the state field; 24 states are available.

How many games can one run return? There is no fixed limit besides maxItems. A full NFL board page held 29 games on 7 Oct 2026; every league of a sport can reach a few hundred. With the full board on, each game becomes a much larger row (the Buccaneers at Cowboys row with 274 markets weighed about half a megabyte), so keep maxItems to the games you need.

Why is a game missing, or why are some lines null? FanDuel only lists games it currently prices. A finished game, or one a state does not offer, gives no row. Lines FanDuel has not posted yet (a game far in the future, a soccer total) are null rather than empty text, and suspended markets keep their last price with marketStatus: "SUSPENDED". Computer-played leagues (eSoccer, eBasketball) are left out so they do not crowd out real games.

Can I combine sports, teams and links in one run? Yes. Sports, links and game ids add up, and keywords narrow what the sports and links return. For example, "sports": ["nba", "nhl"] with "keywords": ["Boston"] keeps only the Boston games (Celtics, Bruins) of those two leagues. A game reached twice is delivered once.

Are the links permanent? The url of a game points to its FanDuel page for as long as FanDuel lists the game, and id never changes for a game. Team logo links point to FanDuel's own image library.

What is FanDuel? FanDuel Sportsbook is one of the two largest legal sportsbooks in the United States, with DraftKings, live in more than twenty states. Its lines are a reference point for US bettors, odds comparison sites and betting models.

Is it legal to scrape FanDuel odds? The actor reads odds that FanDuel publishes to every visitor, without logging in. How you use the data is your responsibility: check FanDuel's terms of service and the rules of your state. The actor does not place bets.

More SilentFlow scrapers

๐Ÿ›’ E-commerce

๐Ÿ’ผ Jobs

๐Ÿ  Real estate

๐Ÿ“ฃ Social media

๐Ÿข Business data

โœˆ๏ธ Travel

๐ŸŽฏ Lead generation

๐Ÿ”Ž SEO

๐Ÿ“ˆ Marketing

๐Ÿงฐ More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This actor extracts publicly available data from sportsbook.fanduel.com: games, teams, betting markets and their prices. It does not bypass any login, paywall or CAPTCHA, and it does not place bets. Users are responsible for complying with FanDuel's terms of service and applicable data protection laws (GDPR, CCPA, and PIPL where relevant). Player names appear in prop markets and futures; they are public figures, handle that data accordingly. This actor is not affiliated with, endorsed by or sponsored by FanDuel Group. The data returned is informational and is not betting advice; sports betting involves risk and is only legal for adults in the states that allow it.

FanDuel Scraper by SilentFlow: every FanDuel line as a row, with the probabilities and the margin already worked out.