The Colophon documents the data pipeline, the statistical methodology, the architectural decisions, and the things the tool deliberately doesn’t model.
No questions match your search.
Is this free?

Yes. No account required, no paywall, no ads. The entire tool runs in your browser.

Who built this and why?

One person with a data engineering background and a passion for fantasy sports, built for personal use, then made public. No free option combined draft analytics, keeper valuation, trade analysis, scoreboard, and category balance in one place without requiring a subscription or surrendering your data to a third party. Built on the principle that analytical tools should be free.

Which sports does this support?

Fantasy baseball and fantasy football. ESPN, Fantrax, and Yahoo leagues are supported for both sports. Sleeper is supported for football only. The same analytics engine (z-scores, VORP, composite rankings, lineup optimizer, trade calculator, draft board, dynasty mode) runs against either sport. xStats and Statcast are baseball-only because no comparable public dataset exists for football.

Does this store my data anywhere?

League Donation does not access, store, or analyze your league or account data on its own servers. For ESPN leagues, your credentials stay in your browser’s local storage and are never transmitted to League Donation’s servers. For Fantrax leagues, your Secret ID is used once to fetch your league list and is not persisted. For Sleeper leagues, only the public league ID is needed; no authentication is required because Sleeper’s API is read-only and public. For Yahoo leagues, OAuth tokens are stored in your browser after authorization; they expire and are cleared after a few hours of inactivity. The tool reads league data at connection time and caches it locally in your browser session. Basic access logs may be generated by the hosting provider as part of serving the site.

What is Field Notes?

The editorial companion to the tool. Each piece applies the tool’s methodology to a specific player or situation. Baseball pieces work from Statcast and contact quality, with recurring series like Liars (players whose box scores disagree with their expected stats) and Truthers (players where the contact data confirms or complicates the surface line). Football pieces work from the opportunity and role signals the football pipeline reads: target share, carry distribution, efficiency splits, and the gap between usage and box score. The method changes with the sport. The posture doesn’t. Each piece walks through a real case so a reader can see how to do it themselves. Read Field Notes here.

What is the xStats methodology page?

A standalone document explaining how the xStats system works: the blend formula, per-stat stabilization constants, counting stat derivations, signal tiers, trend classification, and what the system omits. It covers the math in enough detail to audit and enough clarity to follow without a statistics background. Read the xStats methodology here.

What is the Colophon?

A detailed explanation of every system in the tool: how rankings are computed, how the composite blends multiple projection sources, how z-scores and VORP work, how the adapters normalize data across ESPN, Fantrax, Sleeper, and Yahoo, and the design choices behind each decision. It reads as a technical reference for anyone who wants to understand what the numbers mean and why the architecture works the way it does. Read the Colophon here.

What can I do without connecting a league?

The Rankings tab and xStats tab work without any league connection. Pick your sport on the welcome screen. FantasyPros consensus projections load automatically on your first visit: real stat lines (AB, HR, ERA for baseball; passing yards, rushing TDs, receptions for football) that power z-scores and VORP right away. You can then import additional projections, browse player rankings, and explore the draft board without connecting a league. Choose “Just the Numbers” from the welcome screen.

What is the Demo League?

A fully simulated 10-team league you can explore without connecting a real league. Both sports have one. The baseball demo launches as an H2H Categories league in mid-season state (Week 12) with simulated standings, matchup scores, player stats, live game statuses, transaction history, and waiver recommendations. The football demo launches as an H2H Points league with the same surfaces. Check the Dynasty checkbox before launching the baseball demo to explore dynasty features: deeper rosters, age-adjusted valuations, the Farm tab with prospect rankings, and roster timeline projections. Both demos use real player names and projections from FantasyPros. Team strengths and matchup results are derived from actual roster VORP, so the standings make sense.

What happens when I click “Connect Your League”?

The connect screen lets you choose your sport and platform, then handles each platform differently. ESPN takes a league ID and optional private credentials. Fantrax asks for your Secret ID, then lets you pick your league from a dropdown. Sleeper takes a league ID directly. Yahoo opens an OAuth authorization page. Once connected, the tool fetches your league settings, rosters, schedule, standings, and draft results. FantasyPros projections load in the background automatically. Everything renders within a few seconds. Your connection is saved in your browser so returning visits reconnect automatically.

Does this work with CBS Sports?

No. CBS shut down its developer portal, the domain no longer resolves, and the API it documented is gone. Without an API there is nothing to integrate against.

How do I connect an ESPN league?

Select ESPN on the connect screen, choose your sport, and enter your league ID. Find it in the URL: fantasy.espn.com/baseball/league?leagueId=123456 for baseball or fantasy.espn.com/football/league?leagueId=123456 for football. Public leagues connect with just the ID.

Private leagues also need your espn_s2 and SWID cookies. Open developer tools while logged into ESPN (F12 → Application → Cookies → espn.com), copy both values. Include the curly braces around SWID. These expire periodically. Refreshing them is the first thing to try if the tool stops loading your league.

How do I connect a Fantrax league?

