PrizePicks Scraper — Player Props, Lines & Projections API avatar

PrizePicks Scraper — Player Props, Lines & Projections API

Pricing

from $1.50 / 1,000 results

Go to Apify Store
PrizePicks Scraper — Player Props, Lines & Projections API

PrizePicks Scraper — Player Props, Lines & Projections API

Unofficial PrizePicks API — no key, no login. Scrape live player props, lines, projections, Goblin/Demon odds, flash sales and matchups across NBA, NFL, MLB, NHL, soccer, UFC, esports and every active league. Export to JSON, CSV or Excel for odds models, arbitrage and DFS analytics.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Categories

Share

Scrape live PrizePicks player props, lines, projections, Goblin/Demon odds, flash sales and matchups across every active league — no API key, no login. Export to JSON, CSV or Excel for odds models, DFS research and line-movement tracking.

What does PrizePicks Scraper do?

PrizePicks Scraper turns the entire live PrizePicks board into structured data. It reads PrizePicks' own public JSON:API and returns one clean, flat row per player projection — with the numeric line, the stat type, the odds type (Standard / Goblin / Demon), the player (name, team, position, headshot), the matchup, timing (start_time, board_time, updated_at), status (pre_game / in_progress / final) and promo/flash-sale flags. A single run over the full board typically yields 1,000–12,000+ projections across NBA, NFL, MLB, NHL, WNBA, soccer, tennis, golf, UFC/MMA, and esports (LoL, CS2, VALORANT, Dota 2 and more).

There is no API key, no login and no headless browser. The Actor talks to the JSON:API over plain HTTP through a US residential proxy, paginates for you, joins every projection to its player/league/stat/game via the JSON:API included graph, and streams flattened rows straight to your dataset.

Who is it for?

  • DFS and sports-betting analysts building projection models and comparing PrizePicks lines to their own numbers.
  • Odds and arbitrage traders who need PrizePicks lines side-by-side with sportsbook markets to spot edges.
  • Quant / data-science teams collecting time-series of line movement (via board_time + updated_at) for backtesting.
  • Content creators and tipsters who publish daily "best picks", Goblin/Demon breakdowns or flash-sale alerts.
  • App and tool builders who want a keyless, recurring PrizePicks data feed without maintaining their own scraper.

Use cases

  • Line-movement tracking — poll every few minutes and diff lineScore + updatedAt to watch how a line moves before tip-off.
  • Goblin vs Demon analysis — pull all three odds types and study which players get boosted (Demon) or discounted (Goblin) lines.
  • Flash-sale / promo alerts — filter to promoOnly and get the limited-time discounted lines the moment they appear.
  • Cross-book edge finding — join PrizePicks projections to sportsbook props on player + stat to surface mismatches.
  • League-specific dashboards — scrape just NBA, NFL or a single esports league and feed a Google Sheet or BI tool.

Why use PrizePicks Scraper?

  • Keyless & login-free — no PrizePicks account, no cookies, no token minting. Just run it.
  • Rich rows (30+ fields) — line, flash-sale line, odds type, projection type, player, team, position, headshot, matchup, status, board time, and more.
  • Full board or single league — scrape everything at once, or scope to one league by dropdown or name.
  • Powerful filters — by stat type, odds type (Standard/Goblin/Demon), status, live-only and promo-only.
  • Recurring-poll friendly — light, fast, JSON-only; safe to schedule every few minutes for line tracking.
  • Export anywhere — JSON, CSV or Excel; pay per result; pipe to Sheets, Slack, Zapier, Make or a webhook.

What data can you extract?

Every projections / league row is a single player projection. Numeric fields are stored as real numbers so they sort and chart correctly.

FieldTypeDescription
projectionIdstringUnique PrizePicks projection id.
playerNamestringPlayer (or combo) name.
playerTeamstringPlayer's team / market.
playerPositionstringPlayer position (e.g. PG, QB, Attacker).
jerseyNumberstringJersey number, when available.
isCombobooleanTrue for combo (multi-player) projections.
playerImageUrlstringPlayer headshot URL.
leaguestringLeague name (e.g. NBA, NFL, SOCCER, CS2).
leagueIdnumberNumeric league id.
statTypestringStat being projected (e.g. Points, Passing Yards, Kills).
statDisplayNamestringDisplay label for the stat.
lineScorenumberThe projection line (e.g. 27.5).
flashSaleLineScorenumberDiscounted line during a flash sale, if any.
oddsTypestringstandard, goblin (easier) or demon (harder).
projectionTypestringe.g. Single Stat, Fantasy Score.
adjustedOddsstringAdjusted odds indicator, when present.
statusstringpre_game, in_progress or final.
isPromobooleanTrue if this is a promotional / flash-sale line.
isLivebooleanTrue if the projection is live in-game.
ranknumberPrizePicks board rank for the projection.
trendingCountnumberTrending signal count, when present.
startTimestringEvent start time (ISO 8601).
endTimestringEvent end time, when present.
boardTimestringWhen the line was posted to the board (line-movement anchor).
updatedAtstringLast time the projection was updated.
descriptionstringPrizePicks description (often the opponent for 1v1 sports).
opponentstringMatchup string (e.g. LAL @ BOS) derived from the game.
gameIdstringPrizePicks game id.
gameStatusstringGame status (scheduled / pre-game / live).
tvChannelstringBroadcast channel, when present.
projectionUrlstringDeep link to the projection in the PrizePicks app.
_modestringWhich mode produced the row.
scrapedAtstringISO timestamp when the row was scraped.

