ml-connector
QADGusto

QAD and Gusto integration

QAD runs manufacturing and finance. Gusto runs payroll, HR, and contractor payments for small and mid-size businesses. Connecting the two keeps your workforce and your general ledger in agreement without re-keying. After each Gusto payroll run, the labor cost from gross pay, taxes, and deductions posts into QAD's general ledger, and hires and terminations in Gusto line up with QAD cost centers. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.

How QAD works

QAD Adaptive ERP exposes suppliers, purchase orders, supplier invoices, AP payments, GL accounts, cost centers, items, and goods receipts through REST business document APIs, documented in Swagger inside each customer instance. The cloud product authenticates with a JWT session or OAuth2 bearer token against a tenant-specific URL, so there is no shared hostname or public sandbox. Older on-premise sites run QAD Enterprise Edition with the QXtend SOAP framework instead. QAD cloud has no webhook system for connectors, so finance records are read by polling, and supplier invoices use a three-way match that requires receipts to post first.

How Gusto works

Gusto exposes employees, jobs and compensations, payrolls, contractors, contractor payments, benefits, pay schedules, and terminations through its REST App Integrations API, with JSON bodies and a required X-Gusto-API-Version header. Authentication is OAuth2 authorization-code, so each token is scoped to a single company and a multi-company customer authorizes each company separately. Access tokens last two hours and the refresh token is single-use, so it rotates on every refresh. Gusto pushes signed webhooks for payroll, employee, and contractor events, but it has no GL account, vendor, purchase order, or supplier invoice concept, so accounting structure is applied on the QAD side.

What moves between them

The main flow runs from Gusto into QAD. After a payroll is processed, ml-connector reads the Gusto payroll, including gross pay, employer taxes, and deductions broken out by earning type, and posts the resulting labor cost journals into QAD's general ledger against the matching GL accounts and cost centers. Employee records flow the same direction so QAD reflects Gusto hires and terminations. Contractor payments from Gusto can post into QAD as accounts payable entries, the closest analog QAD recognizes. Reference data such as cost centers and locations is aligned so every payroll allocation lands on a valid QAD dimension. Gusto holds no GL postings, so ml-connector never writes ledger entries back into payroll.

How ml-connector handles it

ml-connector stores both credential sets encrypted and runs the Gusto OAuth authorization-code flow per company, since each Gusto token covers only one company. It refreshes the two-hour access token and rotates the single-use refresh token on every call that returns 401, so a customer with several Gusto companies has one token set per company. On the QAD side it accepts the full tenant URL per customer, because QAD publishes no shared base address, and validates entity paths against that instance. Gusto pushes signed webhooks such as payroll.processed and employee.terminated, and ml-connector verifies the HMAC-SHA256 X-Gusto-Signature against the raw body and returns 401 on a bad signature; QAD cloud is pull-only, so the QAD side is polled on a schedule rather than pushed. Earning types, locations, and cost centers are mapped first, so every journal line references a GL account and cost center that already exists in QAD, and Gusto dollar amounts arrive as decimal strings that are parsed without floating-point math. Gusto rate limits at 200 requests per minute and returns HTTP 429 when exceeded, so ml-connector backs off and retries. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized contract manufacturer with about 180 employees runs QAD Adaptive ERP for production, procurement, and finance, and uses Gusto for payroll, benefits, and a roster of seasonal contractors. Before the integration, the finance team downloaded each payroll summary from Gusto and re-entered the labor totals into QAD by hand, splitting them across cost centers from a spreadsheet, then spent the start of every month-end close chasing differences between headcount and the labor accounts in the ledger. With QAD and Gusto connected, each processed payroll posts into QAD automatically, allocated to the right cost center, contractor payments land as AP entries, and employee changes keep the two systems aligned. Month-end close starts with the labor accounts already reconciled, and the manual re-keying step is gone.

What you can do

  • Post Gusto payroll journals into QAD's general ledger after every processed run, allocated to the correct cost centers.
  • Keep QAD headcount aligned with Gusto hires and terminations.
  • Post Gusto contractor payments into QAD as accounts payable entries.
  • Map Gusto earning types, locations, and cost centers to QAD GL accounts so payroll lands on valid dimensions.
  • Bridge Gusto per-company OAuth and QAD tenant auth, with rate-limit backoff, retries, and a full audit trail.

Questions

Which direction does data move between QAD and Gusto?
The main flow is Gusto into QAD. Payroll journals, employee changes, and contractor payments move from Gusto into QAD, while cost centers and locations are aligned so allocations are valid. Gusto has no general ledger concept, so ml-connector never writes ledger entries back into payroll.
How does the integration handle Gusto's company-scoped OAuth tokens?
Gusto issues one OAuth token per company since the 2023-05 API version, so a multi-company customer authorizes each company separately. ml-connector runs the authorization-code flow per company and stores one token set for each, refreshing the two-hour access token and rotating the single-use refresh token automatically.
Does Gusto map cleanly to QAD's GL accounts and cost centers?
Gusto has no GL account, supplier, or purchase order concept, so the accounting structure lives in QAD. ml-connector maps Gusto earning types, locations, and cost centers to QAD GL accounts and cost centers first, so every payroll journal line references an account and dimension that already exists in QAD.

Related integrations

Connect QAD and Gusto

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started