Take-home paycheck estimator template
Net pay per paycheck, month and year after 2025 federal brackets, FICA, a state rate and pre-tax deductions, single or married. Six inputs, seven calculation fields.
Try the live Take-home paycheck estimator first- Import-ready Gravity Forms JSON
- One-page install guide
- The plugins it needs, with links
- Everything in Template
- Step-by-step PDF with screenshots of every field and formula
- The CSS skin from this site, with notes on matching your brand
What you'll need
Check these before you buy so there are no surprises. Links may be affiliate links.
- Required Gravity Forms (any license) Calculation fields are in core; the min() and max() bracket math need GP Advanced Calculations.
- Required GP Advanced Calculations (Gravity Wiz) Exponents, functions and date math in calculation fields. The formulas in this template use its syntax. Part of Gravity Perks; needs the Spellbook plugin active as well.
Free build guide: Take-home paycheck estimator for WordPress
This guide rebuilds the Take-home paycheck estimator from this site in Gravity Forms: 7 inputs, 7 live results and no submit button. Expect about 45 minutes by hand. The template above is the same form as an import file, and the bundle adds a PDF version of this guide with a screenshot of every setting, plus the stylesheet.
You will end up with:
- Take-home per paycheck
- Take-home per year
- Take-home per month
- Federal income tax
- Social Security & Medicare
- State income tax
- Total tax rate (%)
What you need
- Gravity Forms (any license) — Calculation fields are in core; the min() and max() bracket math need GP Advanced Calculations.
- GP Advanced Calculations (Gravity Wiz) — Exponents, functions and date math in calculation fields. The formulas in this template use its syntax. Part of Gravity Perks; needs the Spellbook plugin active as well.
The formulas below use GP Advanced Calculations syntax: exponents, functions or date math that core calculation fields cannot do. Install and activate it, with its Spellbook parent plugin, before you start; without it every result shows 0.
1. Create the form
- Go to Forms → New Form and name it Take-home paycheck.
- In Form Settings → Form Layout, set the CSS Class Name to
fo-email-results, and the button text to Email me these results. - Leave the form open in the editor; the fields come next.
2. Add the fields, in this order
Field IDs are assigned as you add fields. If yours come out differently, change the {Label:ID} references in the formulas to match your IDs. Settings not mentioned stay at their defaults.
1. Gross salary per year · Number · ID 1
Number Format Currency; Default Value 75000.
2. Filing status · Radio Buttons · ID 2
Custom CSS Class (Appearance tab) fo-segmented.
Choices (tick show values and enter each value):
- Single — value
1(selected by default) - Married filing jointly — value
2
3. 401(k) or pre-tax retirement (%) · Number · ID 3
Number Format 9,999.99; Default Value 6; Description “Your own contribution; the match is not pay.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
4. Health & other pre-tax deductions per year · Number · ID 4
Number Format Currency; Default Value 2400; Description “Your share of premiums, HSA, FSA, commuter benefits.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
5. State income tax (%) · Number · ID 5
Number Format 9,999.99; Default Value 5; Description “Flat estimate of your state's effective rate. 0 in Texas, Florida, Washington and six others; 4–6% is common; up to 9–13% in California, New York and Oregon.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
6. Paid · Drop Down · ID 6
Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed).
Choices (tick show values and enter each value):
- Every two weeks — value
26(selected by default) - Twice a month — value
24 - Monthly — value
12 - Weekly — value
52
7. Take-home per paycheck · Number · ID 7
Number Format Currency; Description “An estimate on 2025 federal brackets with the standard deduction and no credits. Your W-4 choices move the withholding, not the tax.”; Custom CSS Class (Appearance tab) fo-result; tick Enable Calculation, Rounding 2.
( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - ( 0.10 * min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 11925 * {Filing:2} ) ) + 0.12 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 48475 * {Filing:2} ) ) - ( 11925 * {Filing:2} ) ) ) + 0.22 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 103350 * {Filing:2} ) ) - ( 48475 * {Filing:2} ) ) ) + 0.24 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 197300 * {Filing:2} ) ) - ( 103350 * {Filing:2} ) ) ) + 0.32 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 250525 * {Filing:2} ) ) - ( 197300 * {Filing:2} ) ) ) + 0.35 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) - ( 250525 * {Filing:2} ) ) ) + 0.37 * max( 0, ( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ) - ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) ) ) - ( min( {Gross:1}, 176100 ) * 0.062 + {Gross:1} * 0.0145 + max( 0, ( {Gross:1} - ( 200000 + ( {Filing:2} - 1 ) * 50000 ) ) ) * 0.009 ) - ( ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) ) * {State:5} / 100 ) ) / {Paid:6}
8. Take-home per year · Number · ID 8
Number Format Currency; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - ( 0.10 * min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 11925 * {Filing:2} ) ) + 0.12 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 48475 * {Filing:2} ) ) - ( 11925 * {Filing:2} ) ) ) + 0.22 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 103350 * {Filing:2} ) ) - ( 48475 * {Filing:2} ) ) ) + 0.24 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 197300 * {Filing:2} ) ) - ( 103350 * {Filing:2} ) ) ) + 0.32 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 250525 * {Filing:2} ) ) - ( 197300 * {Filing:2} ) ) ) + 0.35 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) - ( 250525 * {Filing:2} ) ) ) + 0.37 * max( 0, ( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ) - ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) ) ) - ( min( {Gross:1}, 176100 ) * 0.062 + {Gross:1} * 0.0145 + max( 0, ( {Gross:1} - ( 200000 + ( {Filing:2} - 1 ) * 50000 ) ) ) * 0.009 ) - ( ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) ) * {State:5} / 100 ) )
9. Take-home per month · Number · ID 9
Number Format Currency; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - ( 0.10 * min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 11925 * {Filing:2} ) ) + 0.12 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 48475 * {Filing:2} ) ) - ( 11925 * {Filing:2} ) ) ) + 0.22 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 103350 * {Filing:2} ) ) - ( 48475 * {Filing:2} ) ) ) + 0.24 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 197300 * {Filing:2} ) ) - ( 103350 * {Filing:2} ) ) ) + 0.32 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 250525 * {Filing:2} ) ) - ( 197300 * {Filing:2} ) ) ) + 0.35 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) - ( 250525 * {Filing:2} ) ) ) + 0.37 * max( 0, ( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ) - ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) ) ) - ( min( {Gross:1}, 176100 ) * 0.062 + {Gross:1} * 0.0145 + max( 0, ( {Gross:1} - ( 200000 + ( {Filing:2} - 1 ) * 50000 ) ) ) * 0.009 ) - ( ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) ) * {State:5} / 100 ) ) / 12
10. Federal income tax · Number · ID 10
Number Format Currency; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
( 0.10 * min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 11925 * {Filing:2} ) ) + 0.12 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 48475 * {Filing:2} ) ) - ( 11925 * {Filing:2} ) ) ) + 0.22 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 103350 * {Filing:2} ) ) - ( 48475 * {Filing:2} ) ) ) + 0.24 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 197300 * {Filing:2} ) ) - ( 103350 * {Filing:2} ) ) ) + 0.32 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 250525 * {Filing:2} ) ) - ( 197300 * {Filing:2} ) ) ) + 0.35 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) - ( 250525 * {Filing:2} ) ) ) + 0.37 * max( 0, ( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ) - ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) ) )
11. Social Security & Medicare · Number · ID 11
Number Format Currency; Description “6.2% to the wage base plus 1.45%, and 0.9% above $200,000.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
( min( {Gross:1}, 176100 ) * 0.062 + {Gross:1} * 0.0145 + max( 0, ( {Gross:1} - ( 200000 + ( {Filing:2} - 1 ) * 50000 ) ) ) * 0.009 )
12. State income tax · Number · ID 12
Number Format Currency; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 0.
( ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) ) * {State:5} / 100 )
13. Total tax rate (%) · Number · ID 13
Number Format 9,999.99; Description “All three taxes as a share of gross pay.”; Layout: half width, on the same row as its neighbor (drag the field beside it in the editor; no CSS class needed); Custom CSS Class (Appearance tab) fo-result fo-result--sub; tick Enable Calculation, Rounding 1.
( ( 0.10 * min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 11925 * {Filing:2} ) ) + 0.12 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 48475 * {Filing:2} ) ) - ( 11925 * {Filing:2} ) ) ) + 0.22 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 103350 * {Filing:2} ) ) - ( 48475 * {Filing:2} ) ) ) + 0.24 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 197300 * {Filing:2} ) ) - ( 103350 * {Filing:2} ) ) ) + 0.32 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 250525 * {Filing:2} ) ) - ( 197300 * {Filing:2} ) ) ) + 0.35 * max( 0, ( min( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ), ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) - ( 250525 * {Filing:2} ) ) ) + 0.37 * max( 0, ( max( 0, ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) - 15750 * {Filing:2} ) ) - ( 626350 * {Filing:2} - ( {Filing:2} - 1 ) * 501100 ) ) ) ) + ( min( {Gross:1}, 176100 ) * 0.062 + {Gross:1} * 0.0145 + max( 0, ( {Gross:1} - ( 200000 + ( {Filing:2} - 1 ) * 50000 ) ) ) * 0.009 ) + ( ( {Gross:1} - ( {Gross:1} * {Retirement:3} / 100 + {Health:4} ) ) * {State:5} / 100 ) ) / {Gross:1} * 100
14. Email me these results · Section · ID 90
Description “One email with the numbers above, plus a link that brings them back.”; Custom CSS Class (Appearance tab) fo-email-results__head.
15. Your email · Email · ID 91
Description “Sent once, to this address only. No list, no follow-up.”; Custom CSS Class (Appearance tab) fo-email-results.
3. Email the results
This form submits once, to email the visitor their numbers. Three settings make it work, and the imported form already has them:
- Notification (Form Settings → Notifications): “Results to the visitor”, sent to the Email field, with the inputs and results as merge tags such as
{Home price:1}and a link back to the page. - Confirmation (Form Settings → Confirmations): type Redirect, to the page the form is on, with a query string that carries every input (
fo1={Home price:1}&fo2=…). Point it at your own page. - Prepopulation: each input has “Allow field to be populated dynamically” on, with the parameter name
foplus its ID, so the redirect fills the form back in and the results reappear.
4. Put it on a page and make it look like this
Add the form to any page with the Gravity Forms block, or the shortcode [gravityform id="X" title="false" ajax="false"]. The form inherits your theme’s styles; the classes you set in step 2 are hooks for the look you see on this site:
fo-resulton a calculation field makes it the big teal result panel.fo-result fo-result--submakes the smaller secondary figures.fo-segmentedon a radio field turns it into a segmented switch.- Two fields on one row is the editor’s own column layout: drag a field beside another and the row splits in half. No CSS class is needed, and the old
gf_left_halfReady Classes are deprecated.
The bundle includes the two stylesheets that implement those classes, with notes on matching your brand colors. Without them the form still works; it just looks like your theme’s default Gravity Forms styling.
How the math works is explained under “How it’s calculated” on the live Take-home paycheck estimator.