In leagues mode each row describes a league: leagueId (number), league, active (boolean), projectionsCount (number), rank (number), hasLiveProjections (boolean), f2pEnabled, showTrending, icon, imageUrl.

Example projection row

{
"_mode": "projections",
"projectionId": "13312345",
"playerName": "LeBron James",
"playerTeam": "LAL",
"playerPosition": "SF",
"isCombo": false,
"playerImageUrl": "https://static.prizepicks.com/images/manual/LeBron_James.png",
"league": "NBA",
"leagueId": 7,
"statType": "Points",
"statDisplayName": "Points",
"lineScore": 27.5,
"flashSaleLineScore": null,
"oddsType": "demon",
"projectionType": "Single Stat",
"status": "pre_game",
"isPromo": false,
"isLive": false,
"rank": 4,
"startTime": "2026-07-24T23:30:00.000-04:00",
"boardTime": "2026-07-24T09:00:00.000-04:00",
"updatedAt": "2026-07-24T14:12:00.000-04:00",
"description": "vs BOS",
"opponent": "LAL @ BOS",
"gameId": "NBA_2026_LALBOS",
"gameStatus": "scheduled",
"projectionUrl": "https://app.prizepicks.com/?projection=13312345",
"scrapedAt": "2026-07-24T18:20:11.031Z"
}

How to use

Option A — Scrape the full active board (default)

Leave everything at its defaults (or send an empty input {}). The Actor scrapes every league that currently has lines and returns up to maxResults projections.

{
"mode": "projections",
"maxResults": 1000
}

Option B — Scrape one league (by dropdown or name)

Set mode to league and pick a league from the dropdown, or type a name / id in leagueName (it wins if both are set). Great for a focused dashboard.

{
"mode": "league",
"league": "7",
"maxResults": 500
}
{
"mode": "league",
"leagueName": "EuroLeague",
"statTypes": ["Points", "Rebounds"],
"oddsType": "demon"
}

To discover league ids, run mode: "leagues" first — it lists every league with its id and current projection count.

Input parameters

ParameterTypeDefaultDescription
modeselectprojectionsprojections (full board), league (one league), or leagues (catalog).
leagueselect""League dropdown for league mode ("" = all).
leagueNamestringLeague name or numeric id for league mode (overrides the dropdown).
statTypesarray[]Keep only projections whose stat type matches one of these (substring, case-insensitive).
oddsTypeselect""Keep only standard, goblin or demon.
statusselect""Keep only pre_game, in_progress or final.
promoOnlybooleanfalseKeep only flash-sale / promo lines.
includeLiveOnlybooleanfalseKeep only live in-game projections.
maxResultsinteger1000Upper bound on rows returned.
perPageinteger1000JSON:API page size while paginating (advanced).

Full input example:

{
"mode": "projections",
"statTypes": ["Points", "Assists"],
"oddsType": "",
"status": "pre_game",
"promoOnly": false,
"includeLiveOnly": false,
"maxResults": 2000,
"perPage": 1000
}

Output example

{
"_mode": "projections",
"projectionId": "13309911",
"playerName": "Shohei Ohtani",
"playerTeam": "LAD",
"playerPosition": "DH",
"league": "MLB",
"leagueId": 2,
"statType": "Total Bases",
"statDisplayName": "Total Bases",
"lineScore": 1.5,
"oddsType": "goblin",
"projectionType": "Single Stat",
"status": "pre_game",
"isPromo": false,
"isLive": false,
"rank": 2,
"startTime": "2026-07-24T22:10:00.000-04:00",
"boardTime": "2026-07-24T08:30:00.000-04:00",
"opponent": "SD @ LAD",
"projectionUrl": "https://app.prizepicks.com/?projection=13309911",
"scrapedAt": "2026-07-24T18:21:03.552Z"
}