Select Fantrax on the connect screen, choose your sport, and paste your Secret ID (found at Profile → Information on fantrax.com). Click Find My Leagues, select your league and team, then connect. The Secret ID doesn’t expire with your session.

Optional: check the Live Scoring box before connecting and paste your JSESSIONID and FX_RM cookies. Find them in developer tools (F12 → Application → Cookies → fantrax.com). JSESSIONID looks like node0abc123...node0. This unlocks real-time matchup scoring and Fantrax ADP rankings. JSESSIONID expires when you close your browser; FX_RM persists.

How do I connect a Sleeper league?

Select Sleeper on the connect screen and paste your league ID. Find it in the URL when viewing your league: sleeper.com/leagues/123456789012345678. Sleeper IDs are long numeric strings, not short identifiers. No login or credentials are needed because Sleeper’s API is read-only and public.

Sleeper is football-only on this platform. Sleeper’s baseball product is minimal and the API surface for it doesn’t cover the data the tool relies on, so the connect screen only shows Sleeper as an option when you’ve picked football as your sport. Dynasty leagues are detected automatically from your Sleeper league settings, which activates the Rookies tab and dynasty VORP columns.

How do I connect a Yahoo league?

Select Yahoo on the connect screen, choose your sport, enter your league ID, and click Connect with Yahoo. Find the ID in the URL: baseball.fantasysports.yahoo.com/b1/123456 for baseball or football.fantasysports.yahoo.com/f1/123456 for football. Yahoo’s OAuth page opens automatically. Log in and approve. No tokens to copy.

Access tokens expire after one hour but refresh automatically during your session. Stored credentials clear after four hours of inactivity, so returning after a break requires re-authorizing. If you see an authentication error mid-session, disconnect and reconnect.

How does ranking work for Fantrax leagues?

Without Live Scoring enabled, rankings use FantasyPros ECR as the authority. ECR is a consensus of multiple expert rankings and is usually a stronger signal than any single platform’s algorithm. With Live Scoring enabled, the tool fetches Fantrax’s own ADP rankings directly from your league and uses those as the composite ranking source alongside ECR. The Fantrax ADP pill appears in the Rankings toolbar when this data is loaded. Import FanGraphs projections to add stat-based VORP and z-scores on top of either ranking source.

The tool connected but my roster looks wrong. (ESPN)

ESPN’s API occasionally returns incomplete slot counts for roster positions, more often early in the season. The tool detects this and infers your real roster configuration from actual player assignments across all teams. In edge cases you may see positions missing or bench counts off. Disconnecting and reconnecting usually resolves it. You can also manually adjust roster slots in League Configuration.

My league settings show the wrong scoring or roster positions.

Two common causes. First, ESPN’s API sometimes returns default scoring weights rather than your league’s actual settings. The tool flags this with an “Unverified scoring” warning. To fix it, open the scoring editor in League Configuration and enter your league’s actual point values manually.

Second, ESPN may omit slot counts for certain positions. Adding them manually in League Configuration resolves it. Fantrax and Yahoo leagues generally return accurate settings without manual intervention.

What does VORP mean?

Value Over Replacement Player. It measures how much a player improves your team over what you’d have at this position otherwise. A catcher projecting 200 fantasy points is worth more than a corner outfielder projecting the same, because replacement-level catchers are scarcer. VORP accounts for that. It’s the number that matters most for draft and trade decisions. You’ll see it on the Roster tab, Power Rankings, Waiver Spotlight, and player detail cards.

What’s Z-Score?

Z-score measures how far above league average a player projects across scoring categories. Zero is average. Positive is above average. It’s most useful for comparing players across positions who contribute differently: a starter and a reliever don’t have comparable raw projections, but their z-scores are directly comparable. The Roster tab shows each player’s z-score and the team total.

What happens when I click a player name?

A detail card opens showing the player’s MLB team, position eligibility, age, projected stats, z-scores across every league category, VORP, composite rank, ownership percentage, and a “fit for your team” score. In dynasty mode, the card also shows dynasty VORP, aging curve multiplier, and a prospect badge if applicable. If Statcast data is loaded, it also shows xStats regression signals and xΔ year-over-year contact quality changes when two seasons are loaded. Player names are clickable everywhere: rankings, roster, scoreboard, trade calculator, waiver spotlight, roster alerts, and the activity feed.

What are rankings based on before I import anything?

FantasyPros consensus projections load automatically on startup, sport-aware. For baseball, that means real stat lines aggregated across multiple projection systems: plate appearances, home runs, ERA, strikeouts. For football, the same source loads QB, RB, WR, TE, K, and DST projection pages: passing yards, rushing yards, receptions, touchdowns. Either way, z-scores, VORP, and tier clustering are working from the moment the tool opens, without any action on your part.

ECR (Expert Consensus Rankings) loads alongside them as a secondary signal that informs player ordering. It contributes to the composite rank but doesn’t drive the statistical analysis. If the projection fetch fails, ECR serves as the fallback ordering. Either way you get a working ranked list within seconds.

