# PrizePicks vs Underdog vs Bet365 Player Props Line Shopping (`zen-studio/player-props-aggregator`) Actor

Compare NFL, MLB and soccer player prop lines across PrizePicks, Underdog, Sleeper, DraftKings Pick6 and Bet365. Best over and under line per prop, consensus line and spread. Premier League, La Liga, Serie A, Bundesliga, Champions League and more. Filter by player, team or stat.

- **URL**: https://apify.com/zen-studio/player-props-aggregator.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Automation, Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 compared props

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

## Player Props Line Shopping: PrizePicks, Underdog, Sleeper, Pick6 & Bet365 | Best Line Per NFL, MLB & Soccer Prop (2026)

<blockquote style="margin:0 0 16px;border-left:5px solid #F59E0B;background:#FFFBEB;padding:16px 20px">
<span style="font-size:18px;font-weight:700;color:#1C1917">Every NFL, MLB and European soccer player prop, priced on five platforms, in one row.</span>
</blockquote>

Line shopping for **NFL, MLB and soccer player props** across PrizePicks, Underdog, Sleeper, DraftKings Pick6 and Bet365. Soccer covers the Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, Europa League and MLS.

- One row per prop with **every platform's line**
- The **consensus line** and the **best over and best under** on offer
- Sorted so the **biggest disagreements** come first
- First 25 runs are free

<a href="https://console.apify.com/actors/T7UhK2GorZOzjDabC/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/player-props-aggregator-hero.png" alt="Player props line shopping across PrizePicks, Underdog, Sleeper, DraftKings Pick6 and Bet365: every platform's line, consensus line, best over and under, and line spread per NFL, MLB and European soccer prop as structured JSON" style="max-width:100%"></a>

<blockquote style="border-left:4px solid #F59E0B;padding:8px 16px;margin:12px 0">
⚡ Five boards read within seconds of each other, 36 fields per prop, and only standard lines compared.
</blockquote>

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this Actor.

```
zen-studio/player-props-aggregator on Apify. Compares the same NFL, MLB or soccer (Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, Europa League, MLS) player prop across PrizePicks, Underdog, Sleeper, DraftKings Pick6 and Bet365. Call: ApifyClient("TOKEN").actor("zen-studio/player-props-aggregator").call(run_input={"leagues":["NFL"]}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: leagues (array: NFL, MLB, Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, Europa League, MLS; soccer needs bet365 or sleeper in platforms), platforms (array, >=2), playerNames/teams/statTypes (comma-separated strings), minLineSpread (number), includeUnmatched (boolean), onlyNew (boolean: only props new or moved since your previous run). Each row: player_name, stat, role, period, platforms.<name>.line, consensus_line, best_over_line/platform, best_under_line/platform, best_quoted_over_odds_decimal/platform, best_quoted_under_odds_decimal/platform (Bet365 single-bet price or Underdog leg quote), injury_status, moved, is_new, platforms.<name>.line_delta, line_spread, line_spread_pct, platform_count. Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/zen-studio~player-props-aggregator/builds/default (Bearer TOKEN) -> inputSchema, actorDefinition.storages.dataset, readme. Pricing: pay per compared prop. Get token: https://console.apify.com/account/integrations
```

### What data do you get for each player prop?

One row per prop that at least two platforms carry. Lines are matched on the player, the stat, the game period and, for baseball, whether the player is batting or pitching, so a pitcher's strikeouts never line up against a hitter's.

