FanDuel Sportsbook Odds Scraper avatar

FanDuel Sportsbook Odds Scraper

Pricing

Pay per event

Go to Apify Store
FanDuel Sportsbook Odds Scraper

FanDuel Sportsbook Odds Scraper

🏟️ Extract current FanDuel events, pregame and live markets, selections, handicaps, and three odds formats for monitoring, comparison, and sports data analysis.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Collect current FanDuel events, betting markets, selections, handicaps, and American, decimal, and fractional odds as clean JSON, CSV, Excel, or API output.

FanDuel Sportsbook Odds Scraper turns FanDuel's public sportsbook data into analysis-ready rows. Each row connects a sport, competition, event, market, and selection with stable source IDs and a retrieval timestamp.

Use it for scheduled line snapshots, odds comparison, quantitative research, dashboards, and alerts without maintaining a browser crawler.

  • 🏟️ 14 sport presets including basketball, American football, baseball, hockey, soccer, tennis, golf, and MMA
  • πŸ“ˆ Three odds formats in every available selection record
  • πŸ”΄ Live filtering for in-play monitoring
  • 🧩 Raw IDs and timestamps for reliable joins and historical snapshots
  • ⚑ Direct public JSON with an optional US proxy fallback

What does FanDuel Sportsbook Odds Scraper do?

The Actor requests current public FanDuel SPORT data for the sports you select.

It joins FanDuel's event type, competition, event, market, and runner dictionaries.

It then saves one normalized dataset item for every matching market selection.

You can:

  1. Select one or several sports.
  2. Limit how many upcoming events are processed.
  3. Keep only live markets.
  4. Match exact FanDuel market type codes.
  5. Include or exclude inactive markets and selections.
  6. Add custom FanDuel event type IDs.
  7. Cap the final number of selection rows.

The result is immediately usable in spreadsheets, databases, notebooks, and automation tools.

Who is it for?

Odds comparison teams

Collect a timestamped FanDuel leg for a multi-sportsbook comparison service.

Join records by event, market, selection, and handicap in your downstream model.

Betting analysts

Export current lines to Python or R for implied probability, hold, and line movement analysis.

Use decimal odds for calculations while keeping American and fractional display values.

Quantitative researchers

Schedule repeated snapshots and retain retrievedAt with raw FanDuel IDs.

Build historical features without parsing presentation HTML.

Automation builders

Trigger alerts when a live market appears, a selection reaches a threshold, or a market status changes.

Send matching rows to Slack, webhooks, Google Sheets, or a database.

Sports data products

Use a lightweight FanDuel-specific source when a broader multi-book feed is unnecessary.

Why use this FanDuel odds extractor?

  • βœ… Normalized output: no manual joins across attachment dictionaries.
  • βœ… Monitoring-ready: every row includes a retrieval time and source URL.
  • βœ… Bounded runs: maxEvents and maxSelections control output and cost.
  • βœ… Transparent filters: market type, in-play, and status controls are explicit.
  • βœ… Low compute: direct HTTP avoids full browser rendering.
  • βœ… Flexible access: direct requests are attempted first; proxy use is configurable.
  • βœ… Apify integrations: export, schedule, API, webhook, and MCP support are built in.

What FanDuel data can you extract?

Field groupExample fieldsWhy it matters
Sourcesource, sourceUrl, retrievedAtProvenance and snapshot history
Sportsport, eventTypeIdSport grouping and raw FanDuel joins
CompetitioncompetitionId, competitionName, competitionRegionLeague and regional segmentation
EventeventId, eventName, eventStartTime, eventInPlayMatch identity and scheduling
MarketmarketId, marketName, marketType, marketStatus, marketTimeMarket comparison and lifecycle
SelectionselectionId, selectionName, selectionSide, selectionStatusTeam, player, or outcome identity
Linehandicap, americanOdds, decimalOdds, fractionalOddsDisplay and probability analysis
PresentationselectionAbbreviation, logoUrlOptional dashboard labels and artwork

Optional fields are omitted when FanDuel does not provide them for a selection.

Numeric odds and handicaps remain numbers rather than formatted strings.

Supported sports

The verified presets are:

  • Soccer
  • Tennis
  • Golf
  • American football
  • Baseball
  • Basketball
  • Ice hockey
  • Cricket
  • Boxing
  • Motor sport
  • Rugby league
  • Darts
  • Mixed martial arts
  • Volleyball

FanDuel availability changes through the sports calendar.

Advanced users can add positive FanDuel eventTypeIds without waiting for a new preset.

How to scrape FanDuel sportsbook odds

  1. Open the Actor input page.
  2. Choose one or more sports.
  3. Set a small maxEvents value for your first run.
  4. Set maxSelections to the largest dataset you want.
  5. Enable Live / in-play only if needed.
  6. Optionally add exact FanDuel market type codes.
  7. Keep Direct, then proxy fallback unless you have a routing requirement.
  8. Click Start.
  9. Preview the dataset and export it in your preferred format.
  10. Add a schedule for repeated line snapshots.