Imported projections add calibration. FantasyPros projections are format-agnostic. They don’t know whether your league scores QS or WHIP for baseball, or PPR vs half-PPR vs standard for football. Imported projections applied against your league’s actual scoring weights produce z-scores and VORP that reflect your specific context. That’s the difference between “generically good player” and “valuable in your league.”

What stats does each platform actually deliver?

ESPN exposes the broadest baseball scoring category set. Standard 5x5 plus QS, holds, OBP, ISO, K/9, BB/9, and roughly thirty others depending on league configuration. Projections come back as full stat lines when ESPN’s projection system is available. Football scoring on ESPN is delivered through a different stat ID map; the adapter resolves it via a dedicated NFL stat translation table.

Fantrax exposes the widest custom-category surface but ships category data through scoring-rule codes rather than canonical stat names. The adapter resolves these via a code map for both sports. Categories that aren’t in the map show as missing until added. If a Fantrax league has a category you don’t see in rankings, that’s the cause.

Sleeper (football only) ships the cleanest scoring payload of any platform. Per-stat point values come back directly from the league settings endpoint with no translation needed. Projections come from FantasyPros loaded by the tool, since Sleeper’s own projection feed is sparse.

Yahoo’s baseball category set is narrower. Standard 5x5, OBP leagues, points leagues with custom weights. Advanced categories that ESPN exposes (holds, QS, K/9) may be present in your scoring but not delivered by Yahoo’s API for ranking purposes. Football scoring on Yahoo is well-supported and the adapter delivers full per-stat weights for passing, rushing, receiving, return, kicking, and defense categories.

The tool’s z-scores and VORP run against whatever categories your league actually scores. A category that exists in your scoring but isn’t delivered by the platform falls back to the imported projection data. Importing FantasyPros for football, or FantasyPros and FanGraphs for baseball, unlocks the largest stat surface for any platform.

What’s the difference between FantasyPros and FanGraphs imports?

FantasyPros gives you consensus rankings and ADP data: what experts collectively think. It loads automatically for both baseball and football. FanGraphs gives you raw statistical projections: plate appearances, innings pitched, strikeout rates. Import both and the tool blends them. FanGraphs projections unlock category-level analysis and z-score calculations. FantasyPros rankings unlock the ADP arbitrage view. FanGraphs is baseball-only because their projection systems (Steamer, ZiPS, ATC, BAT X, Depth Charts) cover MLB. Football leagues rely on FantasyPros plus the platform’s own scoring data for stat-level analysis.

How do I use the FanGraphs bookmarklet?

The bookmarklet is a one-click helper that reads a FanGraphs projections table directly in your browser and pipes the data into League Donation without any manual copying. It lives in your bookmarks bar and runs against whatever FanGraphs page you have open. Baseball-only, because FanGraphs covers MLB.

Install it once. On the Rankings tab, find the bookmarklet link in the Import section. Drag it from the page to your browser’s bookmarks bar. If your bookmarks bar isn’t visible, enable it in your browser settings (usually View › Bookmarks Bar or Ctrl+Shift+B).

Use it each time. Go to FanGraphs and open any projections page (Steamer, ZiPS, Depth Charts, ATC, or BAT X work). Make sure the table is fully loaded on screen. Click the bookmarklet in your bookmarks bar. You’ll see a confirmation toast in the corner once the data is copied. Switch back to League Donation and paste into the import zone on the Rankings tab. The tool identifies the projection system automatically from the column headers and blends it into the composite.

If the bookmarklet shows “No table found,” try scrolling down so the full table is visible before clicking, or switch to the projections tab within FanGraphs rather than a leaderboard view.

Why does clicking “FanGraphs” in the import section send me to FanGraphs instead of loading data directly?

FanGraphs doesn’t have a public API that allows direct data fetching. The button opens their projections page so you can use the bookmarklet or export a CSV from there. Once you have the data, bring it back into League Donation via the bookmarklet (one click on the FanGraphs page) or by exporting a CSV from FanGraphs and importing it directly in the Rankings tab. Football leagues don’t need this workflow because FantasyPros loads automatically and FanGraphs doesn’t cover football.

Why are my projections blank or showing zero?

Platform APIs don’t always deliver full projection data for every player. Import projections from FantasyPros or FanGraphs in the Rankings tab. Imported projections replace platform defaults everywhere: rankings, power ratings, trade analysis, draft board.

My scoring says “Unverified” or “Needs Fix.” What does that mean?

“Unverified” means ESPN’s API returned scoring weights that haven’t been confirmed against your actual league settings. The tool falls back to ESPN’s server-side projection totals.

“Needs Fix” means the weights produced projections that failed a sanity check, so custom calculations were disabled entirely. In both cases, opening the scoring editor in League Configuration and entering your real point values resolves it.

What does the Overview tab show?

A dashboard with your current matchup, league standings, power rankings, recent activity, waiver spotlight, and insight cards. It’s the starting view when you connect a league and surfaces the highest-priority information across every tab in one place.

What are the insight cards?

