Payroll Magic turns Gusto's messy, one-big-blob IIF export into one clean, balanced check per employee that imports cleanly and ticks off your bank rec line-by-line.
🆓 Free · 🔒 Private (runs in your browser, nothing uploaded) · ⬇️ No install, no sign-up
Try it in 3 steps: download
standalone/PayrollMagic.html→ double-click it → drop in your Gusto file. That's it.
Made by a bookkeeper who was tired of fighting the Gusto → QuickBooks import. If it saves you a headache, ⭐ the repo so others can find it.
Anyone who runs payroll in Gusto and keeps their books in QuickBooks Desktop — bookkeepers, accountants, and small-business owners who just want the bank reconciliation to work without hand-fixing every import.
When you run payroll in Gusto and export it for QuickBooks Desktop, Gusto writes
the entire payroll run as a single lumped journal entry (one GENERAL JOURNAL
transaction). Everyone's net pay, the gross wages, and all the taxes are bundled
together into that one entry.
That causes two real headaches:
-
You can't reconcile the bank. In real life, each employee's paycheck (or direct deposit) clears your bank account as its own separate withdrawal, and your tax payment clears separately too. But Gusto's file only gives QuickBooks one combined journal entry — so there are no individual paycheck transactions in your bank register to match against the line items on your bank statement. Ticking off the bank rec becomes a manual nightmare.
-
QuickBooks Desktop often rejects the file. Gusto's export uses formatting the IIF importer is picky about (thousands separators in amounts, blank rows, inconsistent columns), so the import errors out or brings numbers in wrong.
In short: Gusto's file is one big blob that doesn't match how the money actually moves through your bank — which is exactly what reconciliation depends on.
Payroll Magic reads the Gusto export and rewrites it as clean, individual transactions that QuickBooks Desktop imports without complaint:
- One balanced check per employee. Each paycheck becomes its own
CHECK— money out of your bank account, offset to your payroll-expense account. Now every paycheck shows up as a separate line in the bank register, so it reconciles one-to-one against your bank statement, just like the real withdrawals do. - You add the check numbers. Before exporting, you type the check (or ACH) number for each employee, so the transaction in QuickBooks matches the actual item that cleared the bank.
- Taxes kept whole. The employer/withheld taxes are consolidated into a single "Payroll Taxes" check (with an optional reference number), so the bank still ties out to the penny — total money out matches the original Gusto run exactly.
- Import-ready formatting. The output is tab-delimited, two-decimal, no thousands commas, no blank rows, with the line endings QuickBooks Desktop expects — fixing the import errors Gusto's raw file causes.
The result: instead of one lumped journal entry you can't reconcile, you get a tidy, reconcilable check for every paycheck — and the bank rec just ticks off.
| Gusto's raw export | After Payroll Magic | |
|---|---|---|
| Structure | 1 lumped journal entry | 1 check per employee + 1 tax check |
| Shows in bank register | As a single combined amount | Each paycheck separately |
| Bank reconciliation | Manual, painful | Ticks off one-to-one |
| Check numbers | None | You add them per employee |
| QuickBooks import | Often errors on formatting | Clean import |
| Totals | — | Tie to the penny vs. the original |
It does not invent any data — it only re-shapes the same dollars Gusto already gave you. The accounts come straight from the Gusto file, and the grand total always matches the original run.
- Read the Gusto file and find each employee from the
Check for <name>lines (name + net pay). Anything left over (the gross/tax side) becomes the tax total — computed as total cash out − sum of employee nets, so the result always balances even if Gusto shifts its lines around. - You enter each check number.
- Export a QuickBooks-ready IIF: one balanced
CHECKper employee plus the tax check, every transaction netting to zero. - Import in QuickBooks Desktop: File → Utilities → Import → IIF Files (back up your company file first — IIF imports can't be undone).
Recommended: the standalone file. It's a single web page that runs in your browser. No install, no Python, no account, no internet, no server.
- Download
standalone/PayrollMagic.htmlto your computer. (On that page click the ⬇ Download raw file button — or open Raw, then right-click → Save as.) - Double-click the file. It opens in your browser (Chrome/Edge).
- Choose Gusto IIF → type each employee's check number → Export
QuickBooks IIF. It downloads as
QBFixed-WthCheckNo-<name>-<date>.iif. - In QuickBooks Desktop: File → Utilities → Import → IIF Files → pick that file. (Back up your company file first — IIF imports can't be undone.)
That's the whole thing. Copy the one .html file to any other computer and it
works there too. Your payroll file is read and converted inside your browser —
it is never uploaded anywhere.
There's also a Google Apps Script version — the same converter hosted as a
private web page in your own Google account, so you bookmark a URL instead of
keeping a file. Setup steps are in gas/README.md.
📁 standalone/ — one file |
📁 gas/ — hosted link |
|
|---|---|---|
| Setup | None — double-click the file | Paste 2 files + deploy once (~5 min) |
| Needs | A web browser | A Google account |
| Updates | Replace the file | Re-deploy once, link stays the same |
| Privacy | Runs in your browser, never uploaded | Runs in your browser, never uploaded |
Both produce the exact same output. docs/DESIGN.md has the design details;
tests/test.js checks the converter (run with node tests/test.js).
- Input is Gusto's native IIF export (a
GENERAL JOURNALwithCheck for <name>lines). The parser reads columns by header name, so it tolerates Gusto changing column order between exports. - Per-employee amounts are net pay — what actually clears the bank — which is what reconciliation matches on. Employer/withheld taxes are consolidated into the single tax check, and the totals always tie back to the original file.
- When QuickBooks imports the file, any payee name or account it hasn't seen before is offered for creation on the spot.
This handles your payroll numbers, so: it runs entirely in your browser, makes
no network calls, and uploads nothing — you can read every line in
standalone/PayrollMagic.html. It never invents
data; it only re-shapes the same dollars Gusto gave you, and the totals always tie
back to the original. Still, always back up your QuickBooks company file before
importing, and eyeball the first run against your Gusto totals.
Open an issue — pull requests welcome too. If a payroll setup
produces something unexpected (especially direct deposit — see the note in
docs/DESIGN.md), a scrubbed sample of the Gusto export helps a lot.
Free and open. No accounts, no tracking, no catch. If Payroll Magic saved you some time, leave a ⭐ — it helps other bookkeepers find it.
Happy reconciling. 🪄