Import a Payroll Register (CSV)
Import a completed payroll register from ADP, QuickBooks, Paychex, or any provider into Muin via CSV upload to trigger automatic GL posting and reconciliation.
After each payroll run in your provider (ADP, QuickBooks, Paychex, or any other), export the payroll register as a CSV and import it into Muin. From there, Muin handles the bookkeeping automatically.
What Muin does with the register:
- Matches each row to a Muin HR employee
- Posts GL entries (wages, employer taxes, employer benefits)
- Auto-matches the ACH payroll debit in your bank feed
- Makes paystubs available to employees in My Pay
Step 1: Export from Your Payroll Provider
| Provider | Where to export |
|---|---|
| QuickBooks Payroll | Reports → Payroll Summary → Export to Excel/CSV |
| ADP | Reports → Payroll Register Detail → Download |
| Paychex | Reports → Payroll Journal → Export |
Most providers call this a “payroll register,” “payroll journal,” or “employee earnings report.”
Step 2: Open the Import Page
Navigate to HR → Payroll → Enter Payroll Register.
Step 3: Enter Run Metadata
| Field | Description |
|---|---|
| Pay period start | First day of the period covered |
| Pay period end | Last day of the period covered |
| Check date | Date employees received payment |
| Employer taxes | Total employer-side tax expense (Social Security employer match + Medicare employer match + FUTA/SUTA). This is separate from the employee withholdings in the CSV. |
| Employer benefits | Total employer-paid benefits (health insurance premiums, 401k match, etc.) if you want them in the GL |
| Reference | Optional — your internal run ID (e.g. 2026-Q2-P01) for deduplication |
Step 4: Upload and Map Columns
Click Upload CSV and select your export file.
Muin auto-maps columns when the header matches a canonical name. If your provider uses different headers, the column-mapping step lets you assign each CSV column to the right field:
| Muin field | What it means |
|---|---|
employee_number | Provider employee ID (optional if email present) |
email | Employee email (optional if employee_number present) |
gross_pay | Required — gross wages before deductions |
net_pay | Required — take-home after deductions |
federal_tax | Federal income tax withheld |
state_tax | State income tax withheld |
social_security | Employee Social Security withheld |
medicare | Employee Medicare withheld |
ytd_gross | Year-to-date gross (shown on paystub) |
ytd_net | Year-to-date net (shown on paystub) |
Tip: gross_pay and net_pay are the only required columns. You can include as many or as few of the others as your export contains.
Step 5: Preview
Click Preview to see:
- How many employees were resolved vs. unmatched
- Gross total and net total for the run
- Per-row errors (unmatched employee, net > gross, etc.)
- Whether this run has already been imported (duplicate detection)
Resolve any errors before committing. Common fixes:
- Unmatched employee: add the employee to Muin HR (HR → Employees → Add) or correct their email/employee_number
- Net > gross: the CSV has a data error — gross pay must be ≥ net pay
Step 6: Commit
Click Commit Payroll Register to finalize. Muin:
- Creates a
PayrollRunrecord (source = manual) - Creates a
PayStubfor each matched employee - Posts GL entries:
- DR 5300 Payroll Wages Expense (total gross)
- DR 5310 Employer Payroll Taxes (from the Employer taxes field you entered)
- DR 5320 Employer Benefits Expense (from Employer benefits, if > 0)
- CR 1000 Operating Cash (total disbursed)
- The bank-feed reconciliation engine auto-matches the ACH debit from your bank statement
After Import
Labor cost by program: Go to the run in the dashboard and click Allocate to split the fully-loaded cost across programs, funds, and departments based on each employee’s fund allocation settings.
Employee paystubs: Each employee sees their paystub immediately at HR → My Pay.
GL export: Download the payroll GL entries at Finance → GL Export for your accountant or grant report.
Scenario: 12-Person Mosque, Two Pay Groups
Mosque Nur al-Islam runs bi-weekly payroll for 8 full-time staff and monthly for 4 part-time staff. They run payroll through a third-party provider.
- After the bi-weekly payroll run, they export the payroll register CSV
- Upload to Muin → column map takes 30 seconds (the export headers are close enough to canonical)
- Enter employer taxes ($940) and commit
- Two GL entries post: wages DR 5300 / CR 1000 (gross), taxes DR 5310 / CR 1000
- The ACH debit from the bank feed auto-matches
- The finance director clicks Allocate → labor cost splits across the Masjid Operations program (60%) and Islamic Education program (40%) automatically based on fund allocations set up in HR
Total time: under 5 minutes per payroll run.
Troubleshooting
“Employee not found” for a row:
- Muin matches by
emailfirst, thenemployee_number(lower-cased). Verify both match the employee’s Muin HR record.
Duplicate run warning:
- Muin detects you already imported a register for this period with the same employees and amounts. Use a unique Reference field if you need two runs for the same period (e.g., off-cycle).
Net pay is wrong on the paystub:
- The CSV net_pay column is what Muin shows. If it differs from what employees received, the source export has the error — correct it in your payroll provider first, then re-import.