Automatically generated observations about your roster and league context. The insights engine runs nine generators covering roster alerts, category vulnerabilities, trade targets, waiver opportunities, start/sit decisions, hot and cold streaks, prospect promotions, schedule edges, and Statcast regression signals. Each card links to the relevant tab or player. The engine surfaces observations, not recommendations. You decide what to do with them.

What is the Scoring Breakdown on Overview?

For H2H Points leagues, this panel breaks down your roster’s projected fantasy points by scoring category, split into batting and pitching. It shows which categories drive your point total and where the production thins out. Not available for categories leagues, where the Category Balance on the Draft tab serves a similar function.

What is the Matchup Scoreboard?

A player-level box score for any matchup in your league. Click any matchup card to load both rosters with batting and pitching tables showing the week’s stats, fantasy points per player, and totals. For in-progress games, each player’s row shows the live MLB game status (opponent, score, inning). The top performer on each side is highlighted. Injured players show status badges (DTD, IL, OUT).

Can I view other teams’ matchups?

Yes. Click any matchup card in the grid, not just yours. The scoreboard and category tracker update to show that matchup. Your matchup is auto-selected on load and highlighted with an accent border.

Do game scores update live?

For baseball, MLB game statuses (scores, innings, final results) auto-refresh every 65 seconds while you’re on the Matchups tab viewing the current week. You’ll see scores change, innings advance, and the green pulsing dot for in-progress games without refreshing the page. Player fantasy stats (the box score numbers) update when you click the Refresh button. Those come from ESPN/Yahoo and don’t auto-poll to avoid rate limits.

For football, the live scoreboard polling is disabled because NFL games run on a weekly cadence (Thursday night, Sunday daytime, Sunday night, Monday night) rather than daily. Player fantasy stats refresh when you click the Refresh button or reload the league. Click between matchups to see other team stat lines.

What is the Category Scoreboard?

A visual comparison of your category-by-category stats against your opponent. Each category card shows your value, your opponent’s value, who’s winning, and a proportional bar. For H2H Points leagues, each card also shows the fantasy point contribution per category. It works for any matchup you click, not just yours.

What does the score “8 cats” mean?

In H2H Categories baseball leagues, the weekly score is the number of statistical categories you’re winning. “8 cats” vs “2 cats” means you won 8 of 10 scoring categories that week. The “cats” label appears in the overview matchup widget to distinguish this from H2H Points scoring. Football leagues don’t use this label because they’re overwhelmingly points-based.

What do Z-Score and VORP show on the Roster tab?

Each player row shows their individual z-score (combined strength across all league scoring categories) and VORP (value above the best available replacement at their position). The summary bar at the top shows team totals. For categories leagues the summary shows total Z-Score and VORP. For points leagues it shows total projected points. These are the same analytics used in Power Rankings and trade evaluation.

Can I view other teams’ rosters?

Yes. Use the team dropdown at the top of the Roster tab. You can also click any team name in the Standings table to jump directly to their roster. Roster alerts only show for your own team.

What is the Lineup Optimizer?

The Optimize button on the Roster tab rearranges your lineup to maximize a chosen objective: Z-Score, VORP, or Projected Points. It respects position eligibility and slot constraints, moving the highest-value players into starting slots and the lowest to the bench. The optimizer runs against your current roster and shows the result instantly. It does not submit changes to your platform.

What do Standings show?

Win-loss record, winning percentage, games back from first place, and points for. Click any team name to view their full roster with projections, z-scores, and VORP.

What is the Recent Activity feed?

A chronological list of league transactions: adds, drops, trades, and waiver claims. Player names in transactions are clickable. Click to view the player detail card. For ESPN this comes from the league communication feed. For Sleeper this comes from the transactions endpoint. For Yahoo it comes from the transactions API endpoint. Transaction data is not available for Fantrax leagues as their API does not expose transaction history. The demo generates simulated transactions.

What is the League Overview view?

A toggle on the Rosters tab that swaps the per-team view for a league-wide one. Two panels render side by side: League Distribution (stacked bars showing each team’s value composition by position group) and Positional Strength (a heatmap ranking every team at every position). Click any team name on either panel to jump straight to their roster. Use the My Roster toggle to return to the per-team view.

What does the League Distribution chart show?

One stacked bar per team. Segment widths reflect each position group’s contribution to total team value. For dynasty leagues, future draft picks fold in as a Picks segment, normalized league-wide so picks contribute roughly twenty percent of total value. The unit label reads “value” when picks are blended in (because the bars mix per-position fpts with pick-equivalent values) and “pts” when picks aren’t involved. Filter chips for Contender, Retooling, Rebuilding, and Unclassified appear in dynasty leagues with classified teams. The chart is sortable; the active sort persists per league.

What does the Positional Strength heatmap show?

A grid of teams (rows) by position group (columns). Cell tint reflects league percentile rank: green for top, red for bottom, neutral in the middle. A small rank number under each cell shows the team’s ranking within the league at that position. The Total Roster / Lineup toggle changes how the cell value is computed. Total Roster sums positive value across every eligible player at that position — a depth reading. Sub-replacement players (negative VORP) contribute zero rather than dragging the total negative, so Total Roster is always at least as high as Lineup. Lineup sums the top N, where N matches the league’s starting slot count for that group — a best-deployable reading. A team can rank high on Total Roster and mid on Lineup (deep but not top-heavy) or vice versa. Both modes draw from the same eligibility pool: starters and bench, excluding IL and stash slots.