Start with one sport and two events to understand the source's current market shape.

Input parameters

InputTypeDefaultDescription
sportsarray['basketball']Verified FanDuel sport presets
maxEventsinteger5Earliest events processed per sport
maxSelectionsinteger500Maximum normalized rows across the run
inPlayOnlybooleanfalseKeep only markets marked in play
marketTypesarrayemptyExact FanDuel market type codes
includeInactivebooleanfalseInclude closed/suspended records
eventTypeIdsarrayemptyAdditional positive FanDuel event type IDs
timezonestringAmerica/New_YorkIANA timezone sent to FanDuel
proxyModestringfallbackDirect-first, always proxy, or direct only
proxyConfigurationobjectUS residentialApify Proxy settings used when required

An empty marketTypes list allows every market type.

An unknown market type matches nothing and causes an explicit no-results failure.

Example input

{
"sports": ["basketball", "baseball"],
"maxEvents": 10,
"maxSelections": 1000,
"inPlayOnly": false,
"marketTypes": ["MONEY_LINE"],
"includeInactive": false,
"timezone": "America/New_York",
"proxyMode": "fallback"
}

For live monitoring, set inPlayOnly to true and run on a schedule.

If no selected sport currently has live markets, that run fails rather than returning a misleading empty success.

Example output

{
"source": "FanDuel Sportsbook",
"sourceUrl": "https://sbapi.nj.sportsbook.fanduel.com/api/content-managed-page?...",
"retrievedAt": "2026-07-17T20:00:00.000Z",
"sport": "Basketball",
"eventTypeId": 7522,
"competitionId": 12669662,
"competitionName": "NBA Summer League",
"competitionRegion": "US",
"eventId": 35829341,
"eventName": "Chicago Bulls @ Cleveland Cavaliers",
"eventStartTime": "2026-07-17T23:00:00.000Z",
"eventInPlay": false,
"marketId": "734.176781149",
"marketName": "Moneyline",
"marketType": "MONEY_LINE",
"marketStatus": "OPEN",
"marketTime": "2026-07-17T23:00:00.000Z",
"inPlay": false,
"bettingType": "ODDS",
"selectionId": 237494,
"selectionName": "Chicago Bulls",
"selectionAbbreviation": "CHI Bulls",
"selectionStatus": "ACTIVE",
"selectionSide": "AWAY",
"handicap": 0,
"americanOdds": 138,
"decimalOdds": 2.38,
"fractionalOdds": "138/100"
}

IDs are preserved exactly where practical so repeated snapshots can be compared reliably.

How much does it cost to scrape FanDuel odds?

This Actor uses pay-per-event pricing.

A small one-time start charge covers run setup.

A selection charge applies to each normalized odds row saved.

The live Apify pricing panel is authoritative and shows tier discounts for your plan.

As a simple estimate:

estimated price = start charge + saved selections Γ— your tier's selection price

Use low maxEvents and maxSelections values while designing a workflow.

The free Apify plan can be used for small evaluation runs, subject to your available platform credits.

No hidden browser or mandatory proxy request is made when direct access works.

Tips for reliable odds snapshots

  • πŸ•’ Run shortly before event start to capture denser market coverage.
  • πŸ” Use a schedule and store every snapshot in your own persistent destination.
  • πŸ†” Join history by eventId, marketId, selectionId, and handicap.
  • 🎯 Filter market types only after observing FanDuel's exact codes in a broad run.
  • πŸ“‰ Use decimal odds when calculating implied probabilities.
  • 🌎 Keep a US proxy configured if your execution region cannot access FanDuel directly.
  • πŸ§ͺ Start with two events before scaling to multiple sports.
  • πŸ›‘ Treat a failed no-results run as a signal to inspect sport availability and filters.

Odds are time-sensitive. A dataset reflects the retrieval time, not a permanent quote.

Monitoring line movement

Schedule the Actor every few minutes or at the cadence appropriate for your use case.

For every snapshot:

  1. Store retrievedAt.
  2. Build a compound key from market and selection IDs plus handicap.
  3. Compare americanOdds or decimalOdds with the previous value.
  4. Trigger an alert only when your movement threshold is crossed.
  5. Retain status transitions to distinguish movement from suspension.

Do not overwrite prior rows if historical movement is the goal.

A warehouse table or append-only object store works well for this pattern.

Integrations

Google Sheets

Use the Google Sheets integration to append compact market snapshots for manual review.

Filter to one sport and one market type to keep sheets manageable.

Webhooks and alerts

Attach a run-finished webhook, read the dataset, and send qualifying line changes to Slack or Discord.

BigQuery, Snowflake, and PostgreSQL

Export rows into your warehouse and partition them by retrievedAt or event date.

Raw IDs make incremental upserts and time-series joins predictable.

Zapier and Make

Trigger downstream workflows after a scheduled run and route only records that match your rules.

