Methodology
Last verified 2026-11-02 · Sources: IRS Publication 15-T (2026) · IRS Rev. Proc. 2025-32 · SSA contribution and benefit base · Report an error
Every rate on this site is transcribed from an official document, stored with its source and verification date, and applied by an engine that is tested against a second implementation. This page lists the sources, the steps and the limits.
Sources
Only documents that the site already uses are listed. A source is added when a figure taken from it is added, not before.
| Source | URL | Used for | Last checked |
|---|---|---|---|
| IRS Publication 15-T (2026) | https://www.irs.gov/publications/p15t | Federal income tax withholding: the percentage-method parameters (line 1g adjustment, pay periods, the nearest-dollar rounding rule) and the annual bracket schedule stored in data/tax_year/2026/federal_income_tax.json | 2026-10-30 |
| IRS Publication 15 (Circular E), 2026 | https://www.irs.gov/publications/p15 | FICA rates (6.2% Social Security, 1.45% Medicare, 0.9% additional above $200,000), the $184,500 Social Security wage base, FUTA, and section 7 supplemental wages | 2026-10-30 |
| IRS Rev. Proc. 2025-32 | https://www.irs.gov/pub/irs-drop/rp-25-32.pdf | The 2026 standard deduction amounts used in the worked example's line-1g explanation and stored in data/tax_year/2026/federal_income_tax_liability.json | 2026-10-30 |
| SSA - contribution and benefit base | https://www.ssa.gov/oact/cola/cbb.html | The wage base as the Social Security Administration publishes it. The figure the engine stores is the $184,500 quoted in Publication 15, not a number typed from this page | 2026-10-30 |
| Texas Comptroller | https://comptroller.texas.gov/taxes/ | Texas: the figures the calculator applies to that state's line | 2026-10-30 |
| ESD news release | https://esd.wa.gov/about-us/news-release/2025/paid-family-medical-leave-premium-rate-increases-113-2026 | Washington: the figures the calculator applies to that state's line | 2026-10-30 |
| Michigan Department of Treasury | https://www.michigan.gov/treasury/reference/taxpayer-notices/2026/04/15/425-income-tax-rate-for-individuals-and-fiduciaries-in-2026-tax-year | Michigan: the figures the calculator applies to that state's line | 2026-10-30 |
| Florida Constitution, Article VII, Section 5 | https://www.flsenate.gov/Laws/Constitution | Florida: the figures the calculator applies to that state's line | 2026-10-30 |
| Illinois Department of Revenue | https://tax.illinois.gov/forms/withholding/currentyear/il-700-t-withholding-guide-tables.html | Illinois: the figures the calculator applies to that state's line | 2026-10-30 |
| Pennsylvania Department of Revenue | https://www.revenue.pa.gov/Tax%20Rates/Pages/default.aspx | Pennsylvania: the figures the calculator applies to that state's line | 2026-10-30 |
| Georgia DOR | https://dor.georgia.gov/document/document/2026-employers-tax-guide-updated-september-2026/download | Georgia: the figures the calculator applies to that state's line | 2026-10-30 |
| California EDD | https://edd.ca.gov/siteassets/files/pdf_pub_ctr/de44.pdf | California: the figures the calculator applies to that state's line | 2026-10-30 |
| New York State | https://www.tax.ny.gov/pdf/publications/withholding/nys50_t_nys.pdf | New York: the figures the calculator applies to that state's line | 2026-10-30 |
ssa.gov answers automated command-line requests with an HTTP 403 (it filters non-browser clients); the page loads in a browser. The wage base the calculator applies is the one transcribed from IRS Publication 15, so no figure on this site depends on the SSA page loading. michigan.gov also returns 403 to command-line requests while loading in a browser; the 4.25% rate and $5,900 exemption are stored with their source quotes in the Michigan data file, so no calculated figure depends on that page loading either.
The 2026 state tax changes page is generated from the same data/tax_year/2026/ files; each row names the document already stored with that state's figures. Where a state page cites more than one document, its own sources block lists the full set.
How it works
- Transcribe the official table.
tools/extract_p15t.pyparses the downloaded Publication 15-T intodata/tax_year/2026/federal_income_tax.json. It refuses to write a schedule with the wrong number of bands, bands that are not contiguous, a first band that does not start at zero, rates that are not monotonic, or a base amount that disagrees with the previous band's arithmetic. - Load behind a gate.
engine/data.py(TaxYear) raisesUnverifiedValuefor any leaf whose status is notverifiedorderived.TaxYear.blockers()lists everything blocking publication, and a state with a blocker gets no page in the build. - Annualise and adjust.
engine/federal.py(adjusted_annual_wage_amount) implements Worksheet 1A lines 1c-1i: wages multiplied by periods per year, plus W-4 step 4(a), minus step 4(b), minus the standard adjustment when the Step 2 box is not checked. - Find the band and apply the rate.
find_band()andtentative_from_band()implement lines 2a-2g against the stored annual schedule. The result is divided by the periods per year (line 2h), Step 3 credits are subtracted, and the figure is rounded to the nearest dollar, half up (engine/money.py, line 4b: $2.50 becomes $3). - FICA, separately.
engine/fica.py(compute_fica) applies 6.2% up to the $184,500 wage base measured on year-to-date wages, 1.45% with no cap, and 0.9% only to wages above $200,000 from the same employer. Filing status does not change the withholding amount; it changes the return, not the paycheck. - State lines.
engine/state.py(compute_state) has one handler per state. States with no income tax return an explicit zero line rather than no line, and states whose own document defines a method (California DE 44 Method B, New York NYS-50-T-NYS Method II) are computed by that method, not by rate x gross. - Assemble the breakdown.
engine/paycheck.py(compute_paycheck) returns an ordered list - gross, federal, Social Security, Medicare, additional Medicare, state items, net - and the tests assert that the deductions add up and that net equals gross minus them. - Prove the browser agrees.
tools/golden_cases.pyexports fixtures from the Python engine;web/engine.jsis an independent implementation andtests/parity.mjsfails if the two disagree by a cent. The page you are reading could not render a different number from the one the calculator shows in your browser. - Render.
build_site.pyrecomputes every figure in the copy at build time and attaches the verification line to each page. Nothing numeric in the HTML is typed by hand.
Two steps are manual and always will be. Deciding that a published state document has actually changed is a human re-read of the page each tax year, and the state document URLs in the data files were chosen by hand. Everything downstream of the transcription is mechanical.
Known limitations
- Estimates, not advice. The calculator reports withholding for one pay period from stored tables. It is not a tax return, it does not know about credits, itemising or other income, and it is not a substitute for your employer's payroll system or a professional.
- It depends on year-to-date wages. The Social Security wage base and the Additional Medicare threshold are measured on wages already paid this calendar year. With year-to-date left at zero the calculator behaves as if this is the first check of the year, which is right for January and wrong for December.
- Refresh lag is real. The stored figures were verified on 2026-10-30. A rate that changed after that date is not reflected until the data file is re-read against the document and the verification date moves. The date on each page is how you tell.
Federal: IRS Publication 15-T (2026), IRS Publication 15 (2026) and IRS Rev. Proc. 2025-32 for the standard deduction. State: the document named in each state's data file. Figures verified 2026-10-30; this page checked 2026-11-02.