Tips for best results

  • Start with the full board. mode: projections with default maxResults is the fastest way to see everything on offer right now.
  • Raise maxResults to 5,000–12,000 to capture the entire board on a busy slate; lower it for quick, cheap samples.
  • Track line movement by scheduling the Actor every 3–10 minutes and diffing lineScore + updatedAt per projectionId.
  • Use boardTime as the "line posted" anchor and updatedAt as the "last changed" signal for movement analytics.
  • Filter by statTypes with short substrings ("Points", "Yards", "Kills") — they match both the stat type and its display name.
  • Demon vs Goblin: demon lines are harder (bigger payout), goblin lines are easier (smaller payout). Filter oddsType to study each.
  • Flash sales are fleeting — run with promoOnly: true on a tight schedule to catch discounted lines.
  • Live betting: set includeLiveOnly: true (or status: in_progress) during games to track in-play lines only.
  • Off-hours are thin. PrizePicks posts most lines a few hours before games; a quiet overnight board naturally returns fewer rows.
  • League ids drift for niche/esports leagues — use mode: leagues to confirm the current id, or just pass the league name.

Integrations

Connect PrizePicks Scraper to the rest of your stack:

  • Google Sheets — auto-export each run's dataset into a spreadsheet for live line boards.
  • Slack / Discord — post new promo lines or big movements to a channel via a webhook.
  • Zapier & Make — trigger workflows when a run finishes (e.g. append rows, send alerts).
  • Webhooks — get notified on run completion and pull the dataset via the Apify API.
  • Schedule — run every few minutes/hours for recurring line-movement snapshots.

API usage

Run the Actor and fetch results programmatically. Replace <TOKEN> with your Apify API token.

cURL

curl -X POST "https://api.apify.com/v2/acts/logiover~prizepicks-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"projections","maxResults":1000}'

Node.js (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<TOKEN>' });
const run = await client.actor('logiover/prizepicks-scraper').call({
mode: 'projections',
maxResults: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'projections');

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("<TOKEN>")
run = client.actor("logiover/prizepicks-scraper").call(run_input={
"mode": "projections",
"maxResults": 1000,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), "projections")

Use with AI agents (MCP)

PrizePicks Scraper works as a tool for AI agents via the Apify MCP server. Point your agent at the Apify MCP endpoint and it can call this Actor on demand — for example: "Get today's PrizePicks NBA Points projections with Demon odds and summarize the five biggest lines." The agent runs the Actor, receives structured JSON, and reasons over it directly.

FAQ

Is PrizePicks Scraper keyless — do I need a PrizePicks account?

No. It uses PrizePicks' own public JSON:API. There is no API key, no login and no cookies required from you.

Which leagues and sports are covered?

Every league PrizePicks currently offers lines for — NBA, NFL, MLB, NHL, WNBA, MLS/EPL/soccer, tennis, golf (PGA/LIV), NASCAR, F1, UFC/MMA, boxing, cricket, AFL, and esports (League of Legends, CS2, VALORANT, Call of Duty, Dota 2, Rocket League) — plus regional leagues like KBO, NPB and EuroLeague. Run mode: leagues for the live catalog.

How many rows can one run return?

A busy slate returns roughly 1,000–12,000+ projections across all leagues in a single run. Raise maxResults to capture the whole board; lower it for a quick sample.

Why did my run return few or zero rows?

PrizePicks posts most lines a few hours before games, so overnight/off-season boards are thin. If you filtered hard (a single stat + odds type + status), loosen the filters. A transient block on a proxy IP is retried automatically with a fresh IP; if it persists, just re-run.

Are numeric fields real numbers?

Yes. lineScore, flashSaleLineScore, leagueId, rank, projectionsCount and similar fields are stored as real numbers, so they sort and chart correctly. Booleans (isPromo, isLive, active) are real booleans.

What's the difference between Standard, Goblin and Demon?

standard is the normal line. goblin lines are easier to hit (lower line, smaller payout). demon lines are harder to hit (higher line, bigger payout). Filter with oddsType to isolate any of them.

Can I track line movement over time?

Yes — schedule the Actor to run every few minutes and diff lineScore + updatedAt per projectionId. boardTime marks when the line was first posted.

Can I export to CSV or Excel?

Yes. Every run's dataset can be downloaded as JSON, CSV, Excel, XML or RSS, or pulled via the Apify API.

How fresh is the data?

It's the live board at run time. updatedAt on each row tells you when PrizePicks last changed that projection.

How often should I run it?

For a daily snapshot, once per morning is plenty. For line-movement tracking or flash-sale alerts, every 3–10 minutes works well and stays cheap.

The Actor only reads publicly available data from PrizePicks' own JSON:API — the same data the website serves to any visitor. See the note below.

This Actor collects only publicly accessible data that PrizePicks itself serves to anyone browsing its app, and does not require or use any login, account or personal credentials. It is intended for research, analytics and personal use. You are responsible for how you use the data, including compliance with PrizePicks' Terms of Service, applicable laws (including local gambling regulations), and any privacy or contractual obligations. Do not use the data to infringe rights or for any unlawful purpose. This Actor is unofficial and not affiliated with or endorsed by PrizePicks.

  • Binance Spot Market Scraper — live crypto market prices and order-book data for trading models.
  • Google Flights Scraper — flight prices and routes as structured data.
  • IMDb Scraper — movies, TV, ratings and reviews via IMDb's public GraphQL.
  • Browse more keyless data APIs on the logiover Apify Store profile.