Salesforce QuickBooks Integration: Options, Setup and Pitfalls

In this article
- A good Salesforce QuickBooks integration does one job well: a closed-won opportunity becomes a customer and an invoice in QuickBooks Online, and payment status flows back to Salesforce. Sales sees who paid; accounting stops retyping deals.
- There is no official connector from Intuit or Salesforce for QuickBooks Online. Most companies use an AppExchange app (Breadwinner, DBSync and others), a no-code tool like Zapier for simple flows, an iPaaS such as Workato or Celigo, or a custom build on the QuickBooks Online API.
- Decide ownership before you install anything: Salesforce owns accounts and deals, QuickBooks owns invoices, payments, items and tax. Never sync the general ledger or the chart of accounts.
- The traps are predictable: duplicate customers, sales tax pushed from the CRM, multi-currency customers created in the wrong currency, and partial payments shown as paid. Test all four in a sandbox before go-live.
Jump to
- What a Salesforce QuickBooks integration should do
- Your integration options compared
- QuickBooks Online vs QuickBooks Desktop
- Object and field mapping
- How to set up the integration, step by step
- What not to sync
- Pitfalls and how to fix them
- When a custom integration makes sense
- Salesforce Xero integration in brief
- Go-live checklist
- Next steps
What a Salesforce QuickBooks integration should do
Sales lives in Salesforce. Invoices, payments and taxes live in QuickBooks. Without a connection, someone in accounting retypes every closed deal, and a sales rep emails finance to ask whether a customer paid.
The integration closes that loop, usually called quote-to-cash:
- Deal closes in Salesforce. The opportunity is marked Closed Won, with products and amounts.
- QuickBooks gets a customer and an invoice. The account becomes a customer (or matches an existing one), and the opportunity lines become invoice lines.
- Payment status comes back. When the customer pays, all or part, Salesforce shows the balance and status on the account and opportunity.
Everything else is optional. Teams that try to mirror all of QuickBooks inside Salesforce spend months on it and end up with two sets of books.
Your integration options compared
Neither Intuit nor Salesforce offers its own connector for QuickBooks Online today. Intuit’s own Salesforce connector for QuickBooks Online is no longer listed in the QuickBooks app store, so the choice is between third-party products and your own build. That leaves four routes:
| Option | What syncs | Direction | Cost level | Effort | Limits |
|---|---|---|---|---|---|
| AppExchange app (Breadwinner, DBSync, eShopSync and others) | Customers, invoices, payments, items, credit memos; some apps add estimates and sales receipts | Two-way, with QuickBooks data stored as Salesforce records | Low to medium: monthly subscription | Days to a few weeks, mostly configuration | Your process has to fit the app’s model; per-user or per-file pricing grows with you |
| No-code automation (Zapier, Make) | Whatever you build: usually “closed won → invoice” | One-way flows, chained together | Low | Hours to days | Fragile with multi-line invoices, partial payments and duplicate matching; errors land in an inbox |
| iPaaS (Workato, Celigo, Boomi) | Anything both APIs expose, plus other systems in the same flow | Two-way, event-driven or scheduled | High: annual platform license | Weeks, needs an integration owner | Worth it only when QuickBooks is one of several connected systems |
| Custom build on the QuickBooks Online API | Exactly what you define | Two-way, real time via webhooks | Medium to high: one-time build plus maintenance | Weeks to a few months | You own monitoring, token renewal and API changes |
A quick note on the main apps. Breadwinner is a Salesforce-native app: according to its AppExchange materials, it creates invoices from accounts, opportunities, orders or custom objects and brings payment status back in real time. DBSync connects Salesforce with both QuickBooks Online and Desktop, and runs syncs from Salesforce buttons or on a schedule. Both list on AppExchange; check the current listing, reviews and pricing before you buy, because plans change often.
A fifth route exists if QuickBooks is already straining: replace it with an accounting system built on Salesforce, such as Accounting Seed. That is a finance migration, not an integration project, and needs your accountant’s buy-in.
Which Salesforce QuickBooks integration fits you?
QuickBooks Online vs QuickBooks Desktop
Most of this guide is about QuickBooks Online, because that is where new US companies are. According to Intuit, new US subscriptions to QuickBooks Desktop Pro Plus, Premier Plus and Mac Plus stopped after September 30, 2024; existing subscribers can renew, and Desktop Enterprise is still sold.
| QuickBooks Online | QuickBooks Desktop (Enterprise) | |
|---|---|---|
| How apps connect | Cloud REST API with OAuth 2.0 | A local connector (such as Intuit’s Web Connector) on the machine or server where the company file lives |
| Real-time updates | Webhooks and a change data capture endpoint | Scheduled polling; the file’s host must be online |
| Integration choices | Wide: apps, Zapier, iPaaS, custom | Narrow: DBSync and a few others; Intuit offers a Salesforce CRM connector powered by DBSync as a paid add-on subscription for Enterprise Diamond |
| Typical trap | API limits and token renewal | The sync stops when the server sleeps or the file is open in single-user mode |
If you are on Desktop and planning a move to Online within a year, build the integration after the migration. Rebuilding mappings twice costs more than waiting.
Object and field mapping
Every reliable integration starts with one decision per object: which system is the system of record, the one where edits happen. The other system gets a read-only copy.
| Salesforce | QuickBooks Online | Direction | System of record |
|---|---|---|---|
| Account (plus billing contact) | Customer | Salesforce → QuickBooks on first invoice; billing address changes both ways only if agreed | Salesforce for name and owner; QuickBooks for terms and tax status |
| Opportunity (Closed Won) or Order | Invoice (or Estimate, Sales Receipt) | Salesforce → QuickBooks, once | QuickBooks after creation |
| Opportunity Product / Order Product | Invoice line | Salesforce → QuickBooks | QuickBooks after creation |
| Product2 | Product or service item | QuickBooks → Salesforce | QuickBooks (it carries the income account) |
| Custom Invoice object or the app’s invoice object | Invoice status, balance, due date, number | QuickBooks → Salesforce | QuickBooks |
| Custom Payment object | Payment (applied to invoices) | QuickBooks → Salesforce | QuickBooks |
| Account field “QuickBooks Customer ID” | Customer Id | Written back after create | The link itself; never edited by hand |
The last row matters most. Matching by name or email works until two customers share one. Store the QuickBooks ID on the Salesforce account, and the Salesforce account ID on the QuickBooks customer if your tool allows a custom field, and every later sync is exact.
How to set up the integration, step by step
These steps follow the most common path, an AppExchange app with QuickBooks Online. The order is the same for iPaaS and custom builds.
- Agree on ownership with financeSit down with your accountant or controller for an hour. Decide which object each system owns (use the table above), what triggers an invoice (Closed Won, an approved order, a signed contract) and who fixes sync errors.
- Clean both sides firstMerge duplicate accounts in Salesforce and duplicate customers in QuickBooks. Make the Salesforce product list match the QuickBooks products and services list, or plan to pull products from QuickBooks. Dirty data copied by an integration becomes twice the cleanup.
- Create a dedicated integration userDon’t connect the app with an admin’s personal login. In Salesforce, use a dedicated user; supported editions such as Enterprise, Unlimited and Performance come with a limited number of free API-only Salesforce Integration user licenses, according to Salesforce. Give it a permission set with only the objects the sync touches. In QuickBooks, authorize the app with a company admin account that finance controls.
- Install in a sandbox and connect a test companyInstall the app in a Salesforce sandbox and connect it to a QuickBooks Online test company, not your live books. Load a copy of a few real customers and products.
- Map customers and matching rulesMap account fields to customer fields, and set the rule for existing customers: match on the stored QuickBooks ID first, then on an exact field you trust, and send everything else to a review queue instead of creating a new customer.
- Map invoices, lines, items and taxMap opportunity products to QuickBooks items, set terms and due dates, and let QuickBooks calculate sales tax. Decide what happens to discounts and to products that don’t exist in QuickBooks yet.
- Set up the return flowBring invoice number, status, balance and due date back to Salesforce, plus payments. Put them on the account and opportunity page layouts, read-only.
- Test the awkward casesRun ten real deals through the sandbox: a new customer, an existing one, a deal with five lines and a discount, a tax-exempt customer, a foreign-currency customer, a partial payment, a credit memo. Have finance check each invoice in QuickBooks.
- Go live in stepsConnect production, sync only new deals from a cut-off date, and watch the error log daily for two weeks. Backfill old invoices only if sales really needs the history.
Built by Gilzor
Results we’ve shipped




