Connecting QuickBooks turns end-of-month bookkeeping from a 6-hour manual entry session into a 15-minute review. Every invoice, payment, refund, and customer flows from Exoserva to QuickBooks Online automatically — your accountant gets clean books, you stop dual-entering, and the chance of a transposed digit goes to zero. This guide walks the OAuth flow, the field-mapping decisions you’ll make once, and the reconciliation rhythm that keeps everything aligned.
Estimated time: 7 minutes (plus a 30-minute reconciliation pass week one)
Before You Begin
- Owner or Tenant Administrator role on Exoserva (Roles, Permissions, and Security)
- QuickBooks Online subscription (Simple Start or higher; Desktop is not supported)
- QuickBooks Online admin login for the OAuth handshake
- A clean Chart of Accounts — at minimum: Service Revenue, Product Revenue, Sales Tax Payable, Bank Deposit Account
- (Optional) Your bookkeeper or accountant on a 30-min call for the first sync — they’ll catch mapping issues you’ll miss
Step 1: Open Integrations
Press ⌘K to open Settings, then click Integrations under Operations. Direct URL: /settings/integrations. Click the QuickBooks card. The page navigates to the QuickBooks integration view, with a Connect to QuickBooks button.
Step 2: Run the OAuth flow
Click Connect to QuickBooks. You’re redirected to Intuit’s OAuth consent screen:
- Sign in to your QuickBooks Online account — must be the admin
- Pick the company file — if you have multiple QuickBooks companies, select the one for this Exoserva tenant
- Review requested scopes — read/write access to Customers, Invoices, Payments, Items, Tax Rates
- Click Connect — Intuit redirects you back to Exoserva, which now shows Connected
Tip: Use a separate Chrome profile or Incognito window for the OAuth dance. If you’re signed into multiple Google accounts that auto-suggest QuickBooks accounts, the wrong one can sneak through.
Step 3: Map your Chart of Accounts
After connection, Exoserva shows a Field Mapping page. Each Exoserva concept needs a QuickBooks counterpart:
- Service Revenue — pick the QB Income account where labor revenue lands
- Product / Parts Revenue — separate account for material sales (lets your accountant track GP per category)
- Sales Tax Payable — Liability account where collected sales tax accrues until you remit
- Discounts Given — usually an Income account (negative) for tracking promotional/loyalty discounts
- Bank Deposit Account — your operating checking account where Stripe payouts land
Save mapping. Exoserva will use these accounts for every invoice/payment going forward.
Warning: Map carefully on day one. Re-mapping after 100 invoices have synced creates messy reclassification work. If you don’t know which QB account to pick, ask your bookkeeper before saving — 5 minutes of their time saves 5 hours of cleanup.
Step 4: Decide on customer sync direction
Two options on the customer-sync setting:
- One-way (Exoserva → QB) — Exoserva is the source of truth. Customers created in Exoserva flow to QB. Customers created in QB don’t appear in Exoserva.
- Two-way — both systems can create/edit customers; conflicts resolve based on most-recent-edit timestamp.
Most contractors pick one-way (Exoserva → QB) — keeps the customer-creation path clean (jobs always start in Exoserva, customers follow). Two-way invites duplicate-customer messes if your bookkeeper enters customers manually in QB.
Step 5: Run a test sync
Before turning on auto-sync for live data, run a manual test:
- Create a test customer in Exoserva: “Test Customer ZZ”
- Create a test invoice for $1.00 with Service Revenue line
- Mark it Paid manually
- In Exoserva → Integrations → QuickBooks → click Sync Now
- Open QuickBooks and verify: customer appears, invoice appears, payment appears, account balances move correctly
If anything looks wrong, fix the mapping before enabling auto-sync. Delete the test records from both sides after.
Tip: Always test with $1.00, never $0.00. Some QB versions reject zero-dollar invoices outright; $1 lets you trace every step.
Step 6: Turn on auto-sync
Once test sync looks clean, flip the Auto-Sync toggle on. Exoserva now pushes new invoices, payments, refunds, and customer creates to QB in real-time (typically <30 seconds delay).
What syncs:
- New invoice → QB Invoice
- Payment received → QB Payment + Bank Deposit
- Refund issued → QB Refund Receipt
- Customer created → QB Customer (one-way mode)
What does NOT sync:
- Job records (Exoserva-only concept; QB has no Jobs)
- Estimates (Exoserva-only — though you can manually create QB Estimates if your accountant wants)
- Internal notes (privacy: stays in Exoserva)
- Custom forms / photos (file attachments require manual workflow)
Step 7: Watch the Sync Status
The Integrations page shows a Sync Status dashboard:
- Last successful sync — timestamp
- Pending — records waiting to sync (should be ~0 most of the time)
- Failed — records that couldn’t sync; click to see why
Common failures and fixes:
- “Customer name conflict” — duplicate customer in QB; either merge in QB or rename in Exoserva
- “Invalid tax rate” — tax rate not configured in QB; create matching rate, retry
- “Account not found” — your Chart of Accounts changed; re-run Step 3 mapping
Warning: Don’t ignore the Failed counter. Each failed record is a transaction that didn’t land in QB — your books will be off by exactly that amount until fixed. Set a Notification (Configuring Notifications guide) for QuickBooks sync failures so you catch them within hours, not weeks.
Step 8: Monthly reconciliation rhythm
End of every month, do a 15-minute reconciliation:
- Compare Exoserva totals to QB totals — Revenue, Expenses, Receivables. Should match within $1.
- Check the Stripe → QB deposit alignment — bank deposit dates should match Stripe payout dates within 1-2 business days.
- Investigate discrepancies — usually one of: a manually-entered QB record without an Exoserva equivalent, a sync failure, or a refund that didn’t fully reverse.
The first month after setup will likely show a 1-2% discrepancy from cleanup; by month 3 you should be reconciling within $5.
Step 9: Disconnect (if you ever need to)
If you switch accountants or change QB plans, disconnect:
- Settings → Integrations → QuickBooks → Disconnect
- Confirm — Exoserva revokes the OAuth token at Intuit
- Existing synced records stay in QB; future records stop syncing
The disconnect is reversible — re-Connect re-establishes the link, but historical un-synced records won’t backfill automatically. Plan disconnect timing for end-of-month, not mid-month.
Real-World Example
You’re a 3-tech HVAC shop closing your first quarter on Exoserva + QuickBooks. Before the integration, your bookkeeper spent 6-8 hours/month doing manual entry from Exoserva CSVs. After: she logs into QB monthly, runs the Sync Status check (5 min), reconciles bank deposits to Stripe (10 min), and is done. You save 5 hours of bookkeeping time × 12 months = 60 hours/year, plus lower error rate. At her $90/hour rate that’s $5,400/year recovered — multiple times the cost of QuickBooks itself.
What’s Next?
- Setting Up Stripe Payments — Stripe payouts flow to QB via this connection
- Creating and Sending Invoices — every invoice syncs to QB
- Tracking Payments — payments mirror to QB Bank Deposits
- Reports and Analytics — Exoserva’s reports stay accurate even when most of your finance work moves to QB
Need help? Post in the Tech Support category or contact support@exoserva.com.