# Draftkings Odds Scraper (`mrdoe/draftkings-odds-scraper`) Actor

Scrape DraftKings betting odds, live and pre-match sports odds for NFL, NBA, MLB, NHL, UFC, soccer and more. Extract moneyline, spreads, run lines, puck lines and over/under totals with American and decimal prices for odds comparison, line shopping and analysis.

- **URL**: https://apify.com/mrdoe/draftkings-odds-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![Draftkings Odds Scraper hero](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/draftkings-odds-scraper--hero.png)

### What does DraftKings Odds Scraper do?

DraftKings Odds Scraper collects betting odds from DraftKings Sportsbook and returns them as clean, ready-to-use data — one row per match. Pick a sport (or paste a match URL), press **Start**, and download a dataset with the two teams, league, start time, live status, and **prices for the main markets** — moneyline, spread / run line / puck line, and totals (over/under) — plus a full `markets` array with every other line DraftKings lists for the match. Every price comes in both **American and decimal** formats.

Use it for odds comparison, line shopping, closing-line value analysis, model back-testing, and trading dashboards across US sports and major soccer leagues.

### Why use DraftKings Odds Scraper?

- **One of the largest US sportsbooks** – DraftKings's line is a core reference for the American market.
- **Prices you can use immediately** – `odds.moneyline.home`, `odds.total.over`, `odds.spread.line`. No decoding.
- **American and decimal** – both formats on every price.
- **Pre-match and live** – switch between the pre-match board and the in-play feed, or take both.
- **Whole leagues in one run** – point it at a league and it walks the board.
- **Clean, normalised output** – odds as numbers, ISO start times, deduplicated by match.

### What makes this different?

Most DraftKings data online is stale screenshots or partial exports. This Actor returns the live board: the three main markets flattened into named fields (`moneyline`, `spread`, `total`) with home / away / draw / over / under selections and the line already attached, with the line already attached, and a full `markets` array alongside. Odds come in both American and decimal formats and matches are deduplicated by DraftKings event ID.

### What data can you extract?

![Draftkings Odds Scraper dataset output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/draftkings-odds-scraper--output.png)

![Draftkings Odds Scraper data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/draftkings-odds-scraper--fields.png)

| Field                 | Description                                 |
| --------------------- | ------------------------------------------- |
| `matchId`             | DraftKings event ID                         |
| `url`                 | Match page URL on sportsbook.draftkings.com |
| `bookmaker`           | Always `DraftKings`                         |
| `sportId`             | DraftKings sport ID                         |
| `league` / `leagueId` | Competition                                 |
| `home` / `away`       | Team names                                  |
| `startTime`           | Scheduled start (ISO 8601)                  |
| `status` / `isLive`   | `prematch` or `live`                        |
| `odds`                | Tidy main markets — see below               |
| `markets`             | Every priced market line for the match      |
| `totalMarkets`        | Number of market lines in the row           |
| `scrapedAt`           | ISO timestamp of collection                 |

**The `odds` object:**

```json
{
    "moneyline": { "home": 1.45, "away": 2.84, "draw": null },
    "spread": { "line": 1.5, "home": 2.04, "away": 1.8 },
    "total": { "line": 7.5, "over": 1.91, "under": 1.91 }
}
```

### How to use DraftKings Odds Scraper

![How Draftkings Odds Scraper works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/draftkings-odds-scraper--how-it-works.png)

1. Open the Actor.
2. Choose a **Feed** (pre-match / live / both) and one or more **Sports**.
3. Optional — paste **Match URLs** from sportsbook.draftkings.com for individual matches.
4. Set **Max matches** and press **Start**.
5. Download the dataset as JSON, CSV, Excel, or XML, or use the API.

### Input Parameters

| Parameter            | Type    | Required | Default        | Description                                                                                                                           |
| -------------------- | ------- | -------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `mode`               | String  | No       | `prematch`     | `prematch`, `live` (in-play), or `both`.                                                                                              |
| `sports`             | Array   | No       | `["MLB"]`      | League codes: `NFL`, `NCAAF`, `NBA`, `NCAAB`, `WNBA`, `MLB`, `NHL`, `EPL`, `UCL`, `MLS`, `UFC`. `["all"]` for every supported league. |
| `matchUrls`          | Array   | No       | –              | sportsbook.draftkings.com match page URLs.                                                                                            |
| `maxMatches`         | Integer | No       | 5              | Maximum matches per league. Raise for a full export (the form prefills 25).                                                           |
| `includeMarkets`     | Boolean | No       | `true`         | Keep the full `markets` array next to the tidy `odds` object.                                                                         |
| `useCache`           | Boolean | No       | `false`        | Reuse match records from an earlier run.                                                                                              |
| `proxyConfiguration` | Object  | No       | US Residential | DraftKings Sportsbook is US-only, so a US proxy is required and used by default.                                                      |

### Output Data