Talk to the people who build it. Tell us about your project and get a free estimate of scope, timeline and cost.
What not to sync
An integration that copies everything is slower, costs more API calls and leaks financial detail to people who don’t need it. Leave these in QuickBooks:
- The general ledger and journal entries. Sales doesn’t need debits and credits, and posting accounting entries from a CRM is how books get corrupted.
- The full chart of accounts. The income account belongs on the QuickBooks item. Salesforce only needs to pick the right item.
- Bills, vendors, payroll and bank feeds. None of it helps a sales rep, and some of it is sensitive.
- Tax calculations. Send the customer’s address and tax-exempt status; let QuickBooks calculate the tax.
- Historic invoices beyond what sales uses. Twelve to twenty-four months of history is usually enough for renewals and collections.
Pitfalls and how to fix them
| Problem | Why it happens | Fix |
|---|---|---|
| Duplicate customers | The sync matches by name, and “Acme Inc” and “Acme, Inc.” look different. QuickBooks also requires a unique display name across customers, vendors and employees, so a customer named like a vendor fails with a duplicate name error. | Match on the stored QuickBooks ID. Route unmatched accounts to a review queue. Add a suffix rule for clashing display names. |
| Nobody owns customer master data | Sales edits the account name, finance edits the customer, each sync overwrites the other. | One owner per field. Usually Salesforce owns name and owner; QuickBooks owns billing terms, tax status and balance. |
| Sync loops | A two-way field update triggers a sync back, which triggers another. | Sync each field in one direction only. Skip updates made by the integration user. |
| Wrong sales tax | Tax amounts pushed from Salesforce disagree with what QuickBooks calculates. | Let QuickBooks calculate tax. Sync addresses and exemption status, not tax amounts. |
| Product mismatch | A Salesforce product has no matching QuickBooks item, so the invoice fails or lands on a generic item. | Make QuickBooks the source for products; block closing deals with unmapped products. |
| Multi-currency errors | A customer created in USD can’t invoice in EUR. According to Intuit, a customer’s currency can’t be changed once it has transactions, and multicurrency can’t be turned off once enabled. | Set the currency on the first sync from the Salesforce account or opportunity currency. Test before enabling multicurrency in QuickBooks. |
| Partial payments shown as paid | The sync reads only a “paid” flag, or applies one payment to one invoice. | Sync the invoice balance, not just status. Show amount paid and amount due. Handle one payment across several invoices. |
| Sync silently stops | The QuickBooks connection expires or is revoked; errors go to an ex-employee’s inbox. | Use a dedicated integration user, send errors to a shared channel, and review the error log weekly. |
| API limits during backfill | Loading years of invoices at once hits the QuickBooks Online limit, which Intuit documents as 500 requests per minute per company for each app, with batch requests capped separately. | Backfill overnight in batches; sync only changed records after that. |
When a custom integration makes sense
Apps fit most teams. A custom integration on the QuickBooks Online API pays off when:
- Billing follows rules an app can’t express: milestones, usage-based lines, prepayments, revenue split across several QuickBooks companies.
- Volume is high enough that per-user app pricing costs more each year than a build.
- Salesforce is heavily customized, and the deal data lives in custom objects the apps don’t support well.
- You need the same quote-to-cash logic in other systems, such as a customer portal or a billing platform.
A typical custom build covers OAuth 2.0 with automatic token refresh (Intuit now caps refresh tokens at five years and rotates them, so the service must always store the newest one), a customer matching service, invoice creation with idempotency so a retry never creates a second invoice, QuickBooks webhooks for payments, a retry queue, and an error dashboard for finance.
For cost ranges by integration type, see our API integration cost guide. Building a larger data platform around the CRM? Read the cost of data integration.
Salesforce Xero integration in brief
Xero follows the same pattern: closed-won deal to invoice, payment back to Salesforce. The options are similar too. Breadwinner for Xero is listed in both AppExchange and the Xero app store; Zapier, Make and the iPaaS platforms have Xero connectors; and the Xero API supports custom builds.
Two differences to plan for. Xero’s API limits are tighter per organization: Xero’s developer documentation lists 60 calls per minute and 5,000 per day per connected organization on paid app plans, and 1,000 per day on the free Starter plan introduced in March 2026, so large backfills take days. And Xero calls customers “contacts”, shared with suppliers, so the same duplicate and ownership rules apply.
Go-live checklist
Salesforce QuickBooks go-live readiness
FAQ
Can Salesforce integrate with QuickBooks?
Does QuickBooks Online have a native Salesforce integration?
What is the best Salesforce QuickBooks integration app?
How do I sync invoices from QuickBooks to Salesforce?
Can Zapier connect Salesforce and QuickBooks Online?
How much does a Salesforce QuickBooks integration cost?
Next steps
Connecting more than QuickBooks? The Salesforce integration guide covers the patterns that repeat across every system, and the Salesforce NetSuite integration guide covers the move up when QuickBooks no longer fits.
If your billing logic needs more than an app, Gilzor’s engineers can map the data flow between Salesforce and QuickBooks, build the integration and support it after launch. See our Salesforce integration services.
No sales pitch
Get a straight answer for your project
Tell us what you’re building. We’ll reply with options, a rough cost and timeline. If we’re not the right fit, we’ll say so.

Head of Mobile Development at Gilzor. Leads iOS and Android delivery and the mobile app audits, from release process to architecture.
LinkedIn →Gilzor · Web Development partner
Need a team for your web product?
Services
Web DevelopmentCustom websites and web apps — front-end, back-end, launch and support.→By company type
Selected projects






The team behind them





