Underdog Fantasy Player Props API - Lines & Odds
Pricing
from $0.15 / 1,000 lines
Underdog Fantasy Player Props API - Lines & Odds
Scrape real-time player prop lines and odds from Underdog Fantasy API across 16 leagues. Get over/under lines, American and decimal odds, payout multipliers, player stats, team matchups, and game schedules. Filter by league, player name, stat type, or team. 45 fields per prop. JSON & CSV export.
Pricing
from $0.15 / 1,000 lines
Rating
0.0
(0)
Developer
Zen Studio
Maintained by CommunityActor stats
3
Bookmarked
186
Total users
34
Monthly active users
3 days ago
Last modified
Categories
Share
Underdog Fantasy Player Props Scraper | Real-Time Lines & Odds Across 21 Leagues
From Zen Studio, creators of PrizePicks Player Props, Sleeper Player Props and Bet365 Player Props. The same team behind Player Props Line Shopping.
Why choose this Underdog Fantasy player props scraper?
- 46 fields per prop, with both sides together. Collect higher and lower American odds, decimal odds and payout multipliers in the same row. Keep the player, stat and line alongside both prices, ready for comparison or export.
- Useful detail beyond the line. Include player positions, full team names, matchups and start times. Where published, collect venue details, probable MLB starting pitchers and their throwing hands, plus the original value of a discounted line.
- Compare platforms and track changes. Shared fields align with our PrizePicks actor. Join datasets by player, stat and line, or save repeated Underdog exports to track price and line changes. Filter by league, player, stat or team before billing.
Try MLB hits, runs and RBIs
{"leagues": ["MLB"],"statTypes": "hits_runs_rbis"}
Open actor input to choose your leagues and filters. This example collects Hits + Runs + RBIs props. Remove statTypes for the league's full available board, or choose "All" in leagues for all available leagues. Export JSON, CSV or Excel.
Collects pre-game props. The 46-field record includes optional details that can be empty when not published. has_alternates reports availability; this actor collects the primary line. Free Apify accounts can try 5 lifetime runs, up to 50 results each.
| Zen Studio · Player Props | ||||
You are here | Player projections | Odds & last 5 | Props & history | Compare platforms |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
zen-studio/underdog-player-props on Apify. Call: ApifyClient("TOKEN").actor("zen-studio/underdog-player-props").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: leagues (array, defaults to ["MLB"], use ["All"] for every league; "NBA"|"MLB"|"NHL"|"NFL"|"CFB"|"WNBA"|"UFL"|"CFL"|"Basketball"|"PGA"|"Tennis"|"FIFA"|"MMA"|"F1SZN"|"CS"|"Valorant"|"LoL"|"Dota"|"Esports"|"KBO"|"NPB"), extraLeagues (string, comma-separated league codes not in the dropdown), playerNames (string, comma-separated partial match), statTypes (string, comma-separated), teams (string, comma-separated names or abbreviations). All filters optional, AND logic. Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/zen-studio~underdog-player-props/builds/default (Bearer TOKEN) → inputSchema (JSON string, parse it), actorDefinition.storages.dataset.views.overview.transformation.fields (output field list), readme. 46 fields per result including American/decimal odds, payout multipliers, venue, weather, pitcher data. Get token: https://console.apify.com/account/integrations To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
How It Works
Three-step process:
- Pick your leagues
- Optionally filter by player, stat type, or team
- Get 46 fields per prop, ready to use
What Data Can You Extract?
Every result includes:
- Player name, team, position (short + full), jersey number, country, headshot URL
- Stat category with machine key and display name (points, Points)
- Over/under line with American odds, decimal odds, and payout multipliers for both higher and lower
- Line type (balanced, weighted), flash lines, alternate line availability
- Game matchup with home/away teams, full team names, game start time
- Season type, game status, venue details, weather conditions
- MLB pitcher data: probable starting pitcher and throwing hand for both teams
- Provider source, expiration time, live event status
Options Handling
Each prop has two sides: higher and lower. Instead of two rows per line, both options are embedded in a single row via higher_* / lower_* prefixed fields. One row = one complete prop with both sides.
How to Scrape Underdog Fantasy Player Props
Basic: MLB Props
{"leagues": ["MLB"]}
WNBA Props
{"leagues": ["WNBA"]}
Esports: Counter-Strike, Valorant, Dota 2, League of Legends
{"leagues": ["CS", "Valorant", "Dota", "LoL"]}
Or use the Esports umbrella to pull every esports title at once (including Call of Duty):
{"leagues": ["Esports"]}
Multiple Leagues
{"leagues": ["NBA", "MLB", "NHL"]}
Filter by Player Name
{"leagues": ["NBA"],"playerNames": "LeBron, Curry, Randle"}
Filter by Stat Type
{"leagues": ["NBA"],"statTypes": "Points, Rebounds, Assists"}
Filter by Team
{"leagues": ["NBA"],"teams": "MIN, Lakers"}
Combine Filters (AND logic)
{"leagues": ["NBA"],"statTypes": "Points","teams": "Timberwolves","playerNames": "Randle"}
Everything at Once
{"leagues": ["All"]}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
leagues | array | ["MLB"] | One or more leagues. Select "All" for every available league |
extraLeagues | string | none | Comma-separated league codes not in the dropdown (e.g. CFL). Use the code shown in the league field of your results |
playerNames | string | none | Comma-separated player names. Case-insensitive, diacritic-insensitive (Jokic matches Jokić). Partial matching |
statTypes | string | none | Comma-separated stat types. Accepts display names or machine keys (Points, points). Exact match, case-insensitive |
teams | string | none | Comma-separated team names or abbreviations (MIN, Timberwolves, Minnesota Timberwolves). Matches player's team or either side of matchup |
All filters are optional and combine with AND logic. Filtered-out lines are not billed.
More Zen Studio scrapers for sports betting
- Action Network Odds API
- FanDuel Odds API
- DraftKings Odds API
- BetMGM Odds API
- Bet365 Real-Time Odds API
Also from the same studio (name, then account/slug for the URL https://apify.com/account/slug):
- Bet365 Live Scores API (
zen-studio/bet365-live-scores) - Bet365 Sports Data Scraper (
zen-studio/bet365-sports-data) - Player Props Line Shopping (
zen-studio/player-props-aggregator) - PrizePicks Player Props Scraper (
zen-studio/prizepicks-player-props) - Sleeper Player Props (
zen-studio/sleeper-player-props) - DraftKings Pick6 Player Props (
zen-studio/draftkings-pick6-player-props) - Bet365 Player Props API (
zen-studio/bet365-player-props) - Tennis Abstract Scraper (
zen-studio/tennis-abstract-scraper) - Flashscore Tennis Scraper & API (
zen-studio/flashscore-tennis-api)
Full directory: Zen Studio on Apify
Integrations and scheduling
Run the Underdog Fantasy player props scraper on a schedule in Apify Console, hourly on game days, daily otherwise. Each run can call a webhook when it finishes, so n8n, Make and Zapier flows pick up new rows without polling. The Apify API and the Apify MCP server take the same input, for scripts and AI agents.
Supported Leagues
Major US Sports: NBA, MLB, NHL, NFL, College Football (CFB), WNBA, UFL, CFL
Basketball (International): EuroLeague and national-team games beyond the NBA/WNBA
Golf: PGA
Individual Sports: Tennis, MMA, Formula 1 (season long)
International: Soccer (FIFA), KBO (Korean Baseball), NPB (Japanese Baseball)
Esports: Counter-Strike, Valorant, Dota 2, League of Legends. The Esports option selects every esports title at once, including Call of Duty.
League availability varies daily based on scheduled events. Off-season leagues (for example NBA in summer) return no lines until their next game is posted.
A league not in the list? Put its code in extraLeagues: the code is the one you see in the league field of any result, and it works as soon as Underdog posts lines for it.
Stat Types by League
Pass these as comma-separated values in statTypes. Both machine key (points) and display name (Points) work.
NBA / WNBA: Points, Rebounds, Assists, 3-Pointers Made, Steals, Blocks, Turnovers, Pts + Rebs + Asts, Pts + Rebs, Pts + Asts, Rebs + Asts, Blks + Stls, Fantasy Points, Double-Double
MLB: Hits, Runs, RBIs, Home Runs, Total Bases, Stolen Bases, Walks, Strikeouts (Pitcher), Hits + Runs + RBIs, Earned Runs Allowed, Pitching Outs, Hits Allowed, Walks Allowed
NHL: Points, Goals, Assists, Shots On Goal, Blocked Shots, Saves, Power Play Points
Soccer (FIFA): Goals, Assists, Shots, Shots On Target, Passes, Tackles, Clearances, Saves
Tennis: Aces, Double Faults, Games Won, Sets Won, Tie Breaks
Tennis history: Tennis Abstract Scraper returns every past ATP and WTA singles match for a player, with aces, double faults, games, sets, tie breaks and break points, so you can compare a line with past results.
MMA: Significant Strikes, Takedowns
Esports: Kills, Deaths, Assists, Maps Won
Stat types vary daily based on scheduled games. Run once without a statTypes filter and inspect the stat_display field to see what's available.
Pricing: Pay Per Event (PPE)
$0.15 per 1,000 lines.
Cost Examples
Line charges for a single run.
| What You Fetch | Lines | Cost |
|---|---|---|
| NFL (full slate) | ~3,900 | ~$0.59 |
| MLB (typical day) | ~2,300 | ~$0.35 |
| NFL + College Football | ~5,900 | ~$0.89 |
| All 21 leagues | ~11,500 | ~$1.73 |
| Single player filter | ~10 | < $0.01 |
Monthly Estimates
Line charges, assuming ~2,000 lines per MLB pull and ~4,500 for three leagues.
| Usage Pattern | Runs / Month | Cost |
|---|---|---|
| MLB twice daily | 60 | ~$18 |
| 3 leagues twice daily | 60 | ~$41 |
| MLB hourly | 720 | ~$216 |
Cost Optimization
- Use
leaguesto fetch only the sports you need - Use
statTypesto narrow to specific stats - Use
teamsto focus on specific matchups - Use
playerNamesto narrow to specific players
Filters combine with AND logic, and filtered-out lines are not billed.
Free tier: 5 lifetime runs, 50 results per run.
What data you get from Underdog Fantasy
Real result from the MLB board with all 46 fields:
{"projection_id": "4d9eeecb-42c7-46bb-8463-62521b312df9","line": 1.5,"stat": "hits_runs_rbis","stat_display": "Hits + Runs + RBIs","status": "active","is_live": false,"flash_line": null,"rank": 1101351010500,"updated_at": "2026-04-07T07:17:21Z","player_name": "José Ramírez","player_team": "CLE","player_team_name": "Cleveland Guardians","player_position": "3B","player_position_full": "Third Baseman","player_country": null,"player_image": "https://assets.underdogfantasy.com/player-images/mlb/20260403_04-17e633e5.png","player_jersey": "11","player_id": "92506501-2fd3-478f-a749-bcd02919ece8","league": "MLB","game_start": "2026-04-07T17:10:00Z","game_status": "scheduled","season_type": "regular","home_team": "CLE","away_team": "KC","home_team_name": "Cleveland Guardians","away_team_name": "Kansas City Royals","line_type": "balanced","live_event_stat": null,"category": "player_prop","has_alternates": true,"provider": "swish","expires_at": null,"higher_american_odds": "-120","higher_decimal_odds": "1.84","higher_payout_multiplier": "1.0","lower_american_odds": "-114","lower_decimal_odds": "1.88","lower_payout_multiplier": "1.0","venue_name": "Progressive Field","venue_type": "outdoor","weather_condition": null,"weather_temperature": null,"home_pitcher": "G. Williams","away_pitcher": "N. Cameron","home_pitcher_hand": "RHP","away_pitcher_hand": "LHP"}
PrizePicks Compatibility
Field names are aligned with the PrizePicks Player Props Scraper where fields overlap. Shared fields use identical names (player_name, stat, line, league, game_start, etc.), making it straightforward to merge datasets from both platforms for line comparison.
Scheduling
| Cadence | Best For |
|---|---|
| Once or twice daily | Daily picks newsletters, content creation |
| Every 1-4 hours | Line comparison tools, data collection |
| Every 2-5 minutes | Near real-time monitoring, Discord bots |
Data Export
Results are available in:
- JSON: structured data for programmatic analysis
- CSV: flat tables for spreadsheets
- Excel: formatted data for reporting
Export directly from Apify Console or via API.
FAQ
How many props are typically available? Around 11,000-12,000 across all leagues on a busy day. NFL alone is ~3,900 on a full slate, College Football ~1,900, MLB ~2,300. Counts move with the schedule.
How often do lines change?
Lines update every few minutes. The updated_at field shows exactly when each prop was last changed.
What's the difference between higher and lower? Higher means the player exceeds the line. Lower means they fall short. Each side has its own American odds, decimal odds, and payout multiplier.
What does "balanced" vs other line types mean? Balanced means the odds are roughly equal on both sides. Other types indicate the book has weighted one side.
Does this work outside the US? Yes. The scraper uses a US residential proxy internally. You can run it from anywhere.
What happens if a league has no games today? Zero results for that league with an info message. No error, no charge.
Can I track line movements?
Schedule the scraper to run periodically and compare line and odds values across runs using projection_id as the key.
What are flash lines?
Flash lines (flash_line field) show the original line before a discount was applied. When non-null, the current line is a discounted value.
What are alternate lines?
When has_alternates is true, Underdog offers additional lines at different values for the same player and stat. This scraper returns the primary line.
How does this compare to PrizePicks? Both actors output structured player props with compatible field names. Underdog includes American/decimal odds and payout multipliers per side. PrizePicks includes odds tiers (standard, demon, goblin) and durations.
What's the free tier? 5 lifetime runs, 50 results per run.
Are live event lines included? Pre-game lines only. Lines are pulled when games go live. Live lines require authentication and are not supported.
Support
- Bugs: Issues tab
- Features: Issues tab
Legal Compliance
Extracts publicly available data. Users must comply with Underdog Fantasy terms and data protection regulations (GDPR, CCPA).
Real-time player prop lines and odds from Underdog Fantasy across 21 leagues.
