Sync Payroll from QuickBooks
If QuickBooks is your payroll system, Muin can read completed payroll runs directly and post them to your GL automatically — no CSV export required.
If your organization uses QuickBooks Online Payroll, Muin can read completed payroll runs directly from your QuickBooks account and post them to your GL — no CSV export required.
The honest boundary: Muin reads payroll results from QuickBooks. It does not initiate, submit, or run payroll in QuickBooks. Payroll must be completed in QuickBooks first.
Prerequisites
- QuickBooks integration connected in Muin (Settings → Integrations → QuickBooks)
- Payroll run completed and approved in QuickBooks
How It Works
Reading Payroll from QuickBooks
Go to HR → Payroll → Sync from QuickBooks (or Settings → Integrations → QuickBooks → Payroll tab).
- Select a date range covering the pay period
- Muin fetches the QuickBooks payroll summary for that window
- Employees are matched by email between QuickBooks and Muin HR
- On confirm:
- A payroll run is created (source = quickbooks)
- GL entry posts: DR 5300 Wages / CR 1000 Cash (based on gross pay)
- Bank feed reconciliation auto-matches the ACH debit
- Employees see paystubs in HR → My Pay
Note on per-tax detail: QuickBooks’s accounting summary exports aggregate “taxes” per employee — it does not break out federal / state / Social Security / Medicare individually. Those taxes appear on each employee’s paystub as a single “QuickBooks taxes” line. If you need the breakdown, use the CSV import path instead.
Idempotency
If you read the same payroll window twice, Muin returns the existing run and posts no duplicate GL entries. Payroll periods are matched by the combination of QuickBooks company (realm) and the start/end date window.
Optionally Post Payroll GL Back to QuickBooks
If you want the Muin payroll GL entries to also appear as a JournalEntry in QuickBooks:
- Go to Settings → Integrations → QuickBooks → Payroll
- Enable Post payroll GL to QuickBooks
- Map the three Muin GL codes to your QuickBooks accounts:
- 5300 Wages → your QuickBooks wages expense account
- 5310 Employer Taxes → your QuickBooks employer tax expense account
- 1000 Cash → your QuickBooks operating cash account
- Save
After setup, each approved payroll run shows a Post to QuickBooks button in the dashboard. Clicking it creates a balanced JournalEntry in QuickBooks: DR wages / DR employer taxes (if any) / CR cash. The entry is idempotent — re-clicking does nothing if already posted.
Guard: Runs imported from QuickBooks (source = quickbooks) cannot be posted back to QuickBooks — that would double-count the entries. The Post button only appears for manually-imported or CSV-imported runs.
Side-by-Side Comparison
| CSV Import | QuickBooks Sync | |
|---|---|---|
| Requires CSV export? | Yes | No |
| Tax line detail (federal/state/SS/medicare) | Yes (from CSV) | No (aggregate only) |
| Employer tax amount | You enter it | Not read (enter after sync) |
| Employer benefits | You enter it | Not read (enter after sync) |
| Employee matching | Email or employee_number | |
| Works without QBO Payroll? | Yes (any provider) | Requires QBO Payroll |
Scenario: Food Pantry Using QuickBooks Payroll
Salaam Food Pantry runs bi-weekly payroll in QuickBooks for 6 staff. The finance director doesn’t want to export CSVs.
- Payroll is run and approved in QuickBooks as normal
- Finance director opens HR → Payroll → Sync from QuickBooks, selects the pay period
- Muin reads 6 employee rows, matches all 6 by email, shows the preview
- Confirm → wages GL posts, bank feed auto-matches the ACH
- Staff open the Muin mobile app → My Pay tab → see their paystub instantly
Total time: under 3 minutes, no CSV involved.
Troubleshooting
“No employees matched” on sync:
- Verify the employee’s email in QuickBooks matches their email in Muin HR exactly (case-insensitive)
- Check the date range — make sure it covers the completed payroll run
“QuickBooks connection error” on sync:
- The QuickBooks OAuth token may have expired — go to Settings → Integrations → QuickBooks and reconnect
- Verify the QuickBooks account has Payroll enabled (QuickBooks Payroll subscription required)
Post to QuickBooks returns 400 “write-back not enabled”:
- The account map hasn’t been configured yet — go to Settings → Integrations → QuickBooks → Payroll and map the three GL codes before posting
Duplicate warning on re-sync:
- This is expected — Muin detected you already synced this window. No action needed; the existing run and GL entries are intact.