# FanDuel Odds, Player Props & Same Game Parlay Scraper (`confidential_gnat/fanduel-odds-sgp-scraper`) Actor

Scrapes FanDuel Sportsbook (sportsbook.fanduel.com) odds for NFL, NBA, NHL, MLB, soccer and more: moneylines, spreads, totals, alternate lines, player props, futures, American or decimal odds and a same game parlay eligible flag per selection.

- **URL**: https://apify.com/confidential_gnat/fanduel-odds-sgp-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## FanDuel Odds, Player Props & Same Game Parlay Scraper

**Scrape FanDuel Sportsbook odds and player props from sportsbook.fanduel.com** for the NFL, NBA, NHL, MLB, soccer, tennis and more: moneylines, spreads, totals, alternate lines, game props, futures and **player props**, one row per selection with American or decimal odds, the line, previous odds and a **same game parlay (SGP) eligible** flag. Paste a league or game URL, press Start, and export the **FanDuel odds data** as JSON, CSV or Excel, or call it as an **API**.

![FanDuel odds, player props and same game parlay scraper cover: 1,409 selections from one game](https://i.postimg.cc/Kz3wkCdF/Fan-Duel-Props-Market-Showcase.png)

**Target website:** [sportsbook.fanduel.com](https://sportsbook.fanduel.com)

### ✨ Features of this FanDuel odds, props and same game parlay scraper

- **Odds extraction** — event, teams, league, start time, market, selection, line, American and/or decimal odds and previous odds for every selection
- **Alternate lines and game props** — alternate spreads and totals, team totals, halves, quarters, scoring and other game markets
- **Player props extraction** — player name, prop type (Passing Yds, Points, Anytime TD...), over/under side and line from every props tab
- **Same game parlay flags** — every row says whether FanDuel allows that market in a same game parlay, and the parlay tab lists all combinable markets of a game
- **Futures** — season and outright markets such as Super Bowl winner, MVP and division winners
- **Live games** — optional in-play games with the odds at scrape time
- **Filtering** — market groups, prop type keywords, league and sport pickers, odds format
- **Change tracking** — an optional snapshot name marks every selection new, changed or unchanged since your last run
- **Proxy support** — runs on a US Apify Proxy by default, because FanDuel blocks IPs outside the US
- **No browser required** — plain HTTP requests make runs fast and cheap

### 🚀 How to scrape FanDuel odds and player props in 5 steps

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Keep the prefilled NFL URL or paste any FanDuel league, sport or game URL, then pick the market groups you need.
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 Pricing for the FanDuel odds scraper

This actor uses **pay-per-result** billing based on the compute units a run consumes.

- New Apify accounts include **$5 of free monthly credit**.
- It uses plain HTTP requests, so it costs significantly less to run than browser-based scrapers.
- A US datacenter proxy is enough, which is much cheaper than residential traffic.
- Main lines are cheap (one request per league page). Player props add one request per props tab and the same game parlay tab adds about 1 MB per game, so keep Max events low for prop runs.

### 🔧 FanDuel odds scraper input configuration

The form has the main inputs on top, one optional group of league, sport and filter options, and the proxy at the bottom.

![FanDuel scraper input form with the 9 input fields numbered 1 to 9](https://i.postimg.cc/gJLPWxsn/image.png)

1. **FanDuel league, sport or event URLs** — league, sport or game pages to scrape
2. **Max events** — games per start URL
3. **Market groups** — what to scrape (main lines, alternate lines, player props, game props, same game parlay, futures)
4. **Leagues** — NFL, NBA, NHL, MLB pages in addition to the start URLs
5. **Sports** — whole sport pages
6. **Prop types** — keyword filter for props
7. **Include live (in-play) games** — also return games already started
8. **Odds format** — American, decimal or both
9. **Snapshot name** — compare odds with the previous run

| # | Field | Type | Required | Default | Description |
| - | ----- | ---- | -------- | ------- | ----------- |
| 1 | FanDuel league, sport or event URLs (`startUrls`) | array | — | NFL league page (prefill) | League, sport or single game URLs. Add `?tab=passing-props` to a game URL for one tab. |
| 2 | Max events (`maxItems`) | integer | — | 5 | Games per start URL (futures events counted separately). Each game returns all its selections. |
| 3 | Market groups (`marketGroups`) | array | — | main lines | `main`, `alternate_lines`, `props`, `game_props`, `sgp` (same game parlay eligible markets), `futures`. |
| 4 | Leagues (`leagues`) | array | — | — | NFL, NBA, NHL, MLB pages in addition to the start URLs. |
| 5 | Sports (`sports`) | array | — | — | Whole sport pages: football, basketball, baseball, hockey, soccer, tennis, golf, cricket, rugby union, snooker, MMA. |
| 6 | Prop types (`propTypes`) | array | — | all props | Keep props containing these words, e.g. `passing yds`, `points`. |
| 7 | Include live games (`includeLive`) | boolean | — | false | Also return games already in play. |
| 8 | Odds format (`oddsFormat`) | string | — | american | `american`, `decimal` or `both`. |
| 9 | Snapshot name (`snapshotName`) | string | — | — | Same name on each run adds `changeSinceLastRun` (new, changed, unchanged). Rows are never skipped. |
| — | Proxy configuration (`proxyConfiguration`) | object | — | Apify Proxy, country US | FanDuel blocks non-US IPs. Switch to RESIDENTIAL if blocked. |

**Supported URL types:**

- League pages: `https://sportsbook.fanduel.com/football/nfl`, `/basketball/nba`, `/hockey/nhl`, `/baseball/mlb` (or the short `/nfl`, `/nba`, `/nhl`, `/mlb`)
- Sport pages: `https://sportsbook.fanduel.com/tennis`, `/soccer`, `/golf`, `/mma` and the other sports in the picker
- Game pages: `https://sportsbook.fanduel.com/football/nfl/houston-texans-@-jacksonville-jaguars-35605984` (the number at the end is the event id)

### 📦 FanDuel odds scraper output data (JSON, CSV, Excel)

The dataset is JSON (exportable as CSV or Excel) with these fields per selection: `eventId`, `eventName`, `homeTeam`, `awayTeam`, `league`, `sport`, `startTime`, `isLive`, `marketId`, `marketName`, `marketType`, `marketGroup`, `tab`, `isSgpEligible`, `selectionId`, `selectionName`, `side`, `playerName`, `propType`, `line`, `oddsAmerican`, `previousOddsAmerican`, `oddsDecimal`, `previousOddsDecimal`, `marketStatus`, `url`, `scrapedAt` and, with a snapshot name, `changeSinceLastRun`. The odds columns follow your Odds format choice. There are 3 views:

- **Odds overview** — game, market, selection, line, odds, same game parlay flag and live flag.
- **Games and teams** — game-level columns (teams, league, sport, start time) next to each selection.
- **Player props** — player, prop type, side, line, odds and previous odds.

**Output at a glance:**

| Game | Market | Selection | Line | American | Decimal | SGP |
| ---- | ------ | --------- | ---- | -------- | ------- | --- |
| [Houston Texans @ Jacksonville Jaguars](https://sportsbook.fanduel.com/football/nfl/houston-texans-@-jacksonville-jaguars-35605984) | Moneyline | Houston Texans | — | +120 | 2.2 | yes |
| [Baltimore Ravens @ Cleveland Browns](https://sportsbook.fanduel.com/football/nfl/baltimore-ravens-@-cleveland-browns-36160507) | Total Points | Over | 39.5 | -105 | 1.952 | yes |
| [Houston Texans @ Jacksonville Jaguars](https://sportsbook.fanduel.com/football/nfl/houston-texans-@-jacksonville-jaguars-35605984) | C.J. Stroud - Passing Yds | C.J. Stroud Over | 256.5 | -113 | 1.885 | yes |
| [Houston Texans @ Jacksonville Jaguars](https://sportsbook.fanduel.com/football/nfl/houston-texans-@-jacksonville-jaguars-35605984) | C.J. Stroud - Passing Yds | C.J. Stroud Under | 256.5 | -113 | 1.885 | yes |

**Sample output (raw JSON):**

```json
[
    {
        "eventId": "36160507",
        "eventName": "Baltimore Ravens @ Cleveland Browns",
        "homeTeam": "Cleveland Browns",
        "awayTeam": "Baltimore Ravens",
        "league": "NFL",
        "sport": "American Football",
        "startTime": "2026-10-18T17:01:00.000Z",
        "isLive": false,
        "marketId": "734.190243440",
        "marketName": "Total Points",
        "marketType": "TOTAL_POINTS_(OVER/UNDER)",
        "marketGroup": "main",
        "tab": null,
        "isSgpEligible": true,
        "selectionId": "7017916",
        "selectionName": "Over",
        "side": "over",
        "playerName": null,
        "propType": null,
        "line": 39.5,
        "oddsAmerican": -105,
        "previousOddsAmerican": null,
        "marketStatus": "ACTIVE",
        "url": "https://sportsbook.fanduel.com/football/nfl/baltimore-ravens-@-cleveland-browns-36160507",
        "scrapedAt": "2026-10-18T03:19:14.725Z"
    },
    {
        "eventId": "35605984",
        "eventName": "Houston Texans @ Jacksonville Jaguars",
        "homeTeam": "Jacksonville Jaguars",
        "awayTeam": "Houston Texans",
        "league": "NFL",
        "sport": "American Football",
        "startTime": "2026-10-18T13:30:00.000Z",
        "isLive": false,
        "marketId": "734.191307374",
        "marketName": "C.J. Stroud - Passing Yds",
        "marketType": "PLAYER_X_PASSING_YARDS_HIGH",
        "marketGroup": "props",
        "tab": "Passing Props",
        "isSgpEligible": true,
        "selectionId": "41158959",
        "selectionName": "C.J. Stroud Over",
        "side": "over",
        "playerName": "C.J. Stroud",
        "propType": "Passing Yds",
        "line": 256.5,
        "oddsAmerican": -113,
        "previousOddsAmerican": -114,
        "oddsDecimal": 1.885,
        "previousOddsDecimal": 1.877,
        "marketStatus": "ACTIVE",
        "url": "https://sportsbook.fanduel.com/football/nfl/houston-texans-@-jacksonville-jaguars-35605984",
        "scrapedAt": "2026-10-18T03:19:40.942Z"
    }
]
```

### 🐍 How to scrape FanDuel odds with Python, JavaScript or the API

Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("confidential_gnat/fanduel-odds-sgp-scraper").call(run_input={
    "startUrls": [{"url": "https://sportsbook.fanduel.com/football/nfl"}],
    "maxItems": 5,
    "marketGroups": ["main", "props"],
    "propTypes": ["passing yds"],
    "oddsFormat": "both",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript** (`npm install apify-client`):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('confidential_gnat/fanduel-odds-sgp-scraper').call({
    startUrls: [{ url: 'https://sportsbook.fanduel.com/football/nfl' }],
    maxItems: 5,
    marketGroups: ['main', 'props'],
    propTypes: ['passing yds'],
    oddsFormat: 'both',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**cURL** — start a run and wait for the dataset:

```bash
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~fanduel-odds-sgp-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://sportsbook.fanduel.com/football/nfl"}],"maxItems":5,"marketGroups":["main","props"],"propTypes":["passing yds"],"oddsFormat":"both"}'
```

### 💡 What you can use FanDuel odds and player props data for

- Line shopping and odds comparison against other sportsbooks
- Player prop models and projections that need current lines and prices
- Odds movement and line-change alerts with a scheduled snapshot name
- Same game parlay research: which markets FanDuel lets you combine in each game
- Sports analytics dashboards, betting content and fantasy research

Sports bettors, handicappers, odds-comparison sites, sportsbook data teams, data journalists and fantasy sports analysts typically use this kind of data.

### ⚠️ Limitations of the FanDuel odds scraper

- **Terms of service and regulation** — FanDuel's terms prohibit automated access, and sportsbook odds are regulated and geo-restricted. The actor only reads odds shown to logged-out visitors, never uses an account and places no bets. You are responsible for deciding whether and how to use the data.
- **US IPs only** — FanDuel returns 403 for IPs outside the US. The default US Apify Proxy works; switch to residential if you are blocked.
- **No combined parlay price** — the actor flags which markets are same game parlay eligible and lists them, but it does not price a combined parlay.
- **Simulated games are skipped** — esports-style games with all-caps nicknames (for example NBA games with team nicknames in brackets) are left out.
- **Heavy parlay pages** — the same game parlay tab is about 1 MB and takes around 15 seconds per game, and returns over a thousand rows for a full NFL game. Use a low Max events value.
- **Odds are snapshots** — odds change constantly, so there is no cache. Live odds are the values at scrape time. Soccer and tennis pages are large and can be slow.

### ❓ FanDuel odds scraper FAQ

#### Can I scrape FanDuel legally?

The actor only collects odds that FanDuel shows to any logged-out visitor, without login, account or payment. Scraping publicly available data is generally considered lawful (see *hiQ Labs v. LinkedIn*), but FanDuel's terms of service prohibit scraping and betting data is regulated, so you are responsible for complying with them and with the laws of your jurisdiction.

#### What data does the FanDuel scraper return?

One row per selection with the game, teams, league, market, selection, line, American and decimal odds, previous odds, same game parlay eligibility, live flag and timestamps. Player prop rows add the player name and prop type, and a snapshot name adds `changeSinceLastRun`.

#### How many games can I scrape from one FanDuel URL?

Max events limits the games per start URL (5 by default). Every game returns all its selections, and futures events are limited separately when you pick futures. A league page only lists games FanDuel currently has open.

#### Do I need a proxy to scrape sportsbook.fanduel.com?

Yes, a US one. The input defaults to Apify Proxy with country US (datacenter), which works for the odds data, and a request from outside the US gets a 403. If you are blocked anyway, choose the RESIDENTIAL group with country US.

#### How do I scrape FanDuel with Python?

Use the Python example above with the `apify-client` package and iterate over the dataset items. Pick `props` or `sgp` in `marketGroups` to include player props or parlay eligible markets.

#### Can I run this FanDuel scraper on a schedule?

Yes, use Apify Schedules. There is no cache because odds are only valid for a moment, but you can set a snapshot name so each run marks every selection as new, changed or unchanged compared with the previous run.

#### What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the **Output** tab or through the Apify API.

#### Does the FanDuel scraper return same game parlay prices?

Not the combined price. Every row has `isSgpEligible`, and the same game parlay market group loads every market FanDuel allows in a parlay for a game, so you can see exactly which selections can be combined. The actor does not return a combined parlay price.

### 🔗 Relevant actors for FanDuel odds and sports betting data

| Scraper | Description |
| ------- | ----------- |
| [🎰 DraftKings Sportsbook Odds & Player Props Scraper](https://apify.com/confidential_gnat/draftkings-odds-scraper) | DraftKings odds, player props and parlays for NFL, NBA, MLB, NHL, UFC and soccer. |
| [🏈 Action Network Odds & Public Betting Scraper](https://apify.com/confidential_gnat/action-network-odds-scraper) | Sportsbook odds, public betting splits, opening lines and line movement. |
| [📊 Covers.com Odds, Line History & Betting Trends Scraper](https://apify.com/confidential_gnat/covers-odds-trends-scraper) | Odds from many sportsbooks, line history and betting trends for major leagues. |
| [📈 Kalshi Markets Scraper](https://apify.com/confidential_gnat/kalshi-markets-scraper) | Prediction market prices, implied probability, spread and volume. |
| [🏀 StatMuse Sports Stats Scraper](https://apify.com/confidential_gnat/statmuse-sports-scraper) | NBA, NFL, MLB and NHL stats answers and player game logs from StatMuse. |

### 🔗 Other actors you may find useful

| Scraper | Description |
| ------- | ----------- |
| [🥾 AllTrails Scraper](https://apify.com/confidential_gnat/alltrails-scraper) | Hiking, biking and running trails by park, city, state or coordinates. |
| [📰 Google News AI Scraper](https://apify.com/confidential_gnat/google-news-ai-scraper) | Google News search with optional article text and AI summaries. |
| [🎧 Spotify Monthly Listeners Scraper](https://apify.com/confidential_gnat/spotify-monthly-listeners-scraper) | Artist monthly listeners, followers, top cities, top tracks and related artists. |
| [🍷 Vivino Wine Scraper](https://apify.com/confidential_gnat/vivino-wine-scraper) | Wine name, winery, vintage, region, country and ratings from Vivino. |
| [🏠 Rightmove Property Scraper](https://apify.com/confidential_gnat/rightmove-property-scraper) | UK sale and rent listings from Rightmove with price, address and coordinates. |

### 💬 Support & contact

If you encounter any issues or have questions, please [open an issue](https://apify.com/confidential_gnat/fanduel-odds-sgp-scraper/issues/open).
You can also find more of our actors on the [Actor Flow](https://apify.com/confidential_gnat) page.

# Actor input Schema

## `startUrls` (type: `array`):

FanDuel Sportsbook pages, for example https://sportsbook.fanduel.com/football/nfl or https://sportsbook.fanduel.com/basketball/nba (league pages), https://sportsbook.fanduel.com/tennis (sport page) or a single game page such as https://sportsbook.fanduel.com/football/nfl/houston-texans-@-jacksonville-jaguars-35605984. Add ?tab=passing-props to a game URL to fetch one specific tab. Leave empty to use the league and sport pickers below.

## `maxItems` (type: `integer`):

Maximum games per start URL (and, when futures are selected, maximum futures events per start URL). Every game returns all its selections. A game page counts as one.

## `marketGroups` (type: `array`):

What to scrape. Main lines = moneyline, spread, totals. Alternate lines = alternate spreads and totals, team totals (loads the Popular tab, one extra request per game). Player props = every player props tab (one extra request per tab). Game props = halves, quarters, scoring, specials and other game markets (one extra request per tab). Same game parlay = every market FanDuel allows in a same game parlay (loads the large parlay tab, about 15 seconds per game). Futures = outright and season markets. Leave empty for main lines only.

## `leagues` (type: `array`):

League pages to scrape in addition to the start URLs.

## `sports` (type: `array`):

Whole sport pages (every league FanDuel lists for the sport, for example college football with the NFL).

## `propTypes` (type: `array`):

Only keep player prop and game prop markets that contain one of these words, for example passing yds, points, rebounds, touchdown, strikeouts, quarter. Leave empty for all.

## `includeLive` (type: `boolean`):

Also return games that already started. Live odds change every few seconds, so each record shows the odds at scrape time.

## `oddsFormat` (type: `string`):

American odds (+120, -110), decimal odds (2.20, 1.91) or both.

## `snapshotName` (type: `string`):

Optional. Use the same name on each scheduled run to compare odds with the previous run. Every record gets changeSinceLastRun: new, changed or unchanged (odds or line moved). Records are never skipped, so odds are always fresh.

## `proxyConfiguration` (type: `object`):

FanDuel blocks IPs outside the US. Use Apify Proxy with country US (datacenter works). If you still get blocked, switch to the RESIDENTIAL group.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://sportsbook.fanduel.com/football/nfl"
    }
  ],
  "maxItems": 5,
  "marketGroups": [],
  "leagues": [],
  "sports": [],
  "propTypes": [],
  "includeLive": false,
  "oddsFormat": "american",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://sportsbook.fanduel.com/football/nfl"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/fanduel-odds-sgp-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": [{ "url": "https://sportsbook.fanduel.com/football/nfl" }] }

# Run the Actor and wait for it to finish
run = client.actor("confidential_gnat/fanduel-odds-sgp-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://sportsbook.fanduel.com/football/nfl"
    }
  ]
}' |
apify call confidential_gnat/fanduel-odds-sgp-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/fanduel-odds-sgp-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/wHsTr6ECtVo2fQEg2/builds/kzSQbLoVNyXqgorwG/openapi.json