```json
{
    "matchId": "34599441",
    "url": "https://sportsbook.draftkings.com/event/sf-giants-pit-pirates/34599441",
    "bookmaker": "DraftKings",
    "sportId": "7",
    "league": "MLB",
    "leagueId": "84240",
    "home": "PIT Pirates",
    "away": "SF Giants",
    "startTime": "2026-09-01T22:40:00.000Z",
    "status": "prematch",
    "isLive": false,
    "totalMarkets": 3,
    "odds": {
        "moneyline": { "home": 1.58, "away": 2.41 },
        "spread": { "line": 1.5, "home": 2.34, "away": 1.61 },
        "total": { "line": 7.5, "over": 1.89, "under": 1.93 }
    },
    "markets": [
        {
            "market": "Moneyline",
            "marketType": "Moneyline",
            "prices": [
                {
                    "selection": "home",
                    "label": "PIT Pirates",
                    "line": null,
                    "priceAmerican": -158,
                    "priceDecimal": 1.58
                },
                { "selection": "away", "label": "SF Giants", "line": null, "priceAmerican": 141, "priceDecimal": 2.41 }
            ]
        }
    ],
    "scrapedAt": "2026-09-01T22:15:00.000Z"
}
```

### Usage Examples

**Today's MLB prices**

- `mode`: `prematch`, `sports`: `["MLB"]`, `maxMatches`: 50

**Live NBA odds**

- `mode`: `live`, `sports`: `["NBA"]`

**Several leagues at once**

- `mode`: `prematch`, `sports`: `["NFL", "NBA", "NHL"]`, `maxMatches`: 100

**One match, every line**

- `sports`: `[]`, `matchUrls`: a sportsbook.draftkings.com match URL

### Tips for Best Results

- Spread and total lines appear closer to game time; matches several days out may show moneyline only.
- American and decimal are both provided — use whichever your model needs.
- For closing-line value work, schedule the Actor near start time and diff the `odds` against an earlier run.

### Known Limitations

- DraftKings Sportsbook operates only in certain US states; a US proxy is required and some sports are seasonal.
- Odds move constantly; a row is a snapshot at collection time.
- Live markets are briefly suspended around scoring events, so some prices can be missing.
- Matches far in the future may carry only the moneyline until DraftKings posts the rest.
- The Actor collects the game-line markets (moneyline, spread / run line / puck line, total). Deep prop and period markets are out of scope for now.

### Integrations

Connect results to Google Sheets, Make, Zapier, Slack, or your own systems via the Apify API and webhooks. Schedule runs to build an odds history.

### Export Formats

JSON, CSV, Excel, and XML from the Dataset tab or the Apify API.

### Frequently Asked Questions

#### How many matches can I collect?

`maxMatches` applies per sport. Raise it for a full export of a sport's board.

#### Can I target one match?

Yes — paste its **Match URL** from sportsbook.draftkings.com and set `sports` to empty.

#### Why are some odds fields null?

Not every match offers every market — soccer moneylines are 3-way (with `draw`), US sports are 2-way, and spreads/totals may not be posted yet for distant fixtures.

#### Does it cover live betting?

Yes. Set `mode` to `live` (or `both`). Live rows are marked `isLive: true`.

#### Why is a US proxy required?

DraftKings Sportsbook is only accessible from inside the United States. The Actor uses Apify US residential proxy by default.

#### How are duplicates handled?

Matches are deduplicated by DraftKings event ID within a run.

#### How fresh is the data?

Every run reads the live odds feed. Schedule the Actor to keep an odds history.

#### Does the cache affect repeated runs?

With **Use cache** on, a match already collected earlier is reused instead of re-requested, which is faster but can return an older price. Leave it off for the current line.

### Support

Found a problem or want another market added? Open an issue on the Actor's **Issues** tab in the Apify Console.

### Legal / Responsible Use

You are responsible for how you use this Actor and the data it collects, including compliance with DraftKings's Terms of Use and the gambling and data-protection laws that apply to you. This Actor collects publicly displayed betting odds for analysis; it does not place bets or access any account. Gambling is age-restricted and regulated and available only where licensed — check your local rules before using odds data commercially. If you or someone you know has a gambling problem, call 1-800-GAMBLER.

### Preview

![Draftkings Odds Scraper input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/draftkings-odds-scraper--input.png)

# Actor input Schema

## `mode` (type: `string`):

Which odds to collect: pre-match, live (in-play), or both.

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

Leagues to collect: NFL, NCAAF, NBA, NCAAB, WNBA, MLB, NHL, EPL (Premier League), UCL (Champions League), MLS, UFC. Use \["all"] for every supported league.

## `matchUrls` (type: `array`):

Optional. Paste individual DraftKings Sportsbook match page URLs, for example https://sportsbook.draftkings.com/event/.../34599441 .

## `maxMatches` (type: `integer`):

Maximum number of matches to collect per league. Raise this for a full export.

## `includeMarkets` (type: `boolean`):

Add a `markets` array with every priced line on top of the tidy `odds` object. Turn off for smaller rows.

## `useCache` (type: `boolean`):

Reuse match records collected in an earlier run. Disabled by default so every run returns live odds.

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

DraftKings Sportsbook is only available inside the United States, so a US residential proxy is required and used by default.

## Actor input object example

```json
{
  "mode": "prematch",
  "sports": [
    "MLB"
  ],
  "matchUrls": [],
  "maxMatches": 25,
  "includeMarkets": true,
  "useCache": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `matches` (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 = {
    "sports": [
        "MLB"
    ],
    "maxMatches": 25,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/draftkings-odds-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 = {
    "sports": ["MLB"],
    "maxMatches": 25,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/draftkings-odds-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 '{
  "sports": [
    "MLB"
  ],
  "maxMatches": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call mrdoe/draftkings-odds-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/draftkings-odds-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/jexW3yhrxhNHfPiXQ/builds/7bdOwUMgoaOcvDDov/openapi.json
