QuickBooks Online and Gusto integration
QuickBooks Online manages your books. Gusto manages your people. Connecting them keeps your employee roster and wage expenses in sync across both systems. New hires in Gusto appear in QuickBooks Online's employee list, terminations are tracked in both, and each payroll run's expense totals flow into your general ledger without manual entry. ml-connector bridges the different OAuth2 token lifecycles and webhook behaviors to make the two platforms behave as one.
What moves between them
The main flow is from Gusto into QuickBooks Online. Employee hire, update, and termination events from Gusto are posted into QuickBooks Online's employee list for headcount tracking. Payroll run summaries, once processed in Gusto, are fetched and aggregated into journal entries in QuickBooks Online's wage expense accounts, tied to the relevant cost centers and departments. Reference data such as locations and pay schedules in Gusto are synced so QuickBooks Online's employee and payroll records stay consistent with the source of truth in Gusto. No accounting data flows back from QuickBooks Online to Gusto.
How ml-connector handles it
ml-connector stores OAuth credentials for both systems encrypted and manages their different token lifecycles: QuickBooks Online's 1-hour access tokens and rotating 24-hour refresh tokens on one side, and Gusto's 2-hour access tokens and persistent refresh tokens on the other. It subscribes to Gusto payroll, employee, and company webhooks, validates signatures using Gusto's HMAC-SHA256 scheme, and fetches the full event payload from Gusto's APIs when a webhook arrives. For QuickBooks Online, it polls the CDC endpoint to detect changes when webhooks are not available or to recover from missed events. Because Gusto's OAuth token is scoped to a single company, ml-connector separates credentials by company identifier. Employee records from Gusto are read and matched against QuickBooks Online's existing employee entity by name or email before posting, and payroll totals are mapped to the wage expense account and department specified in the integration config. Rate limits from both systems are respected with exponential backoff and retry; Gusto's 200-req/min limit is tracked per OAuth grant. Every employee and payroll record carries a full audit trail linking the source event in Gusto to the posted entry in QuickBooks Online.
A real-world example
A small services company with a dozen employees runs Gusto for payroll and HR, and QuickBooks Online for accounting and expense tracking. Before the integration, the office manager processed payroll in Gusto, exported a summary at month end, and then manually entered total wages into QuickBooks Online's expense accounts by hand. Every quarter, she spent hours reconciling the employee count in Gusto against the names in QBO's employee list, because hires and terminations were never synchronized. With Gusto and QuickBooks Online connected, each payroll run auto-posts into QBO the moment it is processed in Gusto, allocated to the correct wage account and cost center. New employees appear in QBO's employee list within minutes of being added to Gusto, and terminations sync immediately. Payroll reconciliation is now a one-minute check of a single audit report instead of a multi-hour manual merge.
What you can do
- Post payroll expense totals from Gusto into QuickBooks Online's general ledger on each payroll run, allocated to the configured wage account.
- Keep employee records in sync between Gusto (source of truth) and QuickBooks Online, capturing hires, updates, and terminations.
- Map employee locations and pay schedules from Gusto to cost centers and departments in QuickBooks Online so payroll allocations land correctly.
- Handle OAuth2 token refresh on both systems, respect rate limits, and retry failed postings without creating duplicate entries.
- Maintain a full audit trail linking every employee and payroll event in Gusto to its corresponding entry in QuickBooks Online.
Questions
- How does the integration keep employee records in sync between the two systems?
- Gusto is the source of truth. When an employee is hired, updated, or terminated in Gusto, ml-connector fetches the full employee record from Gusto via webhook or polling and posts it into QuickBooks Online's employee entity. Terminations are tracked in both systems so payroll reports and headcount are always aligned. QuickBooks Online does not push employee changes back to Gusto.
- What happens to payroll records when Gusto processes a pay run?
- After payroll is processed in Gusto, ml-connector fetches the final payroll summary, aggregates wage totals by the cost center or account specified in the integration config, and posts a journal entry into QuickBooks Online's general ledger. The entry is tagged with the payroll ID from Gusto so repeated syncs do not create duplicates. No entry is posted until the payroll status in Gusto is marked complete or paid.
- Does Gusto have a chart of accounts or GL dimensions like QuickBooks Online?
- No. Gusto has no chart of accounts, no vendor entities, and no native accounting dimensions. All payroll expense posting happens in QuickBooks Online using accounts and departments you define there. ml-connector maps Gusto employee and payroll records to the wage expense account and cost center in QuickBooks Online that you specify during setup, so the flow is one-way from Gusto to QBO.
Related integrations
More QuickBooks Online integrations
Other systems that connect to Gusto
Connect QuickBooks Online and Gusto
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started