What do the contention window labels (Contender, Retooling, Rebuilding) mean?

Dynasty-only labels derived from each team’s projected three-year value decay curve. Contender means the team’s value holds high in the next one to two seasons. Rebuilding means peak value sits two to three years out. Retooling sits between. Teams without enough age data for a confident classification show as Unclassified. The same classification drives the per-team window pill on the Roster Age Profile card on the Farm tab.

How does the Trade Calculator work?

Select two teams, then check players to move between them. You can also add draft picks to either side of the deal. The tool simulates post-trade rosters and shows the projected impact: changes in total z-score, VORP, and category-by-category balance for both teams. Category chips show which stats each team gains or loses. Flat categories (negligible change) are hidden to reduce noise. In dynasty mode, the evaluator also shows dynasty VORP impact, accounting for player age and long-term value trajectories.

What do the category chips mean?

Each chip represents a scoring category that changes meaningfully in the trade. Green chips are categories you gain strength in. Red chips are categories you lose. The number inside is the z-score delta. Categories with less than 0.15 z-score change are hidden as “flat” since the impact is negligible.

What is the Draft tab for?

A full pre-draft research tool. It blends your imported projections with platform data, computes positional value and tier breaks, surfaces recommendations based on your team’s needs as the draft progresses, and lets you queue players ahead of your pick.

Can it load my completed draft automatically?

Yes. If your league has already drafted, the tool pulls every pick from the ESPN or Yahoo API and populates the Draft Grid automatically. This includes pick number, round, team, player, and keeper status. No manual tracking needed for completed drafts. If you also have manual draft data saved from a previous session, the saved data takes priority.

The Draft tab shows wrong positions or missing players.

This usually traces back to the preseason roster configuration issue. Check League Configuration to confirm your roster slots are populated correctly. If players are missing from the pool entirely, the composite ranking data may not have loaded: import a FantasyPros or FanGraphs file from the Rankings tab.

What is the Draft Grid?

A visual pick-by-pick grid showing every selection in the draft, organized by round and team. Each cell shows the player name, position, and composite rank. Color coding reflects value relative to ADP: picks that landed above their expected slot are highlighted differently than reaches. For completed drafts, the grid populates automatically from the platform API. During a manual draft, picks can be entered as they happen.

What are Team Report Cards?

Per-team draft summaries that appear once a draft is complete or when viewing a prior-year draft. Each card shows the team’s GPA across one or two grading lenses, the biggest single-pick steal, and a sortable view across the league. The cards live on the Player List view of the Draft tab. The Grid view shows the draft itself; the Player List view shows the report cards underneath.

What’s the difference between Draft Day, Hindsight, and Value Added grades?

Draft Day grades each pick against the FantasyPros ADP snapshot from the time of the draft. Hindsight grades each pick against the player’s current composite rank. Value Added is the sum of per-pick rank deltas (ADP minus current rank), capped per pick to prevent late-round fliers from saturating the metric. A team that drafted Bowers at pick 20 gets Day credit at pick 20 (close to ADP) and Hindsight credit at pick 20 versus his current top-tier rank (a clear win). Day requires a historical ADP snapshot. NFL draws from the FantasyPros archive; MLB has no equivalent source, so MLB report cards show only the Hindsight column with a footnote explaining the absence.

How does the per-pick grade scale work?

Each pick’s letter grade comes from the rank delta divided by a sport-specific scale that grows with pick depth. NFL uses a tighter scale because the fantasy-relevant pool is around 250 players; MLB uses a wider scale because the pool exceeds 600 and natural rank variance is larger. Top-of-draft picks get a higher floor on the scale to prevent any single-rank movement from dominating the grade. Team GPAs use a trimmed weighted mean: the worst N% of pick grades drop out before averaging, so a team’s grade reflects the body of their draft rather than its tail. The trim percentage is sport-aware (NFL 10%, MLB 15%) and tunable per sport in the codebase.

What does the Biggest Steal show?

The single pick on each team with the largest positive delta between draft position and current composite rank. A pick at #150 whose player now ranks #20 shows as +130. Only positive deltas count; a team whose best pick simply matched its draft slot shows “no positive delta.” The metric isolates the team’s most lopsided value find rather than averaging across the whole draft.

How are rookie drafts graded differently?

For dynasty rookie drafts (detected from Sleeper’s rookie-draft flag), grades compare each pick against its rookie-class rank rather than its overall dynasty rank. Pick 2 of the rookie draft grades against the second-best rookie, not the second-best dynasty player. Without this reframe, a top rookie taken at pick 2 would look like a 40-spot reach because his overall dynasty rank sits at 40 alongside established veterans. The footnote on the report cards confirms when rookie-draft mode is active. For very recent rookie drafts where FantasyPros hasn’t archived ADP yet (2025 rookie draft viewed in early 2026, for example), an extra line in the footnote explains that both Day and Hindsight grades use the current rookie composite.

