Documentation Index
Fetch the complete documentation index at: https://docs.dualentry.com/llms.txt
Use this file to discover all available pages before exploring further.
Gusto Integration: Setup and Sync
Connect Gusto to DualEntry so each payroll run posts to your ledger as a single consolidated journal entry. The connection runs through Finch, DualEntry’s payroll-data provider, which handles OAuth with Gusto on your behalf. Data flows one way: Gusto → DualEntry.
Prerequisites
Confirm the following before connecting:
- Admin access to both your DualEntry and Gusto accounts.
- Your chart of accounts in DualEntry includes the GL accounts you intend to use for payroll expense, tax expense, employee/employer benefit accounts, and a payroll clearing or accrued-payroll account.
- A vendor record in DualEntry to use as the payroll vendor (typically named “Gusto”).
- A single DualEntry company that the Gusto data should post to. Consolidated payroll currently runs in single-entity mode only (see Current limitations).
- Optionally, a classification (such as Department) configured in DualEntry if you want pay statement items split by department on the journal entry.
How to connect
DualEntry connects to Gusto through Finch’s hosted Connect widget. You don’t generate API keys or paste credentials into DualEntry. Finch handles authentication and returns an access token to DualEntry.
- In DualEntry, navigate to Settings → Integrations → Gusto.
- Choose Connect. DualEntry opens the Finch Connect widget in a new window.
- In the widget, choose Gusto and sign in with your Gusto admin credentials.
- Approve the data scopes Finch requests on DualEntry’s behalf.
- After approval, Finch redirects back to DualEntry and the integration shows as Connected.
Disconnecting the integration in DualEntry invalidates the Finch access token but does not remove the connection record on Finch’s side. To switch Gusto accounts, delete the pending integration in DualEntry and start a fresh Connect flow. DualEntry reauthenticates the existing Finch connection rather than creating a duplicate.
The first sync after a fresh connection only pulls metadata (companies, payroll vendor, pay statement items, departments) so you can finish mapping before any journal entries are written. Pay statements only sync once every required mapping is complete.
What syncs
The integration pulls the following Gusto data into DualEntry on each sync run:
| Gusto data | DualEntry record | Notes |
|---|
| Companies | company mapping | One Gusto company maps to one DualEntry company in single-entity mode. |
| Payroll vendor | vendor mapping | One vendor (typically named “Gusto”) used on every payroll journal entry. |
| Pay statement items | pay_statement_item → account mapping | Earnings, taxes, employee deductions, and employer contributions. Each unique item must be mapped to a GL account. |
| Departments | classification line | Mapped to a configurable classification (default name: Department). Used for splitting journal entry lines by department. |
| Locations | classification line | Optional. Mapped to a classification named Location if present. |
| Payments | payment record | Reference data; consolidated into a journal entry per payment. |
| Pay statements | pay_statement record | Per-employee detail; rolled up into the consolidated journal entry, not posted individually. |
Pay groups, headcount, and individuals are also pulled by Finch but hidden from the configuration UI for consolidated payroll - they’re internal references the integration uses, not records you need to map.
Map your Gusto data
After connecting, DualEntry pulls Gusto’s metadata and shows you what to map. Until every required mapping is filled in, the integration shows as not yet set up and pay statements do not post.
The mapping work breaks into three pieces: first, map the Gusto company and the payroll vendor so DualEntry knows where journal entries should land and which vendor to stamp on every line. Second, map every pay statement item to a GL account so each earnings, tax, deduction, and contribution line posts to the right place. Third, optionally map departments to classifications if you want journal entry lines split by department.
Map companies and the payroll vendor
Map the Gusto company to the DualEntry company that should receive the payroll journal entries, and map the payroll vendor to a DualEntry vendor record. The company mapping determines which DualEntry company the consolidated journal entry posts to. The payroll vendor mapping determines the vendor stamped on every line of the journal entry - useful for AP-style reporting and 1099 considerations down the line.
- Open Settings → Integrations → Gusto → Configuration.
- On the Companies tab, map the Gusto company to a single DualEntry company.
- On the Payroll vendor tab, map the Gusto-named vendor to your DualEntry payroll vendor record.
If you skip either mapping, sync runs that depend on it fail with an explicit error in the Integration Errors log (see Troubleshoot sync errors).
Map pay statement items to GL accounts
Each pay statement item (earnings line, tax line, employee deduction, employer contribution) must be mapped to a DualEntry GL account before pay statements can post.
- Open the Pay statement items tab. Items are grouped by category:
earnings, taxes, employee_deductions, employer_contributions.
- For each item, choose the DualEntry GL account that the line should post to. Item display names follow the pattern
{category}{-Employer|-Employee}: {item name}, for example taxes: Federal Income Tax or employer_contributions-Employer: 401(k) Match.
- Confirm the debit/credit direction stored on each item - this controls whether the amount posts as a debit or credit on the journal entry.
If any pay statement item is unmapped when a payroll run syncs, the run is captured as an error against the relevant pay statement records and no journal entry is written for that payment until the mapping is filled in.
Map departments to classifications
If you maintain a Department classification in DualEntry, Gusto departments are matched by name against your classification lines and applied to the journal entry automatically. This step is optional. Gusto departments that don’t match a classification line are simply omitted from the journal entry, with no error, no fallback, and no auto-create.
To enable department splits:
- Confirm a classification named Department (or whatever name you’ve configured under integration settings) exists in DualEntry.
- Add a classification line for each Gusto department, with names that match exactly.
- On the next sync, departments resolve automatically - no per-department mapping screen.
How payroll runs become journal entries
Once setup is complete, each Gusto payment (pay run) becomes a single consolidated journal entry in DualEntry - not one journal entry per employee. The consolidation rules:
- All pay statements that share a
payment_id group together.
- For each unique combination of (pay statement item, classification), the integration sums amounts across employees and creates one journal entry line.
- Tax items are grouped by item only (no classification split). When Consolidate payroll tax is enabled, tax items are further consolidated by GL account into a single “Consolidated Payroll Tax” line per account.
- The journal entry is dated the payment’s pay date.
- The memo follows the pattern
[Gusto] Payroll {start_date} to {end_date} paid on {pay_date} ({n} employees).
If debits and credits don’t balance after grouping, for example, when rounding causes a sub-cent drift across many employees, an offset line is added against the configured payroll offset account so the journal entry posts cleanly. The offset account is configured at the organization level under integration settings; review it before going live so the offset doesn’t land in an unexpected GL account.
The consolidated journal entry is the source of truth in DualEntry; individual pay statement records are kept for traceability but marked as consolidated and excluded from posting.
See Journal Entries for how to review the resulting entries in your ledger.
Optional: Consolidate payroll tax
By default, every tax item across a payroll run is consolidated by GL account into a single “Consolidated Payroll Tax” line per account on the journal entry. This keeps the journal entry compact when many tax types map to the same account (for example, several state-specific income taxes all posting to the same expense account).
If you’d rather see one journal entry line per tax item, for granular reporting or tax-type-level analysis, turn this off:
- Open Settings → Integrations → Gusto → Settings.
- Toggle Consolidate payroll tax off.
- The next sync re-renders pay statements with one line per (tax item, account).
The setting only affects how tax items are grouped on the journal entry. It doesn’t change which records are pulled from Gusto or how earnings, deductions, or contributions are grouped.
Current limitations
The Gusto integration has the following limitations today:
- Single-entity mode only. Consolidated payroll requires a single DualEntry company per Gusto connection. Multi-entity setups (one Finch connection mapping pay statements to multiple DualEntry companies) are not yet supported and will skip pay statement processing with a warning.
- No retroactive remapping. Pay statements that have already been consolidated into a journal entry don’t re-post if you later change a pay statement item mapping. Resync the affected payment range to apply the new mapping.
- Department-only classification splits. Pay statement classification splits use the configured department classification. Splits by other classifications (such as project or class) aren’t applied automatically.
- Departments must be mapped by exact name match. Gusto departments don’t match a classification line if the names differ - even by punctuation or case.
- Employer-level taxes calculated on aggregate payroll. Certain employer taxes and remittance offsets (for example, NY MCTMT, MN Workforce Development Assessment, MO Compensation Deduction) are calculated on company-wide payroll, not per employee, so they don’t appear on the consolidated journal entry. See Record employer-level taxes manually for the workaround.
Record employer-level taxes manually
Some payroll taxes and remittance offsets are calculated on a company’s total payroll rather than on individual pay statements. Because the integration syncs Gusto data on a per-employee basis, these company-level amounts don’t appear on the consolidated journal entry. You record them with a manual journal entry after each payroll run.
Items affected
The following employer-level items aren’t captured automatically. The list isn’t exhaustive: any tax or remittance offset that Gusto computes against aggregate payroll falls into this category.
| Item | What it is |
|---|
| New York Metropolitan Commuter Transportation Mobility Tax (MCTMT) | Tiered employer tax on aggregate quarterly NYC payroll, reaching 0.895% above $2.5M with smaller rates on lower payroll tiers. |
| Minnesota Workforce Development Assessment | A 0.1% employer assessment charged on top of state unemployment insurance. |
| Missouri Compensation Deduction | A negative remittance offset calculated on the total withheld amount for the payroll period. |
To check whether a specific employer tax in your state syncs automatically, compare the Gusto payroll receipt against the DualEntry journal entry for the same pay date. Any line on the receipt that has no counterpart on the journal entry is a candidate for a manual entry.
Post the journal entry
After each payroll run, reconcile against Gusto’s payroll receipt and post a journal entry for any missing employer-level lines.
- In Gusto, open the payroll run and download the payroll receipt. The receipt itemizes every employer tax line for the run.
- In DualEntry, open the consolidated payroll journal entry for the same pay date (see Journal Entries).
- Identify each employer-level tax line on the Gusto receipt that isn’t on the journal entry.
- Create a manual journal entry dated the payroll’s pay date with:
- A debit to the appropriate payroll tax expense account for the tax amount.
- A credit to your payroll clearing or accrued-payroll account, so the entry nets against the cash settlement when Gusto debits the funds.
- Reference the Gusto payroll run identifier and the tax type in the memo, so the entry traces back to the source receipt during close.
For aggregate quarterly taxes such as NY MCTMT, you can post one entry per quarter against the quarterly remittance instead of per payroll run, as long as the entry date matches when Gusto debits the funds.
Troubleshoot sync errors
When a record fails to sync, it appears in the Integration Errors log under Settings → Integrations → Gusto. The most common causes:
| Error | Cause | Resolution |
|---|
Payroll item ... is not mapped | A pay statement item exists in Gusto but has no DualEntry GL account assigned. | Open the Pay statement items tab, assign a GL account to the unmapped item, and resync. |
Payroll item ... does not exist | A pay statement on the Gusto side references an item that hasn’t been pulled into DualEntry yet. | Run Sync pay statement items before retrying the payroll run sync. |
payroll_vendor is missing | The Gusto payroll vendor is unmapped on the Configuration screen. | Map the Gusto-named vendor to a DualEntry vendor record. |
company mapping not found for individual ... | A pay statement references an individual whose Gusto company isn’t mapped to a DualEntry company. | Map the missing Gusto company on the Configuration screen. |
| Multi-entity warning, pay statements skipped | The connection is configured for multiple Finch entities, which consolidated payroll doesn’t support yet. | Reduce the Gusto connection to a single entity, or wait for multi-entity support. |
| Items have different currencies in the same group | A grouping key (item + classification) ended up with mixed currencies, typically when an employee was paid in a non-base currency. | Review the affected pay statements in Gusto, normalize the currency, and resync the payment range. |
Result
After completing these steps, every Gusto payroll run posts to DualEntry as a single consolidated journal entry, with line items per (pay statement item, department) and a balanced offset entry where needed. To connect additional systems, return to Integrations. To audit the resulting payroll entries, see Journal Entries.