Guides · 2026-07-10
How the salary sheet works
Your salary sheet is the source of truth for every dollar in your league — _.gm reads it and never writes to it. This guide explains the format the starter sheet uses (and that _.gm reads best): what each section does, what’s safe to edit, and the one rule that keeps your dashboard trustworthy. One spreadsheet tab per team.
The cap block
Top of every team tab: one row per season with Salary Cap, Expenses, and Available Cap. The cap column is league policy — edit it freely, per year if your cap grows. In the starter sheet, Expenses and Available are formulas: they sum the roster and adjustments below, so they update themselves as you edit contracts. Leave the formulas in place and this block can never drift out of sync.
The roster grid
One row per player: position, name, then a column per season holding that year’s cap hit ($8.5m style). A multi-year deal is just amounts in consecutive year columns. An empty year cell means no contract that year — a rostered player with no amounts at all reads as unsigned. Extra columns (an injured-list mark, signing notes) are welcome if your league uses them — _.gm reads what your sheet declares — but the starter sheet keeps it to the essentials.
End tags: write UFA, RFA, or TEAM in the year aftera contract’s last paid season to say how it expires. Real rows from live leagues:
| POS | NAME | 2026 | 2027 | 2028 | MEANING |
|---|---|---|---|---|---|
| TE | Travis Kelce | $8.0m | UFA | — | 1 year left, then unrestricted |
| SG | Jaden Ivey | $8.2m | RFA | — | restricted — you can match offers |
| SF | Cooper Flagg | $10.6m | $11.1m | TEAM | 2 years, then a team option |
End tags are optional.They are league conventions, not requirements — if your league doesn’t use them, leave them out entirely and _.gm works exactly the same. When present, they show on the ledger and in the trade machine.
Off-cap sections
Below the roster, an optional section for players whose salaries don’t count: a Practice Squad (NFL) or D-League Roster (NBA). Same columns as the roster — the section title is what tells _.gm these dollars stay off the cap.
Cap adjustments
The Cap Adjustments block handles dollars with no roster row: dead cap from a cut, retained salary in a trade (a positive amount — a charge), or relief when another team pays part of a contract (a negative amount). Two real rows from live leagues:
| PLAYER | 2026 | COMMENT | MEANING |
|---|---|---|---|
| Bradley Beal | $15.7m | Buyout | dead cap — a charge that counts against you |
| Nik Bonitto | −$11.0m | Cash Exchanged | relief — another team pays this part |
The one rule that matters
Every year’s Expenses must equal that year’s contracts plus adjustments. That’s the check _.gm runs against your sheet’s own numbers on every sync — it’s how we know we read your sheet correctly, and how you know the dashboard is honest. The starter sheet’s formulas satisfy it automatically. If your sheet ever disagrees with itself (a SUM range that missed a new row, say), _.gm flags it to the commissioner as a sheet issue rather than silently guessing.
Safe to edit vs load-bearing
Edit freely: salaries, contract lengths, cap sizes, player rows (add and remove inside the sections), team and GM names, end tags, adjustments.
Keep as-is: the header texts _.gm anchors on — Salary Cap, Position / Name, the year headers, and the section titles. Renaming those is like moving street signs: everything still exists, but nothing can be found. At season rollover, add the new year column at the end and (if you like) delete the oldest cap-block row — _.gm follows the years your sheet declares.
Don’t have a sheet yet?
The setup flow can generate this whole format for you — every team tab and roster prefilled from your platform with placeholder contracts, formulas included. You just edit the numbers.