ZestMSP generates invoices, but you still want them in your accounting system of record. The QuickBooks and Xero integrations sync invoices and payments between the two, so you don't have to re-enter anything by hand. This article covers connecting either system, what gets synced, and how to reconcile payments.
What the integration does
When QuickBooks or Xero is connected:
- Invoices generated in ZestMSP export to your accounting system as the customer's matching invoice record.
- Payments recorded in your accounting system trace back to ZestMSP, so the invoice status (paid, partially paid, outstanding) updates in ZestMSP too.
Net effect: one place to invoice (ZestMSP), one place to manage the books (QuickBooks or Xero), and the two stay in step.
Choose one — QuickBooks or Xero
Pick the accounting system you already use:
- QuickBooks — by far the most common at North American MSPs. Both QuickBooks Online and QuickBooks Desktop variants are supported through the same integration.
- Xero — common at MSPs outside the US, and at any MSP that prefers Xero's interface or pricing.
You'll connect one, not both. If you switch accounting systems later, disconnect the first integration before connecting the second.
Connect QuickBooks
- Go to Integrations in the left nav.
- Find the QuickBooks card.
- Click Connect.
- Sign in to QuickBooks when redirected and authorize the connection.
That's the integration setup. The actual GL mapping (which ZestMSP categories post to which accounts) is configured separately in Category Settings — see the next section.
Connect Xero
- Go to Integrations.
- Find the Xero card.
- Click Connect.
- Sign in to Xero when redirected and authorize the connection.
GL mapping for Xero also happens in Category Settings — same approach as QuickBooks.
Map your GL codes in Category Settings
Mapping happens in Configurations → Category Settings, not on the Integration card.
Each Category in ZestMSP represents a kind of revenue (e.g., Project Labor, Managed Services, Hardware, Licenses). For each Category, set:
- Active — whether this Category is in use.
- Category name — the display name (e.g., Project Labor).
- General ledger code — the GL code from your accounting system that revenue in this Category should post to (e.g., Project, 4000-Service Income).
- Tax Code — the tax treatment (e.g., NON for non-taxable services).
- Work type — which Worktypes feed this Category. Time entries logged with a mapped Worktype roll up under this Category's GL code on invoices.
To add a new Category:
- Go to Configurations → Category Settings.
- Click + Add new category.
- Enter the Name, GL code, Tax Code, and assign the relevant Worktypes.
- Save.
Tip: Talk to your bookkeeper or accountant before you finalize your GL codes and Tax Codes. The right structure depends on how you want to read your P&L and on the tax rules in your jurisdiction.
When ZestMSP exports an invoice to QuickBooks or Xero, each line item uses the GL code and Tax Code from its assigned Category, so revenue lands in the right ledger account automatically.
Export an invoice
Once connected and mapped, the export flow is automatic:
- Generate the invoice in ZestMSP (from a Customer, a Project, or from scratch).
- Review the draft and send.
- The invoice exports to your accounting system as part of the send action.
The matching invoice now exists in both ZestMSP and your accounting system, linked by invoice number.
Trace payments back to ZestMSP
When a customer pays:
- Record the payment in QuickBooks or Xero as you normally would (against the matching invoice).
- The payment status syncs back to ZestMSP, where the invoice will show as paid.
This means accounting owns the payment workflow, and your team gets the visibility in ZestMSP without anyone re-entering data.
Disconnect or reconnect
If your authorization expires or you need to switch the connected account:
- Go to Integrations → QuickBooks (or Xero).
- Click Disconnect.
- Click Connect again and authorize the new account.
Your past exports stay intact — disconnecting affects future syncing only.
Troubleshooting
- An invoice didn't export. Confirm the integration is still connected (re-authorize if needed) and that all customers on the invoice exist in your accounting system.
- Customer name mismatch. ZestMSP matches by customer name on first export. Rename in one system to match the other, or set up the customer in both before invoicing.
- Payment didn't trace back. Confirm the payment in your accounting system is recorded against the synced invoice (not a manually created duplicate).
- Wrong revenue account. Update the mapping in Integrations → Settings on the connected card.