What does the Keepers tab do?

The Keepers tab calculates surplus value for every player on every team based on keeper cost versus projected production. Players worth more than their cost have positive surplus and are strong keeper candidates. The tab includes a keeper planner where you can lock in your selections and see how they affect your remaining draft capital, plus a league-wide keeper landscape showing estimated keepers across all teams.

My league doesn’t have keepers. Why is the tab visible?

The Keepers tab appears when your league has a keeper count greater than zero, detected from your ESPN or Yahoo league settings. If it appears incorrectly, check the league configuration panel on the Overview tab.

What is dynasty mode?

Dynasty mode activates long-term valuation features: age-adjusted VORP using aging curves, a prospect or rookie pipeline, and a dedicated Farm tab (baseball) or Rookies tab (football). For real leagues, dynasty mode is detected automatically from your league type: ESPN and Yahoo signal it through keeper count at or near roster size, Sleeper signals it through league type metadata, and Fantrax signals it through roster slot configuration. For the demo, check the Dynasty checkbox before launching the baseball demo. When dynasty mode is on, the Keepers tab is replaced by Farm/Rookies, and dynasty VORP columns appear throughout the site.

What is dynasty VORP?

Standard VORP measures a player’s value above replacement for the current season. Dynasty VORP adjusts that value by an aging curve multiplier that reflects long-term trajectory. A 24-year-old at peak production gets a full multiplier. A 35-year-old with the same current VORP gets a discount because his production is likely to decline. The aging curves are sport-specific: baseball has separate curves for hitters and pitchers, football has separate curves for QB, RB, WR, and TE. Running backs decline fastest. Quarterbacks hold value longest. The result is a single number that captures both present value and future trajectory.

What does the Farm tab show?

For baseball, four sections. The Roster Age Profile shows your team’s age distribution with a contention window estimate based on projected value decay. The Roster Timeline projects each player’s dynasty VORP over the next three seasons using the aging curves. Dynasty Rankings rank all teams by total age-adjusted roster value. The Prospect Board lists the top MLB prospects with rank, position, age, ETA, dynasty VORP, and availability status in your league.

For football, the tab is labeled Rookies and surfaces a rookie board built from KeepTradeCut’s dynasty rookie rankings, overlaid with FantasyCalc dynasty values when available. Each row shows position, KTC rank and value, FC rank and value, and roster status (rostered, available, yours). The age profile and roster timeline sections work the same way they do for baseball, calibrated against football aging curves.

What does the Roster Age Profile show?

A bar chart of your roster grouped by age bucket, with a contention window pill (Contender, Retooling, or Rebuilding) derived from the projected three-year value decay of your active players. The decay percentage shown next to each future season is the share of current value your roster is expected to hold based on the age curves applied per player and per position. A roster heavy with 24-26 year olds holds value across the window; a roster heavy with 32+ players bleeds value year over year. The contention window pill matches the same classification used for filter chips on the League Distribution chart.

What does the Dynasty Rankings card show?

League-wide team rankings by three-year projected dynasty value. Each row shows the team, total DYN value, and per-position breakdowns. The total combines age-adjusted roster value with future draft pick estimates where dynasty pick data is available. Sorting and column visibility are controlled by the toolbar. Click any team name to jump to their roster.

Where does the prospect or rookie data come from?

Baseball prospect rankings come from MLB.com’s official prospect stats page, loaded in the background when dynasty mode is active. The data includes rank, name, position, age, and MLB organization. Player ages for the broader roster come from a separate bulk fetch of active MLB players via the MLB Stats API.

Football rookie data comes from KeepTradeCut’s dedicated rookie rankings endpoint, with FantasyCalc dynasty values overlaid for any rookie present in both feeds. Player ages and years-of-experience come from Sleeper’s player database, which is the most complete public source for NFL roster metadata.

The Prospect Board, Rookies tab, or Farm tab shows no data.

Prospect and rookie data load asynchronously and can take a few seconds after launch. For baseball, if it doesn’t appear, click the Load Prospects button. The data source is MLB.com, which occasionally changes its page structure. For football, the rookie board loads from KeepTradeCut on first visit to the Rookies tab and caches for the session. The Age Profile and Roster Timeline sections don’t depend on prospect or rookie data and should always render if ages have loaded.

What is Statcast and how does League Donation use it?

MLB’s tracking system that measures every batted ball, pitch, and player movement. It records exit velocity (speed off the bat, where 92+ mph is elite), launch angle, and barrel rate (percentage of batted balls at the optimal exit velocity and angle combination, league average ~7-8%, elite 15%+). From these measurements it derives expected stats that estimate what the outcome should have been regardless of where fielders were standing. League Donation uses expected stats to identify players whose results are running ahead of or behind their actual contact quality. Everything in this section is baseball-only. The NFL has player tracking through Next Gen Stats, but the public data feed is too sparse to support an equivalent expected-stats system, so the xStats tab is hidden when you’re in a football league.

What are xwOBA, xBA, and xΔ?

