FanDuel Odds Scraper - Live Sports, Markets & Player Props avatar

FanDuel Odds Scraper - Live Sports, Markets & Player Props

Pricing

from $1.40 / 1,000 odds records

Go to Apify Store
FanDuel Odds Scraper - Live Sports, Markets & Player Props

FanDuel Odds Scraper - Live Sports, Markets & Player Props

Scrape FanDuel sportsbook odds, including moneylines, spreads, totals, player props and futures. Extract decimal, fractional and American odds, live event markers and kickoff times. Supports scheduled incremental monitoring to track odds changes.

Pricing

from $1.40 / 1,000 odds records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

FanDuel Odds Scraper

FanDuel sportsbook odds for the whole board: moneylines, spreads, totals, player props, futures and Same Game Parlay markets, each price delivered in decimal, fractional and American formats. Read the featured cross-sport board, walk any sport the book offers, or paste links to specific league pages and games. Live markers, kickoff times, the site's own SGP picks, and scheduled odds monitoring in one actor.

Why This Scraper?

  • The board, all three formats. Every price ships as decimal, fractional and American side by side, so no conversion table is needed on your end.
  • Beyond the main board. Alongside each event's moneyline, spread and total, the run collects the player-prop and futures markets the board carries (alternate rushing yards, championship winners, elimination stage and more) as their own rows.
  • Any sport, not just the featured mix. Sports mode walks the board of any sport the book offers - all 19 of them, from NFL and NBA to rugby, darts and table tennis - instead of only what the featured page happens to show today.
  • Same Game Parlay surface. The site's own SGP suggestions ship as pick rows with every leg named and priced, and an optional per-event toggle reads each game's full SGP market tab.
  • Paste a link to any page. League pages, whole sports, or a single game's own board: paste the link, the run reads exactly that page.
  • Built for line watching. Incremental mode keeps a per-scope baseline and emits NEW, UPDATED, REAPPEARED and EXPIRED records: odds movements are the change signal, and price history from the previous scan is retained in the baseline for movement analysis.
  • State-region aware with honest live markers. Read any FanDuel state site (New Jersey default) with the region picker; every record carries the in-play flag and kickoff time straight from the sportsbook's own feed.

Use Cases

  • Line shoppers: pull FanDuel's current prices across leagues and compare against other books before placing a bet.
  • SGP builders: pull every SGP-eligible market for one game, or watch the site's own picks with their legs.
  • Odds traders: schedule incremental runs to watch line movement and record every move between runs.
  • Model builders: build datasets with decimal, fractional and American prices side by side for backtesting.
  • Content pipelines: generate previews with current prices, team names, and market narratives.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
idfanduel:9c2f41ab77e31d
matchupJAX Jaguars @ BAL Ravens
home / awayBaltimore Ravens / Jacksonville Jaguars
homeAbbr / awayAbbrBAL / JAX
kickoffTime2026-11-06T01:16:00.000Z
inplayfalse
moneyline{"marketName": "Moneyline", "selections": [{"name": "BAL", "odds": {"decimal": 1.83, "fractional": "100/120", "american": -120}}]}
spread{"selections": [{"handicap": -9.5, "odds": {"american": -110}}]}
total{"selections": [{"handicap": 44.5, "odds": {"american": -105}}]}
marketTypeNBA_FINALS_WINNER
marketName26-27 NBA Finals Winner
selections[]{"name": "Oklahoma City Thunder", "odds": {"decimal": 5.5, "american": 450}}
marketId734.194084044
kindfutures
competitionNBA
eventTypeId7522
totalBets1013
legs[]{"name": "D.Henry", "marketName": "Anytime TD Scorer", "odds": {"american": -150}}
homeLogo / awayLogohttps://assets.sportsbook.fanduel.com/images/team/nfl/...
selections[].odds.decimal1.83
selections[].odds.american-120
oddsTimestamp2026-11-04T05:00:00+00:00
changeType / changedFieldsUPDATED / ["moneyline"]
firstSeenAt / lastSeenAt2026-11-01T... / 2026-11-04T...

