
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Every PrizePicks player prop line in one run: player, stat, line, odds tier (standard, demon, goblin), game, teams and timestamps for NBA, NFL, MLB, NHL, college, soccer, tennis, golf, UFC and esports. No login needed.
Get every player prop line on the PrizePicks board as clean rows: player, stat, over/under line, odds tier (standard, demon, goblin), game, both teams and timestamps. Pick the leagues you want, or the whole board, and get results in seconds. No login, no account, no API key, and it costs a few cents per run.
updated_at and the stable projection_id show what moved.Not sure which leagues have lines right now? Turn on List available leagues: you get one row per league with its live prop count, free of result charges.
| Field | What it does |
|---|---|
leagues | Leagues to read, e.g. ["NBA", "NFL"]. All reads every league with lines, Esports every esports title. |
maxItems | Most props to save (default 20). 0 saves everything that matches. |
extraLeagues | Any other league as PrizePicks names it (e.g. NBA2H, WORLD CUP 1H) or its numeric id. |
playerNames | Only these players. Partial, case- and accent-insensitive (Jokic matches Nikola Jokić). |
statTypes | Only these stats, full or short name (Points, Pts+Rebs+Asts, Shots On Goal). |
oddsTiers | standard, demon and/or goblin. |
teams | Team abbreviation, name or full name; matches the player's team or either side of the game. |
todayOnly | Only games marked as today. |
singleStatOnly | Drop combo props that add up several players. |
includeLive | Also save live in-game lines for games already in progress. |
listLeagues | List the leagues and their live prop counts instead of props. |
{
"leagues": ["NBA", "NFL"],
"maxItems": 500,
"statTypes": ["Points", "Pass Yards"],
"oddsTiers": ["standard"]
}
One row per projection (a player, a stat and a line in one tier).
| Field | Example |
|---|---|
player_name | Shai Gilgeous-Alexander |
league | NBA |
stat / stat_short | Points |
line | 29.5 |
odds_tier | standard, demon or goblin |
allowed_wager_types | over or under_or_over |
flash_line, is_promo, discount_name, discount_percentage | promo details when offered |
player_team, player_position, player_jersey, player_image | player profile |
home_team, away_team (+ names, markets, colors, logos, ids) | the matchup |
start_time, game_status, is_live, in_game, today | timing and state |
board_time, updated_at, trending_count | when the line was posted and changed, how popular it is |
projection_id, player_id, game_id, league_id | stable ids for joining runs |
scraped_at | when the board was read (UTC) |
Example (one row from a test run, trimmed):
{
"projection_id": "16007314",
"line": 29.5,
"stat": "Points",
"stat_short": "Points",
"odds_tier": "standard",
"flash_line": 22.5,
"is_promo": true,
"status": "pre_game",
"start_time": "2026-10-20T21:40:00.000-04:00",
"board_time": "2026-10-20T14:30:00.000-04:00",
"updated_at": "2026-10-20T14:20:28.697-04:00",
"description": "SAS",
"allowed_wager_types": "over",
"trending_count": 155337,
"discount_name": "taco",
"discount_percentage": 23,
"today": true,
"player_name": "Shai Gilgeous-Alexander",
"player_team": "OKC",
"player_team_name": "Thunder",
"player_position": "G",
"player_jersey": "2",
"player_id": "188011",
"league": "NBA",
"league_id": 7,
"game_id": "181168",
"game_status": "created",
"home_team": "SAS",
"home_team_name": "Spurs",
"home_team_market": "San Antonio",
"away_team": "OKC",
"away_team_name": "Thunder",
"away_team_market": "Oklahoma City",
"duration": "Full",
"scraped_at": "2026-10-21T01:14:36.288Z"
}
With List available leagues on, each row is a league: league, availableProps, league_id, display_name, parent_name, active and the league's icons.
Pay per event: $0.04 per 1,000 props plus $0.04 per run start.
Platform usage (compute and proxy traffic) is billed on top and is small: about half a cent for the entire board in our tests.
Is it legal? It reads the public board any visitor sees, with no login. Use the data in line with PrizePicks' terms and the laws where you live.
Do I need a PrizePicks account or a proxy? No account. PrizePicks only serves US visitors and refuses datacenter IPs, so the run uses US residential exits by default; you don't need to set anything.
How many props can I get? Everything on the board. It changes all day: in our tests a weekday evening in October had about 30,000 props, and leagues out of season have none. Use List available leagues to see the counts right now.
Why is a field empty? Some fields only exist for some props: flash_line and discounts only on promos, team fields stay empty for individual sports such as tennis, golf and UFC and for esports matches (the opponent is in description), and trending_count only on popular lines.
Can I schedule it or use the API? Yes. Schedule runs (every few minutes on game days works well) and read the dataset over the API, or connect it to webhooks and automation tools.
Do filtered-out props cost money? No. Only saved props are charged.
scraped_at.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
leaguesarrayOptionalLeagues
Leagues to read. All leagues reads every league with lines posted right now; Esports reads every esports title. Leagues out of season have no lines and return no rows.
maxItemsintegerOptionaldefault 20Max props
Most props to save across all leagues. Leagues are mixed so a small limit still shows each one. 0 saves every matching prop on the board.
extraLeaguesarrayOptionalOther leagues
Any other league exactly as PrizePicks names it (for example NBA2H, WORLD CUP 1H) or its numeric id. Added to the leagues above. Turn on List available leagues to see every name.
Optional, combined with AND. Filtered-out props are not saved and not charged.
playerNamesarrayOptionalPlayers
Only props for these players. Partial, case- and accent-insensitive: Jokic matches Nikola Jokić.
statTypesarrayOptionalStat types
Only these stats, matched on the full or short name, case-insensitive. For example Points, Pts+Rebs+Asts, Shots On Goal.
oddsTiersarrayOptionalOdds tiers
Only these line types. Standard is the normal line, demon is harder with a higher payout, goblin is easier with a lower payout. Empty keeps all.
teamsarrayOptionalTeams
Only props whose player's team or either team in the game matches: abbreviation (LAL), name (Lakers) or market and name (Los Angeles Lakers).
todayOnlybooleanOptionaldefault falseToday's games only
Keep only props for games PrizePicks marks as today.
singleStatOnlybooleanOptionaldefault falseSkip combo players
Drop combo props that add up two or more players.
includeLivebooleanOptionaldefault falseInclude live in-game props
Also save lines for games already in progress (PrizePicks live props). Off by default: only pre-game lines.
See which leagues have lines right now and how many.
listLeaguesbooleanOptionaldefault falseList available leagues
Save one row per PrizePicks league with its live prop count instead of props, then stop. League rows are free.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
PrizePicks serves US visitors only and refuses datacenter IPs, so the run uses US residential exits by default. With datacenter exits the run switches to US residential on its own after the first refusal.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| projection_id | string | null | PrizePicks projection id |
| line | number | null | Over/under line |
| stat | string | null | Stat type, e.g. Points |
| stat_short | string | null | Short stat name shown on the board |
| odds_tier | string | null | standard, demon or goblin |
| adjusted_odds | boolean | null | Line has adjusted odds |
| flash_line | number | null | Flash sale line, when offered |
| is_promo | boolean | null | Promo line |
| status | string | null | Projection status, e.g. pre_game |
| is_live | boolean | null | Live projection |
| is_live_scored | boolean | null | Scored live |
| in_game | boolean | null | Offered in game |
| refundable | boolean | null | Refundable |
| rank | number | null | Board rank |
| projection_type | string | null | Projection type, e.g. Single Stat |
| start_time | string | null | Game start (ISO 8601) |
| board_time | string | null | Time the line went on the board |
| updated_at | string | null | Last update of the line |
| description | string | null | Opponent or event description |
| hot | boolean | null | Marked hot |
| tv_channel | string | null | TV channel |
| custom_image | string | null | Custom image URL |
| event_type | string | null | Event type, e.g. team |
| allowed_wager_types | string | null | under_or_over, or over only |
| group_key | string | null | Group key of related lines |
| trending_count | number | null | Entries the line is trending in |
| discount_name | string | null | Discount name |
| discount_percentage | number | null | Discount percentage |
| league_ppid | string | null | League key |
| end_time | string | null | Projection end time |
| today | boolean | null | Game is today |
| player_name | string | null | Player |
| player_team | string | null | Player's team abbreviation |
| player_team_name | string | null | Player's team name |
| player_market | string | null | Player's team market |
| player_position | string | null | Position |
| player_image | string | null | Player headshot URL |
| player_jersey | string | null | Jersey number |
| player_combo | boolean | null | Combo of several players |
| player_id | string | null | PrizePicks player id |
| player_full_name | string | null | Player full name |
| player_ppid | string | null | Player key |
| player_league | string | null | Player's league |
| player_league_id | number | null | Player's league id |
| league | string | null | League |
| league_id | number | null | League id |
| game_id | string | null | Game id |
| game_external_id | string | null | External game id |
| game_record_external_id | string | null | Game record external id |
| game_created_at | string | null | Game record created |
| game_updated_at | string | null | Game record updated |
| game_start | string | null | Game start |
| game_end | string | null | Game end |
| game_status | string | null | Game status |
| game_is_live | boolean | null | Game is live |
| home_team | string | null | Home team abbreviation |
| home_team_name | string | null | Home team name |
| home_team_market | string | null | Home team market |
| home_team_color | string | null | Home team primary color (hex) |
| home_team_id | string | null | Home team id |
| home_team_secondary_color | string | null | Home team secondary color |
| home_team_tertiary_color | string | null | Home team tertiary color |
| home_team_logo | string | null | Home team logo URL |
| home_team_ppid | string | null | Home team key |
| away_team | string | null | Away team abbreviation |
| away_team_name | string | null | Away team name |
| away_team_market | string | null | Away team market |
| away_team_color | string | null | Away team primary color (hex) |
| away_team_id | string | null | Away team id |
| away_team_secondary_color | string | null | Away team secondary color |
| away_team_tertiary_color | string | null | Away team tertiary color |
| away_team_logo | string | null | Away team logo URL |
| away_team_ppid | string | null | Away team key |
| duration | string | null | Full game, 1st half, 1st quarter, ... |
| projection_type_name | string | null | Projection type name |
| stat_rank | number | null | Stat rank |
| stat_lfg_ignored_leagues | array | null | League ids where the stat is not offered in some modes |
| scraped_at | string | null | Time the board was read (UTC) |
| availableProps | number | null | Props on the board right now |
| display_name | string | null | Display name |
| parent_name | string | null | Parent league |
| active | boolean | null | Active |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Projection | Each player prop line saved to the dataset. Props removed by your filters are free. | $0.00004 |
| Actor start | Charged once per run. | $0.04 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/prizepicks-scraper').call({
"leagues": [
"NBA",
"NFL",
"NHL",
"SOCCER"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
],
"scrapelyProxyCountry": "US"
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/prizepicks-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/prizepicks-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.