xwOBA (expected weighted on-base average): the single best summary of contact quality. When xwOBA exceeds actual wOBA, contact quality is ahead of results. League average ~.320. xBA (expected batting average): same method focused on hit probability. Useful for identifying BABIP-driven outliers. : year-over-year change in expected stats. Load two seasons on the xStats tab to see the columns. Positive = contact quality improved. This is the upstream signal that precedes changes in actual production.

Expected stats measure what contact quality has already produced in actual games. Projections estimate what a player will do over a full season. Both are useful. They answer different questions. The xStats tab handles expected stats; the Rankings tab handles projections.

What is the xStats tab?

A regression analysis tool that compares what Statcast says a player should be doing (expected stats based on contact quality, exit velocity, launch angle) against what they’re actually doing. When expected stats exceed actuals, contact quality is ahead of the stat line. When actuals exceed expected, the stat line is running ahead of the contact. Load Statcast data by clicking the Load button on the xStats tab.

What is the regression score (Reg column)?

A single number that combines multiple expected-vs-actual gaps (xwOBA, xSLG for batters; xwOBA, xERA for pitchers) into one directional signal. Positive means the player’s contact quality is better than their results. Negative means their results are flattering them. The magnitude reflects how far the surface stats have drifted from what the batted-ball data predicts. Sort by Reg to surface the largest divergences between contact quality and outcomes.

What are Trend Watch, My Roster Trends, and Full Trends?

Trend Watch combines rolling window game logs (7, 14, 30 games) with expected stats to classify each player. Six labels: Unlucky Slump (contact above results, recently cold), Cold Streak (neutral contact signal, recently cold), Correction (contact confirms decline), Breakout (contact confirms surge), Hot Streak (neutral contact signal, recently hot), Unsustainable (contact below results, recently hot), Steady (no signal).

My Roster Trends is the same analysis filtered to your roster. Also accessible via the Scan button on the Roster tab. Full Trends + Export covers every qualified player with CSV and JSON export. Batters and pitchers export separately.

Can I compare xStats across seasons?

Yes. Use the year selector on the xStats tab to load a second season. Once two seasons are loaded, xΔ columns appear: xwOBA change, exit velocity change, barrel rate change. A player whose expected stats improved year-over-year is developing. A player whose expected stats declined while results held is living on borrowed time. The xΔ columns are the upstream signal that precedes changes in actual production.

What is the Roster xStats Trends scan?

Once Statcast data is loaded on the xStats tab, go to the Roster tab and click the Scan button under xStats Trends. It checks every player on your roster against their Statcast expected stats and flags where contact quality and results diverge. You need to load xStats data first. The scan button has nothing to work with otherwise.

The xStats tab shows no data.

Click the Load button on the xStats tab. Statcast data doesn’t load automatically because it’s a large dataset (6 separate fetches). Once loaded, the data is cached for the session so you only fetch it once per year. During Spring Training and the first days of the regular season, data may be limited or unavailable for some players who haven’t accumulated enough plate appearances.

What does the min PA filter do?

Filters the xStats table by minimum plate appearances (batters) or innings pitched (pitchers). Defaults to no minimum early in the season so all players are visible. As the season progresses and sample sizes grow, increasing the minimum filters out small-sample noise. The dropdown options range from no minimum to 300+.

What is MLB Roster Status and how does it affect the data?

The tool cross-references player data against the MLB Stats API to pull current roster status (active, IL, minors, restricted list). This appears as status badges throughout the site. Injury status and roster designation update when you connect or refresh your league. Players on the injured list or optioned to the minors are flagged so you can see their status alongside their Statcast profile.

How do I export xStats or trend data?

CSV and JSON export buttons appear at the bottom of the xStats table and in the trend dashboards. The xStats export includes every column visible in the table: expected stats, actual stats, gaps, regression score. The trend export adds rolling window data across all four windows plus the trend classification. Files are timestamped and split by batters and pitchers.

What is Waiver Value and how does it work?

A composite score per free agent that answers: how much would adding this player improve your team, accounting for who you’d drop, what you need categorically, and how real the underlying performance is? Select “Waiver Value” from the Sort dropdown on the Free Agents tab. The formula is FitGain × UrgencyMultiplier × ConfidenceWeight + xStatsBoost. For points leagues, the urgency multiplier is omitted. Works across ESPN, Fantrax, Sleeper, Yahoo, and demo.

Tiers are distribution-based: Strong Add = top 10%, Solid Add = top 25%, Marginal = positive fit below 25th percentile. An absolute floor (FitGain > +0.5 VORP) prevents barren wires from manufacturing fake urgency. Hover the badge for the raw score and component breakdown.

Types explain why the player is valuable. Skill = sustained quality (default). Rebound = established player whose contact quality (xwOBA, xERA) exceeds actual results. Matchup = pitcher with a favorable upcoming opponent. Speculative = young player with limited track record, confidence dampened to 0.3. Use the Filter dropdown to isolate any type. Football leagues use Skill and Speculative only because Rebound and Matchup are baseball signals: Rebound needs Statcast contact-quality data, and Matchup uses the pitcher streamer pipeline.