How to Use

The run reads FanDuel's own public odds feeds directly (no login, no browser): pick a mode and a region, set Max items, run.

  • popular covers the site's featured cross-sport board: each event ships with its moneyline, spread and total, every prop/futures market ships as its own row, and the site's own Same Game Parlay picks ship with their legs.
  • sports walks the board of every sport you pick - the league page the site maintains for the major US sports, the whole-sport page for the rest.
  • urls reads exactly the pages you paste: league pages, whole sports, or one game's own board.

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("abotapi/fanduel-odds-scraper").call(run_input={
"mode": "popular",
"region": "NJ",
"maxItems": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('abotapi/fanduel-odds-scraper').call({
mode: 'popular',
region: 'NJ',
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Scheduled line monitoring: turn on incremental mode with a stateKey; every run pushes only NEW, UPDATED, REAPPEARED or EXPIRED records.

Input examples

Default board snapshot:

{ "mode": "popular", "region": "NJ", "maxItems": 20 }

Scheduled incremental monitoring:

{ "mode": "popular", "region": "NJ", "incrementalMode": true, "stateKey": "nj-board", "maxItems": 200 }

Walk two whole sports:

{ "mode": "sports", "sports": ["American Football", "Soccer"], "region": "NJ", "maxItems": 200 }

One game's own board, with its SGP markets:

{ "mode": "urls", "urls": ["https://sportsbook.fanduel.com/football/nfl/team-a-@-team-b-36244870"], "fetchSgpMarkets": true, "maxItems": 100 }

Input Parameters

ParameterTypeDefaultDescription
modeSelectpopularpopular = the featured cross-sport board; sports = walk whole sports; urls = read the pages you paste.
sportsMulti-selectNFL, NBAsports mode: which sports to walk (all 19 the book offers).
urlsListthree example linkslinks mode: FanDuel league pages, whole-sport pages, or single-game links.
regionSelectNJWhich FanDuel state site to read; odds and availability vary by state.
liveOnlyBooleanfalseKeep only records whose game is flagged in-play on the pages read this run.
fetchSgpMarketsBooleanfalseAlso read each collected event's Same Game Parlay market tab; each event whose SGP markets are delivered counts as one enrichment read.
maxItemsInteger20Stop after this many odds records (boards, markets, picks and SGP tabs all count). Leave 0 for no limit.
proxyProxyResidential USResidential US exits are recommended for the most reliable results.
resumeFromRunIdString(empty)Continue a previous run: records that run already delivered are skipped.
incrementalModeBooleanfalseKeep a per-scope baseline; emit NEW, UPDATED, REAPPEARED, EXPIRED records.
stateKeyString(empty)Optional name for the incremental baseline; separate keys per scope.
emitUnchangedBooleanfalseIncremental mode: also push records whose odds did not move.
emitExpiredBooleanfalseIncremental mode: after a complete scan, push rows for records no longer present.
ignoreFieldsForChangesList(empty)Extra fields that must never mark a row UPDATED.
mcpConnectorsList(empty)Apify MCP connector IDs to notify with the first collected rows. Leave empty to skip.
maxNotifyListingsInteger10Internal: how many of the first collected rows a connector export may send.
notionParentPageUrlString(empty)Internal: target page for a Notion connector export.

Output Example

The dataset carries three record kinds behind the union view: event boards (moneyline/spread/total flattened per game), markets (props, futures, and - with the toggle on - each event's SGP market tab), and the site's own Same Game Parlay picks with their legs. The Output tabs split them.

Sample shape: values are illustrative placeholders, not from a live record.

{
"id": "fanduel:9c2f41ab77e31d",
"matchup": "JAX Jaguars @ BAL Ravens",
"home": "Baltimore Ravens",
"away": "Jacksonville Jaguars",
"kickoffTime": "2026-11-06T01:16:00.000Z",
"inplay": false,
"moneyline": {
"marketName": "Moneyline",
"selections": [
{ "name": "Baltimore Ravens", "odds": { "decimal": 1.83, "fractional": "100/120", "american": -120 } },
{ "name": "Jacksonville Jaguars", "odds": { "decimal": 1.98, "fractional": "100/102", "american": -102 } }
]
},
"oddsTimestamp": "2026-11-04T05:00:00+00:00"
}

Send results into your apps (MCP connectors)

Give an MCP connector ID in mcpConnectors and the run notifies your connected app (Notion, Sheets and more) with the first collected rows, capped by the internal maxNotifyListings setting. No connector configured means the run skips the export step entirely.

Plan Requirement

This actor is billed per event: a start charge per run, a charge for each odds record delivered, and - with the SGP toggle on - one enrichment charge per event whose SGP market tab is delivered. A paid Apify plan is recommended; residential US proxy usage rides your plan's residential allowance.

FAQ

How much does a run cost?

The start event bills once per run and each delivered record bills once. The run reads the sportsbook's public feeds, so larger Max items barely increase cost: schedule fewer, larger runs for the lowest per-record price. Your run's Pricing tab shows live per-event prices for your plan.

The actor reads only the publicly displayed odds feeds of FanDuel's state sportsbooks, without logging in and without taking account-held data. You remain responsible for complying with FanDuel's terms and your local regulations; gambling availability depends on your jurisdiction.

Can I monitor line movement on a schedule?

Yes. Enable incremental mode with a stateKey and schedule runs: each run diffs against the previous scan and pushes only NEW, UPDATED, REAPPEARED or EXPIRED records. Odds movements are the change signal.

Why are some sports missing from my run?

In the default mode the run reads the site's featured cross-sport board, whose mix rotates with the sports calendar. Switch to sports mode and pick the sports you want to walk their whole boards regardless of what is featured today. A sport with no live or upcoming events serves an empty board - out-of-season sports simply have nothing to price.

Does this cover live (in-play) games?

The actor marks every record with the in-play flag and kickoff time the feed carries, and a Live games only filter keeps records whose game is running right now. The book's dedicated live page itself is not anonymously readable, so the filter works over the pages the run reads rather than walking a live-only feed.

What does the SGP toggle cost?

Each event whose Same Game Parlay market tab is read and delivered counts as one enrichment charge on top of the per-record charge; events whose tab cannot be read, runs with the toggle off, and events suppressed as unchanged are never charged. Your run's Pricing tab shows the live per-event prices for your plan.

Why did my run fail with "the site refused every connection"?

The sportsbook's edge can refuse connections in waves. The actor rides residential exits and retries, but a full wave fails honestly; re-run shortly.

Can I use this with AI agents and MCP?

Yes, via the Apify MCP server: add abotapi/fanduel-odds-scraper and ask for odds naturally. Every field is plain JSON.

🔗 Want more sports data?

Pair this actor with these related scrapers from the same team:

⚽ bet365 Odds Scraper
Scrape bet365 live in-play and pre-match odds across 20+ sports. Extract fixture...
⚽ Sportsbook Odds Scraper (1xBet, Melbet, Linebet, Paripulse)
Collect live and prematch betting odds from 1xBet, Melbet, Linebet and Paripulse. Give it...
⚽ SofaScore Scraper ⚽ Live Scores, Stats, Players & Odds
Pull structured sports data from SofaScore across football, basketball, tennis, and 20+...
⚽ FotMob Scraper ⚽ Match Details, Stats, Lineups & Players
Pull structured football data from FotMob: match details with scores, team stats, events...
⚽ Globo Esporte Scraper
Scrape public sports content from ge.globo.com, including news, videos, matches and feed...
⚽ JioHotstar Scraper
Scrape the JioHotstar catalog by content type or URL. Extract shows, movies, episodes...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.