NBA contract history · definitions

What every measure and split means

One glossary for all the contract pages. Each entry gives the unit and the formula where there is one, and what to read it with care for. On any page, the ⓘ beside a label opens the same entry. Corrections to terms are listed with their reasons and sources in contract_history/term_overrides.csv.

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