# Sports Futures Odds: Who Is Favored to Win the Title & Awards (`scrapemint/sports-futures-odds`) Actor

Keyless season long betting odds for the NFL, NBA, MLB, NHL and college sports: championship, conference, division, win total and award markets, with every team or player in the field. Each price becomes an implied probability plus a fair probability with the bookmaker margin removed. Pay per row.

- **URL**: https://apify.com/scrapemint/sports-futures-odds.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** News, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 futures rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Sports Futures Odds: Who Is Favored to Win the Title & Awards

Keyless **season long betting odds** for the NFL, NBA, MLB, NHL and college sports. No API key, no account.

A game line tells you who is favoured tonight. **Futures** tell you who is favoured to win the whole thing: the Super Bowl, a conference, a division, the MVP award, the scoring title, a season win total. This pulls every futures market a league publishes, with the price on every team or player in the field.

- **Futures** — one row per entry: the team or player, the American price, and the probability that price implies.
- **Markets** — one row per market: how big the field is, who the favourite is, their price, and how much margin the bookmaker is holding.

The NFL board alone carries **23 markets**, including Super Bowl winner (32 teams), both conference champions, all eight divisions, MVP across 118 players, six award markets and season long passing, rushing and receiving leaders. NBA lists 15, college football 13, NHL 11, MLB 10.

### Not the same as game odds

Our [Sports Odds Scraper](https://apify.com/scrapemint/sports-odds-scraper) reads **per game** spreads, moneylines and totals for scheduled fixtures. Nothing in this actor is a game line. Different market type, different time horizon, different bettor.

### The number ESPN does not give you

The source publishes a raw American price and nothing else. Every row here adds two things:

**`impliedProbability`** — what the price actually means. `+550` is 15.4%, `-200` is 66.7%.

**`fairProbability`** — the same figure with the bookmaker's margin divided out. Raw implied probabilities across a 32 team field sum to well above 100%, and that excess is the **overround**, reported per market as `marketOverroundPercent`. Without removing it you cannot compare a 4 team division market against a 118 player award market, because the bigger field carries far more built in margin. Both the raw and the adjusted figure are reported, so nothing is hidden behind a calculation.

### Who uses it

- **Sports bettors** — compare the price on a contender against what you think the real chance is, which only works once the margin is stripped out.
- **Fantasy and prediction market players** — award markets are the cleanest public estimate of who is winning MVP.
- **Sports media and newsletters** — "the Chiefs are +550 to win the Super Bowl, an implied 15%" is a weekly line, and this is the source for it.
- **Modellers** — a structured season long probability set to test your own forecasts against.

### Input

| Field | Description |
|-------|-------------|
| `mode` | `futures` or `markets`. |
| `leagues` | `nfl`, `nba`, `mlb`, `nhl`, `ncaaf`, `ncaab`, `wnba`, or a raw ESPN path. |
| `season` | Season year. 0 uses the current one and falls back if the new board is not posted. |
| `marketFilter` | Keep only markets whose name contains one of these words, e.g. `super bowl`, `mvp`, `division`. |
| `entriesPerMarket` | How many shortest priced entries per market. The main cost lever. |
| `maxOdds` | Drop long shots priced above this. |
| `maxRows` | Row cap per run. |

### Output

- **Futures**: `league`, `season`, `market`, `provider`, `rank`, `competitor`, `competitorShort`, `competitorId`, `competitorType`, `americanOdds`, `decimalOdds`, `impliedProbability`, `fairProbability`, `fieldComplete`, `entrants`, `marketOverroundPercent`.
- **Markets**: `league`, `season`, `market`, `marketId`, `provider`, `entrants`, `favourite`, `favouriteOdds`, `favouriteImpliedProbability`, `favouriteFairProbability`, `fieldComplete`, `marketOverroundPercent`.

### Notes on the data

- **Soccer leagues do not publish futures** through this source, so a soccer league returns a free note row rather than pretending to be empty. US leagues and college sports are well covered.
- **A market whose listed field is incomplete gets no fair probability at all.** Implied probabilities in a real book sum above 100%; when they sum below it, the source has published only part of the field. The NBA title market arrived with 3 teams of 30, and normalising against that would have turned a +6000 longshot into a fabricated 64% chance. Those rows carry `fieldComplete: false` and a null `fairProbability`, with the raw implied figure left intact.
- **The overround is computed across the entire field before any filtering**, so asking for the top 10 of a 118 player market still gives correct fair probabilities. Normalising against a partial field would inflate every number.
- Prices come from a single sportsbook, so this is one book's board rather than a market average. The provider is named on every row.
- Team and player names arrive as reference links in the source and are resolved only for the entries actually returned, then cached, which is why a small `entriesPerMarket` is much cheaper than a large one.
- A futures board is updated through the season. Schedule the actor if you want to watch a price drift.

### Pricing

Pay per event: **$0.004 per row**. The first 2 rows of every run are free.

Data source: ESPN public sports API (`sports.core.api.espn.com`).

# Actor input Schema

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

futures = one row per team or player with their price and the probability it implies. markets = one row per market with the size of the field, the favourite, and how much margin the bookmaker is holding.

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

nfl, nba, mlb, nhl, ncaaf, ncaab, wnba. A raw ESPN path such as football/nfl also works. Soccer leagues do not publish futures.

## `season` (type: `integer`):

Which season's futures board to read. 0 uses the current year and falls back to the previous one if the new board is not posted yet.

## `marketFilter` (type: `array`):

Keep only markets whose name contains one of these words, e.g. super bowl, division, mvp, champion. Empty returns every market the league lists.

## `entriesPerMarket` (type: `integer`):

How many of the shortest priced entries to return per market. An MVP market can list over a hundred players, so this is the main cost lever.

## `maxOdds` (type: `integer`):

Drop long shots priced above this, e.g. 2000 keeps realistic contenders only. 0 = no limit.

## `maxRows` (type: `integer`):

Cap on rows returned across all leagues and markets. Controls total cost.

## Actor input object example

```json
{
  "mode": "futures",
  "leagues": [
    "nfl",
    "nba"
  ],
  "season": 0,
  "marketFilter": [],
  "entriesPerMarket": 10,
  "maxOdds": 0,
  "maxRows": 200
}
```

# 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 = {
    "leagues": [
        "nfl",
        "nba"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/sports-futures-odds").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 = { "leagues": [
        "nfl",
        "nba",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/sports-futures-odds").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 '{
  "leagues": [
    "nfl",
    "nba"
  ]
}' |
apify call scrapemint/sports-futures-odds --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapemint/sports-futures-odds"
        }
    }
}

```

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/cFw7iTbLZ5TgVjJux/builds/uHb1MScz1xiFpZXYL/openapi.json
