The Payroll Withholding Errors Hiding in Plain Sight
Here's a thing that sounds impossible but isn't: your payroll system can run flawlessly all year and still hand an employee a wrong W-2.
Not because anyone broke anything. Payroll software is genuinely good — it nails the easy 95%. Gross to net, the standard FICA split, the regular cadence, all correct, every cycle. The errors live in the 5% at the edges, where the rules stop being a flat percentage and start having thresholds. And thresholds are exactly the kind of thing that's easy to miss when you're processing one pay run at a time and never zoom out to the whole year.
Two classics, both hiding in plain sight.
The two FICA edge cases nobody watches
Over-withholding Social Security. Social Security tax stops at a wage base — $176,100 for 2025. Once an employee's year-to-date wages cross that line, the 6.2% should switch off. Mid-year job changes, multiple pay groups, a bonus run booked outside the normal cycle — any of these can confuse the running total, and the system keeps deducting past the cap. The employee gets a smaller paycheck than they should, and the over-withheld amount sits there until someone notices at filing time. Usually nobody does.
Under-withholding Additional Medicare Tax. This one runs the other way. There's an extra 0.9% Medicare tax on wages over $200,000, and the employer is supposed to start withholding it once an individual crosses that line in a calendar year. Plenty of setups simply don't. The employee sails through the year under-withheld, then gets a surprise bill — and the employer's the one who was meant to catch it.
Neither of these is exotic. They're in the IRS instructions. They're just threshold logic, and threshold logic is precisely what a per-cycle pipeline tends to skip, because the threshold depends on a number — cumulative YTD wages — that no single pay run is really looking at.
One integration, every payroll system
This is where it gets fun, and where Finch does the heavy lifting.
Finch is a unified payroll and HRIS API. It already speaks 200+ systems — Gusto, ADP, Rippling, the long tail — and hands you one clean, normalized shape for pay data no matter what's underneath. That's a hard, unglamorous problem, and they've solved it.
So here's the leverage. Tax-correctness checks are usually a per-system slog: write the ADP version, then the Gusto version, then the next one, forever. But pull payroll through Finch and you're reading one normalized shape. Which means a single tax check, written once, validates withholding across every connected payroll system at the same time. It's the highest-leverage integration we've built, and it's barely any code.
We put a small open-source demo up: finch-payroll-demo. It pulls pay data via Finch, then calls the OpenAccountants MCP to recompute FICA from gross plus year-to-date — and flags both edge cases before they ever reach a W-2.
The check itself is the boring, deterministic kind you want near money:
For each employee, given gross + YTD wages:
- Social Security: 6.2% only up to the wage base — flag any withheld above it
- Additional Medicare: +0.9% on wages over $200k — flag if it's missing
Compare expected vs. actual. Surface the deltas.
No vibes. Just the rule, applied to the numbers, with the working shown.
Why "accountant-verified" is the load-bearing part
You could hardcode $176,100 and $200,000 yourself. The catch is that those numbers move, the Social Security wage base changes most years, and a hardcoded constant is a silent bug waiting for January.
So OpenAccountants doesn't ship constants from someone's memory. Every rule the MCP serves — the wage base, the rates, the thresholds — is signed off by a named, licensed accountant who's liable for it. The US payroll rules in this demo are verified by Amir Pelinkovic, our US lead. When the 2026 base lands, it changes in one verified place, and every integration reading from the MCP gets the new number. You don't chase it across your codebase.
Finch gives you the data, normalized and universal. OpenAccountants is the verified correctness layer that sits on top of it — accountant-signed, current, and the same check across all 200+ systems at once. Clean division of labour.
If you run payroll for anyone earning near six figures, these two edges are almost certainly costing someone money right now — quietly, in both directions. The nice part is you can find out this afternoon.
Clone the demo, connect the OpenAccountants MCP at openaccountants.com, and point it at your Finch data. Worst case, your withholding's clean and you sleep better. Best case, you catch something before it becomes a W-2 correction.