Data and units
Signing cohort
The July-June league year in which a transaction was logged, named for the season it ends in.
Cohort 2024 is every transaction logged from July 1, 2023 through June 30, 2024. It dates the signing, not the seasons the deal pays; those are the modeled seasons.
Used onCohort lab
Read with care. The 2020-21 and 2021-22 free agencies opened late (Nov 20, 2020 and Aug 2, 2021). The calendar flags beside the filters show the real window; the cohort mapping itself stays July to June. A cohort whose league year has not finished is marked partial.
Contract start season
The first season a contract pays, as the season-end year (2025 = 2024-25).
For most new signings and re-signings this equals the signing cohort. An extension starts after the current deal ends, so its start season is later than its cohort.
Used onTransaction search
Read with care. Extension start years are approximate (the log does not state them); an extension keeps the structural start it was signed with.
Modeled contract season
One season of a contract's schedule, priced against that season's own salary cap.
A contract is expanded into one row per season of its reported term (option years included). Each row carries a price and a source (see Price basis). It is a structural schedule, not a confirmed obligation.
Used onCohort lab, Salary distribution, Contract shape, Transaction search, Team depth
Read with care. Options may never have been exercised, and a waived deal's later seasons still appear. Do not read modeled seasons as active payroll.
Signing (reported transaction)
One line in the ProSportsTransactions log that records a contract.
A signing, re-signing, extension, draft-pick signing, two-way, Exhibit 10, 10-day or rest-of-season deal. Trades, waivers and coaches or executives are not counted. One player can have several lines in a season.
Used onCohort lab
Read with care. Repeat reports of the same priced deal within 60 days, and a few hand-checked lines that are not new contracts, are excluded (see Excluded reports). It is a transaction history, not a payroll.
Population scope
Which contract lines are in the analysis: all, standard, extensions only or re-signings only.
All = every contract line except coaches and executives. Standard = all minus two-way, Exhibit 10 and non-guaranteed lines. Extensions and Re-signings keep only lines flagged that way.
Used onCohort lab, Contract shape
Corresponding season cap
Each modeled season is divided by that season's own salary cap.
A deal signed in 2023 with seasons ending 2024, 2025 and 2026 is measured against the 2024, 2025 and 2026 caps. It is never held to the signing-year cap, so cap growth does not make later years look cheaper.
Unit% of one team's cap unless statedUsed onCohort lab, Salary distribution, Contract shape, Transaction search, Team depth
Reported AAV, annualized commitment, cumulative cap-points
Three related measures that are not interchangeable: price at signing, average cap share over the deal, and total cap share over the deal.
Reported AAV share = reported total ÷ reported years ÷ the signing-season cap (a price proxy). Annualized commitment = the average of the modeled seasons' cap shares. Cumulative cap-points = the sum of those shares. A 3-year deal at 10% of the cap each year is 10% annualized and 30 cap-points.
AAV share = (total value ÷ years) ÷ signing-season cap; annualized = mean over modeled seasons of salary_t ÷ cap_t; cumulative = sum over modeled seasons of salary_t ÷ cap_t × 100
Used onCohort lab, Salary distribution, Contract shape, Transaction search, Team depth
Read with care. Cumulative cap-points need every modeled season priced; with a gap the figure is left blank rather than understated. Annualized averages the seasons that are priced.
Reported AAV (% of signing-year cap)
Average annual value as logged, divided by the cap in the season the deal was signed.
Reported total value ÷ reported years, expressed against the team cap of the signing season. A flat average: it ignores raises and does not allocate a multi-year deal to later cap seasons.
(total value ÷ years) ÷ signing-season cap × 100
Unit% of team capUsed onCohort lab
Read with care. Only for signings whose log states both a length and a value.
Annualized commitment (% of cap)
The average of a contract's modeled-season cap shares.
For each modeled season, salary ÷ that season's cap; then the mean across the contract's priced seasons. This is the "annual" measure in the macro, portfolio, head-to-head and records tables.
mean over priced modeled seasons of salary_t ÷ cap_t × 100
Unit% of team cap per modeled seasonUsed onCohort lab
Cumulative cap-points (cap-years)
The sum of a contract's modeled-season cap shares: how many team cap-years the deal commits.
Each modeled season contributes salary ÷ that season's cap; the contract's cap-points are the sum. Ten percent of the cap for three seasons is 30 cap-points, which is not a 30% payroll share.
sum over modeled seasons of salary_t ÷ cap_t × 100
Unitcap-points (percentage points of one team cap, summed over years)Used onCohort lab
Read with care. Blank when any modeled season has no salary; the percentiles use only contracts with a complete schedule.
p25, p50, p75, p90
Percentiles across the contracts in the row: the median is p50, the middle half runs from p25 to p75.
Each is computed over the individual contracts in that cohort, team or group, for the measure named beside it (annualized commitment or cumulative cap-points). p90 is the level 10% of contracts exceed.
Used onCohort lab
Read with care. Cells with fewer than 10 contracts are flagged; small groups move a lot.
Reported value ($M)
The total contract value stated in the log, summed over the signings in view.
Only signings whose notes state a dollar total contribute, so it understates volume (about 44% of standard signings, about 93% of deals of three seasons or more).
Unit$ million, nominalUsed onCohort lab
Read with care. Reported at signing; not adjusted for later raises, options or incentives.
Cohort lab
Transaction type
New signing, re-signing or extension, from the log's own wording.
Extension if the line is flagged as an extension; re-signing if it says re-signed (and is not an extension); everything else is a new signing.
Used onCohort lab
Read with care. Wording drives the split. Where the log is generic ("signed free agent") the type is a best reading, not a verified one.
Cap commitment (league cap-years)
A cohort's total modeled commitment measured in league cap-years: 100% is every team's full cap for one season.
Each contract's cumulative cap-points ÷ 30 teams, summed over the cohort's signings (split by transaction type). A cohort can exceed 100% because it commits money across several seasons.
sum over signings of cumulative cap-points ÷ 30
Unit% of one league-wide cap seasonUsed onCohort lab
Read with care. Modeled terms, not payroll. With a franchise selected, the denominator is that franchise's single cap instead of 30.
Duration tier (term)
A signing's reported total term in seasons: 1, 2, 3, 4 or 5+, plus short-term deals with no term.
Taken from the reported term, option years included. Signings with no stated term are grouped by type instead: 10-day, 1-day, remainder of season, Exhibit 10 and Exhibit 9 or camp deals form the fringe / short-term group.
Used onCohort lab
Read with care. Reported term is structural; it does not confirm an option was exercised or the deal ran its length.
Commitment mix
Each duration tier's share of the cohort's total cumulative cap-points.
Every modeled season of every signing is valued against its own cap and summed; the mix shows how much of that total sits in 1-season deals, 2-season deals, and so on.
duration tier's cap-points ÷ the cohort's total cap-points
Unit% of the cohort's totalUsed onCohort lab
Read with care. Longer deals weigh more mechanically because they commit more seasons; use the count view for how many deals there were.
Reported-value mix
Each duration tier's share of the cohort's total reported contract value.
The same split as the commitment mix but using the dollar totals stated in the log, so it only includes signings that state a value.
Unit% of the cohort's reported $Used onCohort lab
Reported option (option / control)
Whether the log's wording says the deal carries a team, player or other option.
Team option and player option are as worded in the notes. Other covers mutual options and early-termination rights. No reported option means the notes do not mention one.
Used onCohort lab
Read with care. Wording only: it does not show whether an option was ever exercised, and modeled option seasons are structural.
Option share
The share of a team's scheduled reported AAV that sits in deals carrying a team or player option.
Sum of reported AAV in scheduled deals with a team or player option ÷ sum of reported AAV in all of that team's scheduled deals in the cohort.
Unit% of scheduled reported AAVUsed onCohort lab
Scheduled AAV ($M)
Reported average annual value summed over a team's deals that have a modeled schedule.
Team option AAV and Player option AAV are the same sum restricted to deals carrying that kind of option.
Unit$ million per year, summed across dealsUsed onCohort lab
Player / team option ratio
Player-option deals per team-option deal.
A franchise's count of deals with a reported player option divided by its count with a reported team option. Above 1 means more player-controlled options than team-controlled ones.
player-option deals ÷ team-option deals
Used onCohort lab
Read with care. Blank when the team has no team-option deals; small counts make the ratio jumpy.
Option-year mismatch
A deal whose reported option year does not line up with the option season the schedule modeled.
Mismatch count is option deals whose reported option year differs from the modeled option season; the rate divides by option deals that have a modeled option season.
mismatch count ÷ option contracts with a modeled option season
Used onCohort lab
Read with care. A data-quality check on the modeled schedule, not a statement about the contract.
Guarantee / entry condition
A contract feature the log flags: non-guaranteed, two-way, Exhibit 10 or qualifying offer.
Conditions can overlap on one signing. Team share is the share of the team's signings in the cohort matching the condition; the cap share beside it is the median reported AAV share for those signings.
Used onCohort lab
Entry type (fringe funnel)
How a player entered: two-way, Exhibit 10, both, or other fringe.
Entries are the two-way and Exhibit 10 signings in the selected cohorts. Players counts distinct players among them.
Used onCohort lab
Follow-through
The share of entry signings that were later followed by a standard (non-two-way, non-Exhibit-10) contract for the same player.
Followed into the complete observed history, not just the cohort window, so recent cohorts understate it (their players have had less time). Median days and the middle-50% range measure the wait from the entry signing to the first later standard transaction.
entries with a later standard deal ÷ entries × 100
Unit% of entriesUsed onCohort lab
Extension share
The share of a franchise's (or team's) signings in the window that are extensions.
Extensions ÷ all signings for that team over the same cohorts and population.
Unit% of signingsUsed onCohort lab
Read with care. In the head-to-head table the Extensions and Re-signings columns are the share of that team's signings that are extensions and re-signings.
Records tier badge
Where a signing's cumulative cap-points fall among the records currently in view.
Bands use the percentiles of the filtered audit set: below p25, p25-p75 (mid), p75-p90 (high) and above p90 (star or max). Unknown means the signing has no complete schedule.
Used onCohort lab
Read with care. The bands move with the filters: they rank a signing against the set you are looking at, not the whole league.
Start-season age
The player's age in the first contract season, not on the signing date.
Joined from the player-season data at the contract's start season. Where the player has no row for that season, age is borrowed from any other season he has one (age minus season is constant). Unknown means he has no player-season row in any year, typically a camp, Exhibit 10 or two-way signing who never played.
Used onCohort lab
Draft vintage and career stage
Draft year and the years between the draft and the contract's start season.
Career stage buckets are 0-2, 3-6 and 7+ years since the draft. Undrafted players have no draft year to count from, so they are their own career stage. Unknown means no draft metadata was found for the player in any season.
Used onCohort lab
Position roles (overlapping)
Guards, Wings, Forwards and Bigs built from the listed position; they overlap on purpose.
PG is a Guard; SG is a Guard and a Wing; SF is a Wing and a Forward; PF is a Forward and a Big; C is a Big. Shares of roles can add to more than 100%. Use the raw position for a split that does not overlap.
Used onCohort lab
Prior team seasons and current stint
How long the player had been with the signing franchise before the cohort.
Prior team seasons counts distinct seasons with that franchise strictly before the signing cohort. Current stint counts only the consecutive completed seasons immediately before it (zero if the previous season was elsewhere). Bands: first season, 1, 2-3, 4-6, 7+ prior seasons, or unknown.
Used onCohort lab
Read with care. Missing player IDs or history mean unknown, not first season. Tenure correlates with extensions, so compare within transaction type.
Head-to-head measures
Two franchises compared over the same cohort window, each against its own cap.
Event share is the share of a team's signings in a category; cap-point share is that category's share of the team's cumulative cap-points. League ranks use cumulative cap-points across all 30 franchises, with ties sharing a rank.
Used onCohort lab
Read with care. Recorded transaction histories, not rosters or payroll. Metadata coverage is the share of signings with position, age and draft data matched.
Franchise filter
Limit the analysis to signings made by one franchise (the signing team).
Denominators become that franchise's single team cap instead of the 30-team league cap. In the head-to-head lens it is replaced by Team A and Team B.
Used onCohort lab
View (within a lens)
Which sub-view of the lens is drawn.
Contract design: option leverage, contract design comparison, schedule quality or option-year audit. Head-to-head: team analysis (cohort trends and small graphics) or league rank comparison (all 30 franchises ranked by cumulative cap-points).
Used onCohort lab
Display (term lens)
All cohort seasons, or two cohorts side by side.
Compare two cohort seasons places the duration-tier mix of the two chosen cohorts next to each other.
Used onCohort lab
Compare by
The attribute the contract-design comparison is split on.
Position role (overlapping), age band, career stage, draft status, prior seasons with the franchise, current continuous stint, term, transaction type or option type.
Used onCohort lab
Measure (head-to-head)
The statistic the category-trend chart plots.
Share of team signings: events in the category ÷ the team's events. Median annual cap share: median annualized commitment. Signing count. Median cumulative cap-points.
Used onCohort lab
Overlay and graphic (head-to-head)
How the two teams' series are split and drawn.
Overlay is the category the series are split by (transaction type, contract term, option status, position group or position, age band, prior seasons with the franchise, current stint). Graphic chooses category trends or the cap spread (p25 to p75 of annualized commitment) by cohort.
Used onCohort lab
Raw source notes
The log's own text for the line, unedited.
Shown so a parsed term, value or type can always be checked against what was written. Parsed fields can be incomplete or wrong; the note is the evidence.
Used onCohort lab
Forward schedule diagnostics
Modeled seasons stacked by signing cohort to show overlap.
Stints are modeled season rows; cap points are their summed cap shares; an overlap flag marks players with more than one modeled contract covering the same season.
Used onCohort lab
Read with care. A structural fan-out, not a cap-obligations ledger.
Coverage and corrections
Schedule status
Whether a signing can be priced season by season.
Scheduled: at least one modeled season has a salary. Short-term / camp: no schedule and no stated value, but a 10-day, camp, two-way or non-guaranteed signal, so bounded by the minimum-salary scale. Never played: no schedule or value and the player did not appear in an NBA game that season (a camp or non-guaranteed deal in practice; multi-season wording, stated minimums, draft picks and large salaries are kept out). No stated terms: everything else.
Used onCohort lab
Signings priced
Scheduled signings as a share of scheduled plus no-stated-terms signings.
Short-term and never-played signings are left out of the denominator because they are bounded or not real commitments. Shown beside the salary-weighted figure, which is the headline.
scheduled ÷ (scheduled + no stated terms)
Unit% of signingsUsed onCohort lab
Salary priced
The share of first-season salary that does not sit in signings with no stated terms.
Weighted by money: each signing's first-season salary as a share of the cap is summed, and the no-stated-terms signings' part is the unpriced share. It reads far higher than the event count because unpriced signings are mostly minimum-level.
100 - (first-season salary in no-stated-terms signings ÷ first-season salary in all signings)
Unit%Used onCohort lab
Read with care. Measured for the roughly 55% of signings with a first-season salary on file (camp deals and players who never played mostly have none), so it is a cross-check, not an audit.
Coverage flags
Two flags on signings that have no stated terms.
Flag: multi-season marks a no-stated-terms signing that is an extension or re-signing, states a value, or uses multi-season or rookie-scale wording, so it could be a multi-season deal. Flag: salary ≥5% cap marks one whose first-season salary is at least 5% of the cap, so it could matter.
Used onCohort lab
Partial schedule
A scheduled signing with at least one modeled season unpriced.
Its annualized figure averages the priced seasons; its cumulative cap-points are left blank.
Used onCohort lab
Price basis
Where a modeled season's salary comes from.
Observed / realized: salary actually paid (player-season data, or Spotrac's historical payrolls where that is blank). Contract terms (extension): an extension priced from its own stated total ÷ term, because a realized join would attach the previous contract's pay. Contract schedule (Spotrac): a future season priced from Spotrac's forward schedule. Estimated flat: total ÷ years, equal each season. Mixed: a deal with both observed and estimated seasons. Partial observed; unknown gaps: some seasons have no price. Unavailable: none do.
Used onCohort lab
Read with care. Estimated and mixed prices are structural, so keep them visibly separate from observed pay.
Excluded reports and corrections
Log lines that are not counted, and lines whose terms were filled in.
A signing reported twice within 60 days (agreement, then formal signing) counts once, on the later report. A short list of hand-checked lines that are not new contracts is excluded the same way, and a few signings with no stated terms have them added from a cited source. Both lists, with reasons and sources, are in contract_history/term_overrides.csv.
Used onCohort lab
Read with care. Nothing is deleted; excluded lines stay in Transaction search, labeled with the reason.
Team coverage
How many of the 30 franchises appear in the snapshot.
A completeness check on team labels; 30 / 30 means every franchise has at least one signing in view.
Used onCohort lab
Salary distribution, free agency, team groups
Median, p25, p75, p90, max
Percentiles of player salary as a share of the salary cap, among the players in that season.
Each player-season is one standard roster contract, taken as cash salary (or cap hit, per the Salary measure) divided by that season's cap. The table and chart use the roster basis chosen above. In the team-groups table the same words describe the typical team-season in a group.
Unit% of that season's salary capUsed onSalary distribution
Gini
How unequally salary is spread: 0 means everyone earns the same, 1 means one player earns everything.
Computed over the players' salaries as a share of the cap. Pooled Gini treats every player in a group's team-seasons as one set; Team Gini is the median of each team-season's own Gini.
Used onSalary distribution
Salary measure (cash or cap hit)
Cash is the salary actually paid; cap hit is what counts against the cap.
Bands use cash because a veteran on a minimum exception carries a smaller cap hit than the cash he is paid, which would misplace every minimum deal. Cap hit is offered for payroll comparisons.
Used onSalary distribution
Roster basis
Which players count in each season: the season-end roster, without late signees, or an opening-night estimate.
Spotrac's payroll pages are a season-end snapshot (15 per team), so late signings are in and players cut or traded early are out. Season-end roster keeps everyone (too many minimum deals). Without late signees drops players whose only contract was signed after opening night (too few cheap deals; its median runs high). The opening-night estimate is the payroll players signed by opening night plus restored early departures; it sits between the other two.
Used onSalary distribution
Read with care. A traded player appears on his final team. None of the bases is an exact opening-night roster.
Salary bands
Five levels from the veteran minimum to above the max range.
Vet minimum or lower: at or below the 10+ years-of-service minimum (2.35% of the cap, read from the data in dollars). Above vet min, up to the MLE: up to the non-taxpayer mid-level exception. Above the MLE, below the max range: between the MLE and 24% of the cap. Max range: 24% to 36% of the cap. Above 36% of cap: higher than that. The thresholds for every season are in the Definitions table.
Unitcash salaryUsed onSalary distribution
Years of service
Seasons before this one in which the player appeared in a game.
Counted from the player index; the CBA counts edge cases differently, but every player on the 10+ minimum has 10 or more by this count.
Used onSalary distribution
Rookie-scale
Include (or leave out) rookie-scale contracts.
Rookie scale means a contract paid on the draft-pick scale (first- and second-round picks' first deals). Unticking removes them from the chart and every statistic on the tab.
Used onSalary distribution
From season, to season
The season window the tab covers.
Seasons are named by their two years (2017-18 is the season ending in 2018).
Used onSalary distribution
All shown
The same statistic pooled across the signing kinds currently ticked.
Untick a kind (new team, re-signed, extension, rookie scale) and it drops out of the pooled column.
Used onSalary distribution
Salary cursor
A horizontal line at a chosen share of the cap.
The number above each season counts the players earning at least that share that season; the closest player to the line is named.
Used onSalary distribution
Scale (linear or log)
Linear spaces salary evenly; log spreads the crowded minimum-salary region apart.
Only the chart axis changes, not the data or the statistics.
Used onSalary distribution
Offseason cycle
From the day negotiations open to the day before opening night.
Dates are hand-curated per offseason (with a source and a confidence note); opening night is read from the game dates. 2020 opened Nov 20 (32 days) and 2021 opened Aug 2 (78 days); the rest opened June 30 or July 1 (107-116 days). Every contract signed inside a cycle belongs to it.
Used onSalary distribution
Signing kind
New team, re-signed, extension or rookie scale, from the notes (and last season's payroll where the notes are generic).
Extension: flagged as an extension. Rookie scale: a signed first- or second-round pick (draft picks are not free agents). Re-signed: the notes say re-signed, or are generic and the player ended last season on the same team. New team: the notes say signed free agent, or are generic and he ended last season elsewhere (or nowhere).
Used onSalary distribution
Read with care. Status (restricted or unrestricted) is stated in about two thirds of notes and left blank, never guessed, for the rest.
Years, AAV, % of cap (free agency)
Reported length, average annual value, and AAV as a share of the cap in the season the deal was signed.
AAV is the reported total ÷ years, option years included in the years. % of cap divides by the cap in the signing season; for an extension that is the cap when it was signed, not the later year it starts, so extensions run a few points high.
Unityears; $ millions per year; % of capUsed onSalary distribution
No sign-and-trades
Leave out re-signed and extension deals whose player ended last season on a different team.
Those are sign-and-trades, or trades between the end of the season and the signing. The deal stays under the signing team unless this is ticked.
Used onSalary distribution
Break down by
Splits the signings by length, age, position or salary tier.
Length buckets are the reported term; age is the player's age in the first contract season; position is the listed position group; tier is the salary band of the average annual value.
Used onSalary distribution
Team groups
Overlapping sets of team-seasons by how far the team got.
Missed the playoffs; made the playoffs; three straight playoff seasons (this season and each of the previous two); conference finals or better; reached the Finals; champions. A champion is also in every group below it, so the groups overlap.
Used onSalary distribution
Team payroll-shape measures
Per team-season measures of how payroll is built.
Top salary: the highest salary as a share of the cap. Top-3 share: the share of payroll going to the three highest-paid players. Payroll % cap: total payroll over the cap. Avg age: mean player age. 30+: the share of players aged 30 or older. Rookie share: the share of payroll on rookie-scale contracts. The chart shows the median team-season in each group and the middle half of teams.
Used onSalary distribution
vs win % / vs playoff round
Rank (Spearman) correlation of a payroll measure with win percentage or playoff round across team-seasons.
A guide to association, not a test: a team's seasons are not independent, and rookie-scale stars and injuries move both sides.
Used onSalary distribution
Contract shape
Reported events (contract shape)
Contract lines in the window, by start season, in the chosen population.
One line is one reported signing; coaches and executives and repeat reports are excluded. The other cards give the share with a stated term and the typical term and salary.
Used onContract shape
Contract start season window
The page filters and groups by the season a contract starts, not the date it was signed.
Start season is the season-end year of a contract's first season. The selector defaults to 2018 through the last complete cohort, where the log is most complete; earlier seasons are selectable but have more signings with no stated terms.
Used onContract shape
Read with care. The cohort lab groups by signing cohort (July-June of the signing date); an extension signed in one cohort starts in a later season, so the two pages can place the same deal in different years.
Structured terms
Signings whose log states a reported term in seasons.
These are the signings the term, option and horizon views can use. The percentage is their share of all reported events in the window.
Used onContract shape
Median reported term
The median reported length, in seasons, of structured deals (option years included).
Computed only over signings that state a term.
UnitseasonsUsed onContract shape
Median salary / cap
The median of salary ÷ that season's cap across the observed contract-season salaries of the deals in view.
One observation is one modeled contract season with a salary on file. The note shows what share of events have at least one such observation.
Unit% of that season's team capUsed onContract shape
Cohort allocation
How each start-season cohort is made up.
Observed cap-share allocation splits the cohort's observed salary-over-cap by new signing, re-signing and extension, and by 1 season versus 2+. Reported-event composition counts the signings by duration class: in-season short term, camp or exhibit, two-way, 1, 2 and 3+ seasons, and duration not classified.
Used onContract shape
Read with care. Allocation uses salaries on file; composition uses counts.
Commitment horizon
The share of structured deals that reach each modeled contract year.
Y1 is the first season; Y5+ is the fifth season or later. A cell is the share of that cohort's structured deals with at least that many seasons.
Unit% of structured dealsUsed onContract shape
Term × control
Reported term against the option language, sized by number of deals and colored by median salary share.
Circle area is the number of structured deals; the color is the median salary as a share of the applicable season cap.
Used onContract shape
Read with care. Option language is wording, not exercise.
Cap-relative price
Median salary as a share of cap, by cohort, split by reported term or contract type.
Each point is the median of salary ÷ cap for observed contract-season salaries of that cohort and split.
Used onContract shape
Team profile and contract record
A franchise's signing mix, and a single player's logged contracts.
The record lists structural signing events, not a contiguous obligations ledger; an extension can overlap a prior deal's apparent window, and option positions are modeled, not verified.
Used onContract shape
Transaction search
Contract or trade
The two kinds of line in the log: a contract (signing, re-signing, extension and so on) or a trade.
Contracts are the parsed ProSportsTransactions contract lines. Trades are one entry per trade, merged from the log's one-row-per-team records.
Used onTransaction search
Transaction types
A line gets exactly one type, by the first rule that matches.
In order: Coach / executive; Extension; Draft pick (first- or second-round pick or rookie scale); Two-way; Exhibit 10; 10-day; Rest of season; Re-signing; otherwise Signing. A re-signing that is also a two-way, camp or draft-pick deal shows its type with a re-signed tag.
Used onTransaction search
Terms (column)
How much of the deal's length and value the log states.
Length and value both stated: shown as years, total and per year. One missing: the other is shown with a note saying which is not stated. Neither stated: for two-way, Exhibit 10, 10-day, rest-of-season and draft-pick deals the deal type is shown (two-way scale, camp deal, rookie scale, and so on) with length and value marked not stated; otherwise Terms not stated.
Used onTransaction search
Read with care. Not stated means the log did not say, not that the deal had no length or salary.
Tags on a line
Short labels for things worth knowing about a line.
re-signed: a re-signing shown under another type. option: the notes mention a team, player or other option. non-guar.: non-guaranteed. duplicate report: the same priced deal was logged again within 60 days, so only the later report counts. not a new contract: a hand-checked line that is not a contract (reason shown on expand). terms added: the log gave no terms and they were added from a cited source. voided: a trade the log marks as voided or rescinded.
Used onTransaction search
Search and filters
How the search box and filters combine.
Every word in the search box must appear (in the name, notes, teams, nicknames or trade assets); quote a phrase to match it exactly. Team matches any team in the transaction, including trade partners. Min value is total contract value in $ millions, and Min years is the reported length. Length and value stated keeps only deals that state both. Repeat reports, non-contracts and coaches or executives are hidden unless their box is ticked.
Used onTransaction search
Trade legs
What each team in a trade acquired and what it sent out.
The log records a trade once per team; rows sharing a date and the same set of teams are merged into one trade with a leg per team. Team names are matched to the 30 franchises. A few rows name no counterparty and stay as single-team entries.
Used onTransaction search
Read with care. Assets are free text from the log (players, rights, picks with protections, cash).
Team depth
Positions (PG, SG, SF, PF, C)
The one position a player is listed at: the position logged in his grading season.
A player who covers two spots appears at one. The drop-off and weakest-position reads follow these listings.
Used onTeam depth
Tiers
Seven levels from Franchise to Outside the rotation, cut by rank.
Players with 500+ minutes are ranked league-wide and within their position; the tier follows the average of the two percentiles. The cutoffs follow the original's league-wide proportions: about the top 10 are Franchise, the next 35 Core, the next 45 High-end starter, the next 90 Starter / key reserve, the next 90 Rotation. Everyone else with 500 minutes is Roster / depth; anyone under 500 is Outside the rotation, including players who missed most of a season.
Used onTeam depth
Read with care. The cutoffs scale with the number of 500-minute players that season (the hover on each tier shows the exact count).
Rating (LEBRON or DARKO)
The per-100-possession player rating the tiers are built from.
LEBRON is BBall Index's rating; DARKO is Kostya Medvedovsky's (DPM). Each is ranked separately, so the two ladders can differ.
Used onTeam depth
Value: over replacement or raw rate
Over replacement multiplies the rating above replacement by minutes; raw rate is the rating alone.
Over replacement = (rating − (−1.0)) × minutes ÷ 1000, so heavy minutes below replacement count against a player. Raw rate ranks players on the per-100 rating and ignores minutes (players under 500 minutes are left out of the drop-off and stars-or-depth views, and an empty slot counts at replacement level).
VORP = (rating + 1.0) × minutes ÷ 1000
Used onTeam depth
Read with care. Replacement is −1.0, about the ninth or tenth man by minutes on a .500 team (the original moved to this from −2 after testing teams between .450 and .550).
Current-season blend
The 2026-27 view grades on the two seasons before it.
The rating is a minutes-weighted blend of last season and the one before (the older season at half weight), never below last season on its own when that was a full 500-minute sample. Over-replacement value applies it to the larger of last season's minutes or 90% of the older season's. A player needs 500+ of those minutes to be ranked; players with no data yet sit outside the rotation.
Used onTeam depth
Columns: positions or groups
How the grid is laid out; tiers always rank within the five listed positions.
Positions shows PG, SG, SF, PF and C (each player at the one position logged in his grading season). Groups regroups them as Guards (PG, SG), Wings (SF) and Bigs (PF, C) for display only.
Used onTeam depth
vs league avg
The team's player count in a tier, the league average for that tier, and the difference.
The bar is centered on the league average and spans ±3 players; the signed number is the team count minus the average. The average counts every rostered player in that tier across the 30 teams.
Used onTeam depth
Rotation line
The divider between the top five tiers and the rest.
Players above it are rotation-level or better.
Used onTeam depth
Top five and players 6-10
The sum of a team's top five (then next five) player values, ranked across teams.
In over-replacement mode the sums include every rostered player with a value (a sub-500-minute player adds little); in raw-rate mode only 500-minute players count and empty slots count at replacement level.
Used onTeam depth
Steepest fall-off and thinnest spot
Where a roster loses the most behind its best player, and where its best player is weakest.
Steepest fall-off: the position (or group) where the gap between the top player and the next is largest. Thinnest spot: the position where the team's best player sits furthest below the league average best there. Both read within the chosen columns.
Used onTeam depth
Payroll, at tier prices, vs tier prices
What a team pays against what its players' tiers cost across the league.
Payroll (also the Payroll column of the champions table) is the cap share of players with a salary on file. At tier prices swaps each player's salary for the league's average (mean) cap share for his tier that season. The difference, in cap points, is how much more or less than the tier prices the team pays; the league nets to zero.
Used onTeam depth
Read with care. Means, not medians, so the league sums to zero; the tier price list uses medians.
Optimization score
How much over-replacement value a team buys per cap dollar, ranked 0 to 100.
Value over replacement of the players with both a value and a salary on file, divided by their cap share (VORP per 10% of the cap), then ranked across the 30 teams: 100 is the most for the money. It always uses over-replacement value, so the Value switch does not change it; the Rating switch does.
Σ VORP ÷ (Σ cap share × 10), ranked across teams
Used onTeam depth
Read with care. Cheap rookie-scale stars and injured seasons swing it: cost efficiency, not a verdict on a front office.
Commitments and under contract
Salary already committed in later seasons, split by today's tier.
Each season's committed salary as a share of that season's own cap, for players with a salary listed (an option year counts as committed). The Under contract in filter keeps players signed that season; P, T and NG badges mark a player option, team option or non-guaranteed year. 2026-27 leaves out players with no salary listed.
Used onTeam depth
Read with care. Tiers are held at today's grades, so aging and improvement are not modeled.
Chips and flags
What the number on each player chip means.
Grade is the player's value (or rating in raw mode). Cap share is salary over that season's cap; a red ▲ means more than 1.5 times the league median for his tier, a green ▼ less than half. How acquired shows the contract's origin.
Used onTeam depth
How acquired
How the player's current contract came about.
Rookie scale: a first- or second-round pick's signing. Extension: signed as an extension (it governs seasons after the one it was signed in). Re-signed. Free agent. Acquired by trade: the contract was signed with a different team than the one he is on (inferred; trades are not in the contract data). Two-way / short-term. Not in our records: no matching contract (deals signed before 2014, very recent signings, rookies with no data).
Used onTeam depth
Read with care. Trade is inferred from the signing team differing from the roster team.
Tier price list
The league-median salary of each tier, as a share of that season's cap, season by season.
Medians over rostered players with a salary on file, so seasons compare across cap growth. The dotted line marks the season shown.
Used onTeam depth
Who wins, and how they spend
Every team-season since 2015-16, grouped by how far the team got, with average spending and player counts by tier.
Spend is average salary by tier as a share of the cap; players is the average count per tier. Correlations are rank correlations with win percentage. Franchise + Core is a team's cap share on those two tiers; Rank of 30 ranks it within the season; Top-3 tier players counts Franchise, Core and High-end starter players.
Used onTeam depth
Read with care. Tiers are graded on the same season, so counts of top-tier players partly are winning; spending is the cleaner read, and rookie-scale stars (cheap) blur it. Descriptive only.
Top-ten drop-off
The team's ten best player values in order, against the league average at each rank.
Rank 1 is the team's best player by value. The dotted line is the league average at that rank and the band is the middle half of teams. A line that falls away quickly means the roster is top-heavy.
Used onTeam depth
Stars versus depth
Each team's top-five value against its players six to ten.
The dashed lines are league averages. Top-left is deep without stars, top-right is stars and depth, bottom-left is thin, bottom-right is top-heavy. Click a dot to open that team.
Used onTeam depth
Best player by position
The team's best value in each column of the ladder, against the league average best there.
Follows the Columns switch: five positions or three groups. A column with nobody qualified counts at replacement level.
Used onTeam depth
Payroll by tier
The team's salary in each tier as a share of that season's cap, with the league average per tier marked.
Players with no salary on file are left out, so the total can understate; the note beside the chart says how many players are included. The tax line and aprons are quoted for completed seasons.
Unit% of that season's capUsed onTeam depth
League table
Players per tier for every team, then spending against tier prices and the optimization score.
Click a header to sort and a row to open the team. Spend versus tier prices is in cap points; optimization is the 0-100 cost-efficiency rank.
Used onTeam depth
Not on the ladder yet
Players with no NBA data on file, counted as outside the rotation.
Rookies, two-way signings and camp invites with no qualifying minutes yet. They are listed below the grid and included in the tier counts.
Used onTeam depth
No definition matches that search.