A bonus check almost always looks smaller than the number your boss quoted. That is not a mistake. It is withholding, and the math is simple enough to put in a function.
I added a bonus estimator to SalaryPayTools, a small site of free US pay calculators. Here is what it models and why.
The three pieces of a bonus check
For a separately paid cash bonus (US W-2, 2026), the estimate has three parts:
- Federal income tax withholding. Many employers use the optional flat percentage method for supplemental wages: 22% up to $1 million in the calendar year, 37% on the part above that.
- Social Security. 6.2% up to the 2026 taxable maximum of $184,500.
- Medicare. 1.45% on all covered wages, plus an extra 0.9% on wages above $200,000.
State and local withholding vary too much to guess, so the calculator takes an optional percentage from you instead of picking one from your location.
Worked example
A $10,000 bonus, $60,000 already earned this year, no state withholding:
| Gross | Federal 22% | FICA 7.65% | You receive |
|---|---|---|---|
| $1,000 | $220 | $76.50 | $703.50 |
| $5,000 | $1,100 | $382.50 | $3,517.50 |
| $10,000 | $2,200 | $765 | $7,035 |
| $20,000 | $4,400 | $1,530 | $14,070 |
So a $10,000 bonus lands around $7,035, or 70.35%.
The core logic
const FEDERAL_RATE = 0.22; const FEDERAL_HIGH_RATE = 0.37; // above $1M supplemental wages const SS_RATE = 0.062; const SS_CAP = 184_500; const MEDICARE_RATE = 0.0145; export function bonusAfterTax( bonus: number, priorSupplemental = 0, ssWagesYtd = 0, statePct = 0 ) { const lowPart = Math.max(0, Math.min(bonus, 1_000_000 - priorSupplemental)); const highPart = bonus - lowPart; const federal = lowPart * FEDERAL_RATE + highPart * FEDERAL_HIGH_RATE; const ssBase = Math.max(0, Math.min(bonus, SS_CAP - ssWagesYtd)); const ss = ssBase * SS_RATE; const medicare = bonus * MEDICARE_RATE; const state = bonus * (statePct / 100); return bonus - federal - ss - medicare - state; } (A simplified sketch of the idea, not the site's exact code. The additional 0.9% Medicare is left out here.)
The thing people get wrong
The "22% bonus tax" is a withholding procedure, not a special tax bracket. At filing time your bonus is taxed like the rest of your income, so you can be over-withheld or under-withheld. Some payroll systems also use the aggregate method, which this model does not cover.
Try it
You can play with the numbers here: Tax and Bonus Calculator. It is an estimate, not tax advice.