What is the transaction ticket and how do contingencies work?

Click the ↗ icon next to any drop candidate to open the transaction ticket. It shows the full add/drop comparison: both players’ rank, VORP, and position; net VORP and z-score deltas; per-category impact bars; the WV tier and type with reasoning; xStats evidence for Rebound players; and FAAB bid range when applicable. Use the dropdown to compare against any roster player.

For the top 10 WV players, the ticket also shows contingencies: “If you miss [player]” with up to two alternatives at the same position family sorted by WV. This covers FAAB scenarios where you bid and lose.

How does FAAB bid pricing work?

When your league uses FAAB (ESPN, Sleeper, and Yahoo expose budget data; Fantrax doesn’t), a Bid column appears in Waiver Value sort showing a suggested range like $8–$14. The floor and ceiling are computed from the player’s WV percentile multiplied by your remaining budget, then adjusted by four factors: your budget position relative to league average (more remaining = bid more aggressively), season timing (early = conservative, late = use it or lose it), replacement depth (alternatives available = lower floor), and player type (Speculative = capped ceiling). Hover the bid range for the full rationale. The tool informs the decision. You submit claims on your platform.

How does the Waiver Spotlight work?

The Waiver Spotlight on the Overview tab identifies the best available pickups based on your roster’s positional needs. When Waiver Value data is available, it ranks by WV score instead of the simpler rank-plus-xStats heuristic. Each player shows their composite rank, position, VORP or projected points, ownership percentage, roster fit score, and value type badges (Rebound, Matchup) where applicable.

The Free Agents tab shows nothing, or every drop is the same player.

For ESPN, the tab fetches FAs from the API. Try changing the position filter or refreshing. For Fantrax and Yahoo, the pool is built from composite players not on any roster. If the Waiver Value sort shows “No waiver value upgrades found,” no available player improves over your current roster at any position.

If every row recommends dropping the same player, that player is your worst by VORP across multiple positions. This is correct. They’re the weakest link. After you make the move, the next calculation recommends a different drop. The tool doesn’t model sequential transactions in a single pass.

How are Power Rankings calculated?

A blended score from roster projection strength (60% weight) and win-loss record (40% weight). In the preseason when all records are 0-0, roster strength is 100% of the score. For categories leagues, the VORP column shows total roster value above replacement. For points leagues it shows projected fantasy points. The Rating column is normalized to a 40-100 scale where 100 is the top team. Hover over column headers for tooltip explanations.

Power Rankings shows “--” for all teams.

No projection data has been imported yet. Import projections from FantasyPros or FanGraphs in the Rankings tab. Power Rankings recalculate immediately.

Which panels can I export as an image?

Power Rankings (Overview tab), League Distribution and Positional Strength (Rosters tab, League view), Roster Age Profile and Dynasty Rankings (Farm tab), and Team Report Cards (Draft tab, Player List view). Each has a Share button in the top-right corner of its panel header. The button generates a PNG snapshot of just that panel, with the site header, footer, and toolbars stripped out. The file downloads to your browser’s default location with a name that includes the panel and the league or team context.

How does the image export actually work?

The Share button uses html2canvas to rasterize the live DOM into a PNG. Before rasterizing, the export code walks every styled element in the panel and resolves any modern CSS color functions (notably color-mix) into plain rgb() values via getComputedStyle, then writes those values back inline. html2canvas can’t parse color-mix natively, so without this pre-stamp pass the export would crash or produce blank tiles. Elements marked as toolbar buttons or filter chips are hidden during the snapshot via a data-share-export=“hide” attribute, so the exported image shows the panel content without controls.

The Share button shows an error or produces a blank image.

Most failures come from the browser blocking image rasterization on a panel that’s mid-render. Wait for the panel to finish loading (the spinner clears, the data populates), then click Share. If the issue persists, switching themes (light to dark or back) and retrying often resolves color-resolution edge cases. The export runs entirely client-side; nothing is uploaded.

The numbers look wrong across the board. Where do I start?

In order: confirm your projection sources are loaded in the Rankings tab, confirm your scoring configuration in League Configuration, check whether a preseason warning is active, and try disconnecting and reconnecting. Most data issues trace back to one of those four things.

Everything was working and suddenly broke.

Most likely an expired ESPN credential or Yahoo token. Disconnect (button in the header), then reconnect. For ESPN private leagues, refresh your espn_s2 and SWID cookies. For Yahoo, re-authorize through the OAuth flow. If the issue persists, clear your browser’s local storage for leaguedonation.com.

The Scoreboard shows “Offseason” or “Preseason” when I expect data.

The scoreboard requires scoring data from your platform. If your league’s matchup period hasn’t started generating stats yet, the scoreboard shows an offseason state. For baseball, this happens during spring training and resolves once Opening Day arrives. For football, this happens through the long offseason from February through August and resolves at Week 1. The empty state is expected behavior, not a bug. Connect anyway: rosters, rankings, draft board, dynasty values, and trade evaluation all work in offseason. Live matchup data fills in once your platform starts reporting it.