agentleFS
noahowshnoahowsh/endzoneapi-mcp/skills/prop-modeling/SKILL.md

prop-modeling

Skill0 starsChanged 28 days agoMITView on GitHub

Builds NFL player prop models for passing yards, passing touchdowns, rushing yards, receiving yards, receptions and anytime touchdown, using prop history, usage, snap share, game script from the spread and total, and injuries. Use when user asks about player props, whether a player goes over a yardage line, prop projections, anytime TD odds, or the historical over rate against a line. Do not use for team game prediction, see feature-engineering. Do not use for browsing odds across books for a game side, see odds-explorer. Do not use for player profiles without a line, see player-scouting.

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Do not tune a prop model on the games you test.

    line 115

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Prop Modeling

Default data tool: EndzoneAPI (endzoneapi-tool). get_player_props (10 credits) for lines, get_prop_history (10 credits for up to 200 games) for how a player did against his line, get_snap_counts and get_player_stats (5 credits each) for usage, get_games (5 credits) for the game environment. Props coverage starts in the 2023 season. Samples are small by nature.

You are an expert in player prop modeling. Your goal is to project a player's stat for one game as a distribution, compare it with the book's line and price, and be honest about how little data a single player-season gives you.

When to Use

  • "Will Mahomes go over 250.5 passing yards?"
  • "What has this receiver done against his line this year?"
  • "Project a running back's yardage"
  • "What is the fair price on an anytime touchdown?"
  • "Which book has the best number on this prop?"

When NOT to Use

  • Which team wins, see feature-engineering
  • A team's spread price, see odds-explorer
  • General scouting, see player-scouting

Commands Available

CommandWhat It DoesCredits
get_player_propsProps by book. game_id for all players in a game, or player_id plus season. market, bookmaker, snapshot_type (closing or opening), estimate_only10 per game returned
get_prop_historyOne player and market: a row per game with line, open_line, prices, actual, result, margin, plus an over-rate summary. from_date, to_date, bookmaker, limit10 for up to 200 games
get_snap_countsSnaps and shares by game, player_id (PFR id), or team and season5
get_player_statsWeekly lines for the season5
get_injuries, get_depth_chartAvailability and role2 each
get_gamesSpread and total for the game environment5
get_advanced_statsTracking and charting context5
search_playersThe ids (GSIS for props and stats, PFR for snaps)2

Markets

get_player_props markets: player_pass_yds, player_pass_tds, player_rush_yds, player_reception_yds, player_receptions, player_anytime_td (over means he scores). get_prop_history adds player_pass_completions, player_pass_attempts, player_pass_interceptions, player_rush_attempts. Books on props: DraftKings, FanDuel, BetMGM, ESPN BET, Pinnacle, Bovada, BetOnline.

Commands That Do NOT Exist

Not AvailableUse Instead
get_player_projectionBuild it as below
get_dfs_projectionsNot provided
get_prop_edgesCompute edge from your distribution and the line
Props before 2023Not covered

Real Data Shapes

get_prop_history(player_id="00-0033873", market="player_pass_yds", from_date="2025-09-01", limit=3) (Mahomes) returned:

gamelineopenoverunderbooksactualresultmargin
2025_01_KC_LAC250.5244.5-120-1107258over+7.5
2025_02_PHI_KC245.5245.5-110-1217187under-58.5

with summary = overs 1, unders 2 of 3 graded, over_rate 0.333, avg_line 243.5, avg_actual 223, and next_from_date to continue. Three games is an illustration, not a signal.

get_player_props(game_id="2025_17_DEN_KC", market="player_pass_yds") returned 14 rows, each {player_name, gsis_id, market, bookmaker, line, over_odds, under_odds, captured_at, source}; for example Bo Nix at 228.5 with -115 on both sides at BetMGM. One row per player per book.

How It Works

Step 1: Establish the role. Starter or not (get_depth_chart), injury status, snap share and target share over the last 4 to 6 games (get_snap_counts, get_player_stats). Prop outcomes follow opportunity.

Step 2: Game environment. From the spread and total, the implied team totals:

home_implied = (total + spread_line) / 2
away_implied = (total - spread_line) / 2

spread_line is positive when home is favored. A team implied for 26 points passes and scores differently from one implied for 17. Trailing teams pass more; favorites run late.

Step 3: Decompose the stat.

MarketDecomposition
Passing yardsattempts x yards per attempt (attempts depend on pace and game script)
Passing TDsattempts x TD rate; or team implied points x passing share
Rushing yardscarries x yards per carry (carries depend on script and share of backfield)
Receiving yardsteam pass attempts x target share x yards per target
Receptionstargets x catch rate
Anytime TDexpected scoring chances (red-zone usage) with Poisson probability 1 - exp(-lambda)

Project each component from rolling usage with shrinkage (see feature-engineering) and multiply, or fit a regression directly on past games from get_prop_history and get_player_stats (the history gives actual per game).

Step 4: Distribution, not a point. Yardage is right-skewed. Use a gamma or a log-normal fit to the player's game residuals, or a negative binomial for counts such as receptions. The variance is the major input: a projection of 250 with a standard deviation of 70 puts a 250.5 line near 50/50, nowhere near a lock.

P(over line) = 1 - F(line)      F: fitted distribution of the stat

Compute P(over) and P(under) and compare with the devigged line price (see odds-analysis). The line itself is the market median projection.

Step 5: Compare. Edge = your probability minus the no-vig probability at the price. Shrink toward the market (see edge-detection). If your projection is far from the line (say 15 percent), suspect missing information (injury, role change, game script) before trusting the model.

Step 6: Shop. Different books carry different lines for the same prop. get_player_props returns them side by side. A half-point on a yardage line moves the over probability only a little but matters on an even-priced bet.

Sample Size

  • Props cover 2023 onward: at most about 17 games a year per player, 3 seasons by 2025, so roughly 50 games for a durable starter.
  • A player-market history of 17 games has an over rate with a standard error near 12 percentage points. A 60% over rate in 17 games is consistent with 50%.
  • The line is already built from the same stats, so a historical over rate away from 50% is weak evidence unless it is large and persistent.
  • Do not tune a prop model on the games you test. Use walk-forward (see walk-forward-validation).
  • Anytime TD is a rare event: a back at 0.5 TDs a game scores in about 40 percent of games; one season holds too few for a stable rate. Use team red-zone share as a prior.

Correlation

A quarterback's passing yards and his top receiver's receiving yards move together. Two props from the same game are not independent bets. Same-game parlays multiply the book's margin; evaluate each leg's edge, and avoid assuming independence.

Credit Usage

OperationCredits
Prop lines for a whole game10
One player-market history10
One player's props across a season10 per game returned
Usage (snaps, stats)5 each
Full model for one playerabout 35

estimate_only=true on get_player_props shows the price first. Full-league prop history across seasons is expensive; start with the players that matter to the question.

Anti-patterns

RationalizationWhy It's WrongDo This Instead
"Average is 262 so over 250.5"Ignores variance, role, scriptFit a distribution
"He is 11 of 15 over"Small sample, line already adjustsReport with an interval
"Starter is out, use the old role"Usage shiftsReload the depth chart
"Parlay these two props"Correlated, extra marginPrice legs separately
"Use opening line for a closing bet"Different informationState snapshot used

Output Format

Mahomes, passing yards, KC vs [opp]
Environment: total X, KC implied Y
Projection: attempts A x YPA B = C (distribution: gamma, sd D)
Line 250.5 (best over: [book] -115, best under: [book] -110)
P(over) 0.xx vs no-vig 0.xx -> edge +/-x.x pts (before shrinkage)
History: over rate x/y games (not predictive alone)
Risks: [injury news, game script, line moves]

What to Do Next

What You FoundNext ActionSkill
A projection gapCalibrate and shrinkprobability-calibration
Several prop ideasTest on historybacktesting
A needed priceConvert oddsodds-analysis

Reference

Python walkthrough: prop lines by sportsbook: https://endzoneapi.com/guides/nfl-player-prop-lines-by-sportsbook-python

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.