| Field | Meaning |
|---|---|
| `player_name`, `player_team`, `player_position` | Who the prop is on |
| `stat`, `role`, `period` | Normalized stat name, batter or pitcher for MLB, and `full` for full-game props |
| `platforms` | One block per platform: `line`, whether the over and under are sold (`over_ok`, `under_ok`), the platform's own payout fields, and when it last updated |
| `consensus_line` | Median line across the platforms carrying the prop |
| `best_over_line`, `best_over_platform` | Lowest line where the over is sold |
| `best_under_line`, `best_under_platform` | Highest line where the under is sold |
| `best_quoted_over_odds_decimal`, `best_quoted_over_platform` | Highest quoted decimal price at the best over line, between the two platforms that quote real odds (Bet365 and Underdog). Bet365's is a single-bet price. Underdog's is the leg price inside a multi-leg entry and is not payable on its own, so read it as a quote, not a payout. Same pair for the under. Pick'em multipliers are never ranked. |
| `moved`, `is_new`, `spread_delta`, `previous_captured_at` | Line movement since your previous run for the league: whether any platform moved, whether the prop is new, how the spread changed, and when the previous read was |
| `platforms.<name>.previous_line`, `platforms.<name>.line_delta` | Each platform's line last run and the change |
| `injury_status`, `injury_body_part`, `injury_notes`, `player_status` | Injury flag for the player where a platform reports one, for example `Questionable` |
| `line_spread`, `line_spread_pct` | Difference between the highest and lowest line, absolute and relative to the consensus. A large relative spread on a small line (0.5 on one platform, 1.5 on another) means the platforms are selling different thresholds of the same market. Those are the largest edges on the board, which is why they sort first. |
| `platform_count`, `platforms_offering` | How many platforms carry the prop, and which |
| `game_start`, `home_team`, `away_team` | Game context |
| `captured_at`, `max_capture_skew_secs` | When the boards were read and how far apart the platform reads were |

Results are sorted by `line_spread_pct`, so the props worth shopping come first.

#### Example row

```json
{
  "player_name": "Jared Goff",
  "player_sportradar_id": "9d0c2a3e-...",
  "player_position": "QB",
  "player_team": "DET",
  "stat": "passing_yards",
  "period": "full",
  "role": null,
  "stat_labels": {"prizepicks": "Pass Yards", "underdog": "Pass Yards", "pick6": "Passing Yards", "sleeper": "passing_yards", "bet365": "Passing Yards"},
  "league": "NFL",
  "game_start": "2026-09-13T17:00:00Z",
  "home_team": "DET",
  "away_team": "GB",
  "platforms": {
    "prizepicks": {"line": 265.5, "updated_at": "2026-09-11T14:02:11Z", "odds_tier": "standard", "over_ok": true, "under_ok": true, "previous_line": 264.5, "line_delta": 1.0},
    "underdog":   {"line": 261.5, "updated_at": "2026-09-11T14:01:40Z", "over_ok": true, "under_ok": true, "over_multiplier": 1.0, "under_multiplier": 1.0, "over_odds_decimal": 1.9, "under_odds_decimal": 1.9, "over_odds_american": -112, "under_odds_american": -112, "previous_line": 261.5, "line_delta": 0.0},
    "pick6":      {"line": 263.5, "updated_at": "2026-09-11T14:02:30Z", "over_ok": true, "under_ok": true, "over_multiplier": 1.0, "under_multiplier": 1.0, "previous_line": 263.5, "line_delta": 0.0},
    "sleeper":    {"line": 261.5, "updated_at": "2026-09-11T13:58:02Z", "over_ok": true, "under_ok": true, "over_multiplier": 1.78, "under_multiplier": 1.78, "previous_line": null, "line_delta": null},
    "bet365":     {"line": 270.5, "updated_at": "2026-09-11T14:02:56Z", "over_ok": true, "under_ok": true, "over_odds_decimal": 1.87, "under_odds_decimal": 1.91, "over_odds_american": -115, "under_odds_american": -110, "previous_line": 270.5, "line_delta": 0.0}
  },
  "consensus_line": 263.5,
  "best_over_line": 261.5,
  "best_over_platform": "underdog",
  "best_under_line": 270.5,
  "best_under_platform": "bet365",
  "best_quoted_over_odds_decimal": 1.9,
  "best_quoted_over_platform": "underdog",
  "best_quoted_under_odds_decimal": 1.91,
  "best_quoted_under_platform": "bet365",
  "injury_status": null,
  "injury_body_part": null,
  "injury_notes": null,
  "player_status": "Active",
  "is_new": false,
  "moved": true,
  "spread_delta": 0.0,
  "previous_captured_at": "2026-09-11T13:33:04Z",
  "line_spread": 9.0,
  "line_spread_pct": 3.42,
  "platform_count": 5,
  "platforms_offering": ["prizepicks", "underdog", "pick6", "sleeper", "bet365"],
  "captured_at": "2026-09-11T14:03:10Z",
  "max_capture_skew_secs": 41
}
```