Python notebooks

Load dataset JSON into pandas for probability conversion, hold calculations, and exploratory analysis.

Run through the Apify API with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fanduel-sportsbook-odds-scraper').call({
sports: ['basketball'],
maxEvents: 5,
maxSelections: 250,
proxyMode: 'fallback'
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Store the token in an environment variable rather than source control.

Run through the Apify API with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/fanduel-sportsbook-odds-scraper').call(run_input={
'sports': ['american-football'],
'maxEvents': 10,
'maxSelections': 500,
'proxyMode': 'fallback',
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[:3])

The Python client can also start asynchronous runs for monitoring systems.

Run through the Apify API with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~fanduel-sportsbook-odds-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sports": ["soccer"],
"maxEvents": 5,
"maxSelections": 250,
"proxyMode": "fallback"
}'

Poll the returned run or use the synchronous API endpoint when appropriate.

Use with Apify MCP and AI agents

Add the Actor to Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/fanduel-sportsbook-odds-scraper"

For Claude Desktop, Cursor, or VS Code, add this MCP server configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/fanduel-sportsbook-odds-scraper"
}
}
}

Example prompts:

  • β€œGet current FanDuel basketball moneyline selections for the next five events.”
  • β€œCollect live baseball odds and summarize the largest implied probability differences.”
  • β€œExport FanDuel MMA event markets with American and decimal odds.”

Always ask an agent to note the retrieval timestamp when discussing current odds.

Proxy and geographic access

FanDuel is a US sportsbook and access can vary by execution region.

The default mode tries the public JSON endpoint directly first.

A proxy is used only if that direct request fails.

Choose Always use proxy when your workflow requires consistent US routing.

Choose Direct only when you do not want proxy fallback under any circumstances.

The default proxy configuration targets US residential addresses, but proxy bandwidth may add platform cost when used.

No FanDuel account, password, private cookie, or paid API key is requested by this Actor.

Limitations

  • FanDuel can change public endpoints, fields, or its public web-client key.
  • Sport and market availability varies by season, time, and jurisdiction.
  • The Actor extracts the current public snapshot; it does not reconstruct historical odds.
  • maxEvents uses the source's event start ordering.
  • Custom event type IDs must resolve through the same FanDuel SPORT data surface.
  • A market can omit an odds format or presentation field.
  • FanDuel's terms and regional restrictions remain applicable to users.
  • This Actor does not place bets, manage accounts, or provide betting advice.

When FanDuel returns no matching active selections, the Actor fails explicitly.

This Actor accesses public sportsbook data and does not bypass login controls.

Scraping legality depends on jurisdiction, intended use, contract terms, data volume, and handling practices.

You are responsible for reviewing FanDuel's terms and applicable law.

Use conservative schedules, avoid disrupting the service, and do not use output for unlawful gambling activity.

Do not collect or infer personal data with this Actor.

The output is factual market information, not financial or betting advice.

Troubleshooting

Why did the run say no matching selections were extracted?

The selected sport may be out of season, inPlayOnly may have no current matches, or an exact market type filter may not exist in the current response.

Run one sport without marketTypes and with inPlayOnly: false to inspect current coverage.

Why did a direct request fail?

FanDuel can restrict traffic by geography or rate.

Keep proxyMode: 'fallback' and configure a US Apify Proxy, or choose always for consistent US routing.

Why is an odds field missing?

FanDuel does not publish every odds representation for every market state.

Optional values are omitted rather than replaced with fabricated zeroes.

Why are there several rows for one event?

The dataset unit is one selection inside one market.

An event naturally contains multiple markets and every market contains multiple selections.

FAQ

Does this scrape live FanDuel odds?

Yes. Enable inPlayOnly to keep markets FanDuel currently marks as in play.

Can I extract NFL, NBA, MLB, and NHL data?

Yes. Use American football, basketball, baseball, and ice hockey presets.

Presets reflect sport families, so output can include multiple competitions within each sport.

Can I request several sports in one run?

Yes. maxEvents applies separately to every selected sport and maxSelections applies globally.

Does it require a FanDuel login?

No. V1 uses public sportsbook JSON and does not accept FanDuel credentials.

Can I get historical line movement?

Create history by scheduling repeated runs and storing each timestamped snapshot.

The source response itself is current-state data.

What is a selection row?

It is one runner or outcome in one market, such as a team in a moneyline market.

Are the odds guaranteed?

No. Sportsbook prices change quickly and may be suspended or unavailable.

Always verify current prices on the official service before making decisions.

Use source-specific Actors together when you need cross-source validation.

Data quality and responsible use

The Actor preserves raw source IDs and avoids inventing missing odds.

Validate market semantics before combining differently named market types.

Monitor source changes through failed runs and logs rather than silently accepting empty datasets.

For production systems, retain sample records and schema checks so an upstream change is detected quickly.

FanDuel Sportsbook Odds Scraper is designed for data collection and automation, not wagering execution.