CSV and Excel exports flatten the `platforms` block into columns such as `platforms.underdog.line`.

### How to compare player props across PrizePicks, Underdog, Sleeper, Pick6 and Bet365

1. Pick the leagues: NFL, MLB, or a soccer competition (Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, Europa League, MLS).
2. Pick the platforms to compare. Any two or more.
3. Optionally narrow to players, teams or stats.
4. Set **Minimum line spread** to `0.5` to see only the props where platforms disagree, or leave it at `0` to get every matched prop with its consensus line.
5. Run. A full NFL board takes one to two minutes.

### Input: leagues, platforms and filters

| Field | Type | Notes |
|---|---|---|
| `leagues` | array | `NFL`, `MLB`, `Premier League`, `La Liga`, `Serie A`, `Bundesliga`, `Ligue 1`, `Champions League`, `Europa League`, `MLS` |
| `platforms` | array | `prizepicks`, `underdog`, `sleeper`, `pick6`, `bet365`. At least two. |
| `playerNames` | string | Comma-separated, partial names allowed |
| `teams` | string | Comma-separated team names or abbreviations |
| `statTypes` | string | Comma-separated stats. Platform spelling differences are handled. |
| `minLineSpread` | number | Only return props whose lines differ by at least this much |
| `includeUnmatched` | boolean | Also return props exclusive to one platform |
| `onlyNew` | boolean | Only props that are new or whose line moved since your previous run for that league |

```json
{
  "leagues": ["NFL"],
  "platforms": ["prizepicks", "underdog", "sleeper", "pick6", "bet365"],
  "statTypes": "Passing Yards, Receiving Yards, Receptions",
  "minLineSpread": 0.5
}
```

### Which player prop lines are compared?

- **Only the standard line on each platform.** Boosted, discounted and promotional lines are left out, because comparing a promotional line to a regular one is not a real discrepancy.
- **Over-only props are marked.** Some platforms sell only the over on a prop. `under_ok` is `false` there and that platform is never named as the best under.
- **Yes/no markets are lined up with over 0.5.** "Anytime touchdown" and "to hit a home run" are the same market as "over 0.5" on the pick'em platforms, so they are compared as such and marked `imputed_line: true`. Only markets that clearly mean "at least one" are treated this way.
- **Quarter, half and season-long props are kept apart** from full-game props, so a first-quarter line never lines up against a full-game line.
- **Baseball batter and pitcher markets are kept apart** through the `role` field.
- **Soccer competitions are told apart by Bet365 and Sleeper.** The pick'em platforms run one worldwide soccer board, so a player is placed in the Premier League or the Champions League by the fixture Bet365 or Sleeper lists for that kickoff. A soccer run therefore needs at least one of those two among the platforms.
- **Soccer goal, assist and card markets are yes/no props.** Every platform sells them at 0.5, so the line rarely differs. `best_quoted_over_odds_decimal` names the higher quote between Bet365 and Underdog, and each platform's own price fields sit inside the `platforms` block. Shots, shots on target and saves carry real numeric lines that do differ.
- **Stats without a cross-platform match** are listed in the run's `SUMMARY` record in the key-value store, along with per-platform coverage for the run.

### How accurate is the line comparison?

- Lines are captured pre-game. The platform reads are seconds apart, and pre-game boards move slowly, so a disagreement in the output is a real disagreement between platforms at that moment. In-game lines are not covered.
- Matched props line up against independent pricing: where a sportsbook and a pick'em platform price the same player and market, their prices agree, which is how the matching is checked.
- NFL yardage props (passing, rushing, receiving yards) are where platforms disagree most. MLB lines are low integers and agree far more often.
- A platform that does not carry a league is reported as not offered in the run summary, not as an error.
- If a platform's board is temporarily unavailable, the run continues with the others and says so in the log.

### How much does it cost to compare player props?

**$1.00 per 1,000 compared props** on the free plan, less on paid Apify plans, plus a small fixed charge per run. A full five-platform NFL board is roughly 1,600 compared props, so a complete comparison costs under $2. The first 25 runs are free.

Use `minLineSpread` or the player, team and stat filters to return only the rows you need and pay only for those.

### Player prop alerts: Google Sheets, Zapier, Make and scheduling

Send compared props straight into the tools you already use. The dataset exports as JSON, CSV or Excel, and Apify's integrations push it into **Google Sheets**, **Make**, **Zapier**, **Slack**, or any endpoint you own via **webhooks**.

For line shopping, schedule the Actor to run **every 15 to 30 minutes on game day** and every few hours in the days before. Pre-game boards move slowly, so anything faster mostly re-reads the same lines. Pair a schedule with `minLineSpread` so you are only alerted when platforms actually disagree, and switch on `onlyNew` so each run returns only the props that appeared or moved since the last one. Every row also carries `previous_line` and `line_delta` per platform.

- [Set up a schedule](https://docs.apify.com/platform/schedules)
- [Connect an integration](https://docs.apify.com/platform/integrations)

How to run the Actor and put it on a schedule (official Apify video):

https://www.youtube.com/watch?v=1OW8gOqlZbY

### Player props line shopping FAQ

**Which platforms does it compare?**
PrizePicks, Underdog, Sleeper, DraftKings Pick6 and Bet365. Pick any two or more with the `platforms` input.

**Which sports are covered?**
NFL, MLB and soccer: Premier League, La Liga, Serie A, Bundesliga, Ligue 1, Champions League, Europa League and MLS. A platform that does not carry a league is reported as not offered rather than as an error. NBA and NHL follow when their seasons start in October.

**How do I find the best line for a prop?**
Every row carries `best_over_line` with `best_over_platform`, and the same pair for the under. The dataset is sorted so the biggest disagreements come first.

**Why do some rows show the same line everywhere?**
Because the platforms agree on that prop. Set `minLineSpread` to `0.5` or higher to return only props worth shopping.

**Why does one platform show a different line from all the others?**
Platforms sometimes offer different thresholds of the same market, for example 0.5 on one and 1.5 on another. Those are real differences and usually the largest edges on the board.

**Can I get alerted only when a line moves?**
Yes. Schedule the Actor and set `onlyNew`. Each run compares against your previous run with the same league and filters, and returns only props that are new or whose line moved on any platform. Send the dataset to Slack or a webhook through Apify integrations.

**Can I filter to one player or one stat?**
Yes. `playerNames` and `teams` take comma-separated values and match partial names. `statTypes` takes stat names as the platforms spell them, singular or plural; an unknown name is reported in the log.

**Does it cover live, in-game lines?**
No. Lines are captured pre-game.

**Can I compare Premier League or Champions League player props?**
Yes. Pick the competition under `leagues` and keep Bet365 or Sleeper among the platforms. Goals, assists, goals plus assists, cards, shots, shots on target and saves are matched across platforms.

**Do PrizePicks, Underdog or Sleeper have a public API for their lines?**
No. None of the pick'em platforms publish their boards, and Bet365 does not either. This Actor reads the public boards and returns them as one comparable dataset.

**How is this different from the single-platform Actors?**
The platform Actors return one board each with every line type, including promos and alternate lines. This Actor returns only the standard line from each platform and lines them up, so you get the comparison without building the matching yourself.

**Is scraping this data legal?**
The Actor collects publicly available odds and lines, the same information any visitor to those platforms can see. It does not access private accounts, log in, or collect personal data. You are responsible for complying with the terms of the platforms you use and with the law in your jurisdiction.

### More Zen Studio scrapers for sports betting

**🏟️ Sportsbook odds**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-oLjv3CSV3BhHm5dGN-62o7r64lQq-fanduel-odds-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **FanDuel**
  - [FanDuel Odds API](https://apify.com/zen-studio/fanduel-odds)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-W8rOXiLSj8wrgF96k-PQehXxTEV5-draftkings-real-time-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **DraftKings**
  - [DraftKings Odds API](https://apify.com/zen-studio/draftkings-odds)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-TjShOnNguT17e9hfQ-ntCswWAqze-betmgm-real-time-api-logo-padded.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **BetMGM**
  - [BetMGM Odds API](https://apify.com/zen-studio/betmgm-odds)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-l6JP3yaLczAdUaiSf-yDHq17ycGp-bet365-icon_lc6m4t.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Bet365**
  - [Bet365 Real-Time Odds API](https://apify.com/zen-studio/bet365-real-time-odds)
  - [Bet365 Live Scores API](https://apify.com/zen-studio/bet365-live-scores)
  - [Bet365 Sports Data Scraper](https://apify.com/zen-studio/bet365-sports-data)

**🎯 Daily fantasy & player props**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-09TtSjF9Uzs5qfvLc-f9HhMKXsLt-underdog-fantasy-picks-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Underdog Fantasy**
  - [Underdog Fantasy Player Props API](https://apify.com/zen-studio/underdog-player-props)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-vZGwNIMCrwkjp76uR-6jWYFxsPSD-sleeper-fantasy-api-logo.jpg" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Sleeper**
  - [Sleeper Player Props](https://apify.com/zen-studio/sleeper-player-props)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-otCGHYjTnE0YKgVNJ-iYqrcfxJiq-draftkings-pick6-api-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **DraftKings Pick6**
  - [DraftKings Pick6 Player Props](https://apify.com/zen-studio/draftkings-pick6-player-props)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-l6JP3yaLczAdUaiSf-yDHq17ycGp-bet365-icon_lc6m4t.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Bet365**
  - [Bet365 Player Props API](https://apify.com/zen-studio/bet365-player-props)

***

*Player props line shopping Actor: compare PrizePicks, Underdog, Sleeper, DraftKings Pick6 and Bet365 lines for every NFL, MLB and European soccer player prop and find the best over and under in one run.*

# Actor input Schema

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

Leagues to compare. NFL is where lines disagree most; MLB lines are low integers and agree far more often. Soccer competitions need Bet365 or Sleeper among the platforms.

## `platforms` (type: `array`):

Platforms to compare across. Choose at least two. A platform that does not carry the league is reported as not offered, never as an error.

## `playerNames` (type: `string`):

Comma-separated player names, case-insensitive, partial names allowed. Example: <code>Mahomes, Ja'Marr Chase, Ohtani</code>. Leave empty for the whole board.

## `teams` (type: `string`):

Comma-separated team names or abbreviations. Example: <code>KC, Eagles, LAD</code>. Matches the player's team or either side of the matchup.

## `statTypes` (type: `string`):

Comma-separated stats. Example: <code>Passing Yards, Receptions, Home Runs</code>. Spelling differences between platforms are handled for you.

## `minLineSpread` (type: `number`):

Only return props whose lines differ across platforms by at least this much. <code>0</code> returns every matched prop, including ones where all platforms agree. <code>0.5</code> returns only the props worth shopping.

## `includeUnmatched` (type: `boolean`):

Also return props carried by only one platform. Off by default, so every row has something to compare.

## `onlyNew` (type: `boolean`):

Return only props that appeared, or whose line moved on any platform, since your previous run for the same league. Ideal for a scheduled run feeding a Slack or webhook alert. The first run returns everything.

## Actor input object example

```json
{
  "leagues": [
    "NFL"
  ],
  "platforms": [
    "prizepicks",
    "underdog",
    "sleeper",
    "pick6",
    "bet365"
  ],
  "includeUnmatched": false
}
```

# Actor output Schema

## `results` (type: `string`):

One row per prop, with every platform's line, the consensus, the best over and under, and the spread.

# 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"
    ],
    "platforms": [
        "prizepicks",
        "underdog",
        "sleeper",
        "pick6",
        "bet365"
    ],
    "minLineSpread": 0,
    "onlyNew": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/player-props-aggregator").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"],
    "platforms": [
        "prizepicks",
        "underdog",
        "sleeper",
        "pick6",
        "bet365",
    ],
    "minLineSpread": 0,
    "onlyNew": False,
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/player-props-aggregator").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"
  ],
  "platforms": [
    "prizepicks",
    "underdog",
    "sleeper",
    "pick6",
    "bet365"
  ],
  "minLineSpread": 0,
  "onlyNew": false
}' |
apify call zen-studio/player-props-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/player-props-aggregator"
        }
    }
}

```

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/T7UhK2GorZOzjDabC/builds/FUxj4LYbjrP83UXTh/openapi.json
