← All integrations
QuickBooks → Salesforce

QuickBooks Salesforce integration

In short

A QuickBooks Salesforce integration keeps billing reality and pipeline reality in agreement: closed-won Salesforce accounts and opportunities become QuickBooks customers and invoices without re-keying, and QuickBooks invoice status, payments, credit memos, and open balance flow back onto the matching Salesforce account. Done properly it is not a nightly CSV or a one-way push - it is an idempotent, bidirectional pipeline keyed on stored record IDs, so nobody creates a duplicate customer and sales sees who has actually paid.

What a QuickBooks to Salesforce integration actually does

Salesforce is where the deal is: the account, the opportunity, the quote that just came back signed. QuickBooks is where the money becomes real: the customer record, the invoice, the payment received, the open balance in the ageing report. Between the two sits a person retyping company names, addresses, and line items into an invoice - and then answering the same question in Slack twice a day, which is whether a given customer has actually paid.

A QuickBooks Salesforce integration removes both jobs. Closed-won work in Salesforce turns into a customer and an invoice in QuickBooks without re-keying, and invoice status, payments, credit memos, and outstanding balance flow back onto the matching Salesforce account. Finance keeps ownership of the numbers; sales just gets to see them without a licence for the accounting system.

What data moves

QuickBooks object / eventBecomes in SalesforceNotes
CustomerMatched Account (never blindly created)Joined on the QuickBooks Customer Id stored in a Salesforce external-ID field
InvoiceInvoice record on the AccountDoc number, issue and due date, terms, total; read-only in Salesforce
Invoice balancePaid / open / overdue state plus days overdueRecalculated on every payment, not a one-time flag
Payment and its applied transactionsPart-paid or settled status on the invoicePartial payments update the remaining balance, not just a checkbox
Credit memo / refund receiptReversing record against the original invoiceSame customer and lines, dated to the credit
Estimate acceptedOptional closed-won signal on the opportunityOnly where quoting genuinely starts in QuickBooks
Customer open balance and ageingAccount fieldsA rep sees exposure before promising the next delivery

And in the other direction:

Salesforce object / eventBecomes in QuickBooksNotes
Account and billing ContactCustomerDisplayName must be unique across the company file; upserted on stored Id
Closed-won Opportunity or OrderInvoice or Sales ReceiptSales Receipt where payment is already taken, Invoice where terms apply
Order / Quote line itemsInvoice linesProduct2 codes resolved to QuickBooks Items with a real income account
Payment termsTerm reference on the customer or invoiceNet 14, Net 30 and friends mapped once, not typed per invoice

The account mapping, item mapping, tax codes, and terms are agreed once with your finance team and encoded in the pipeline. After that nobody maps them again by hand.

The details that break naive syncs

A generic connector or a weekend script gets the happy path working and leaves the expensive edge cases on your desk:

How we build and run it

We treat this as a pipeline, not a scheduled export. Salesforce changes arrive by event or a bounded query on the last-modified timestamp; QuickBooks changes arrive by signed webhook and are re-read from the API before anything is written. Records are validated, mapped to your agreed items, tax codes, and terms, then written as upserts against stored IDs.

The pipeline is idempotent by design. Every record on both sides carries a stable identifier, and the mapping between them lives in the pipeline rather than in a spreadsheet, so a retry or a replay never produces a second customer or a duplicate invoice. Anything that cannot be mapped is quarantined with a readable reason instead of being forced through.

It runs on cloud-native, fully EU-hosted AWS infrastructure, so customer and invoice data stays in the EU and your DPA / AVV and GDPR position stay clean. Then we keep it running: monitoring, alerting, incident response, and watching for Intuit and Salesforce API changes are our contractual responsibility, with a named owner and an SLA.

When this integration is worth building

If you raise a handful of invoices a month from one price list in one currency, typing them into QuickBooks is genuinely fine and we will say so. A point tool can also be enough while the flow is one-way, low volume, and the field mapping is trivial.

The integration earns its place when invoice volume makes re-keying a daily job, when sales keeps asking finance for payment status, when duplicate customers have already crept into the company file, when you bill in more than one currency or across more than one QuickBooks company, or when a broken sync would be noticed by a customer before it is noticed by you. At that point what you are buying is not a connector - it is somebody who owns the outcome, is on the hook when Intuit changes an endpoint, and answers the phone at close.

Frequently asked questions

Does this work with QuickBooks Online or QuickBooks Desktop?
Both, but they are different builds. QuickBooks Online exposes the Intuit v3 REST API per company file (realm) with OAuth 2.0, webhooks, and a change-data-capture endpoint, so the pipeline talks to it directly. QuickBooks Desktop and Enterprise have no cloud API of their own and need a connector on or beside the machine that hosts the company file. We confirm the exact edition, region, and hosting during scoping so the connection method is priced before we start, not discovered afterwards.
How do you stop duplicate customers being created in QuickBooks?
We never match on company name alone. The Salesforce account carries an external-ID field holding the QuickBooks Customer Id, and every write is an upsert against that key. On first sync the pipeline creates the customer once and writes the new Id back to Salesforce. This also handles a QuickBooks rule that surprises people: DisplayName has to be unique across the whole company file, so two Salesforce accounts called the same thing will be rejected outright rather than silently merged. We define the naming and disambiguation rule with you up front.
Can sales see whether an invoice has been paid without a QuickBooks licence?
Yes, and that is usually the direction with the fastest payback. We push invoice number, due date, amount, remaining balance, and paid or overdue state onto the Salesforce account and opportunity, updated on every payment and credit memo. The figures stay owned by QuickBooks and are read-only in Salesforce, so nobody edits a balance in the CRM and creates a second version of the truth.
How do you handle sales tax, VAT, and multiple currencies?
Tax is calculated on the QuickBooks side, not guessed in transit. Depending on your region and company settings that is either automated sales tax or an explicit tax code per line, and we map Salesforce products and price books to the matching QuickBooks items and tax codes once, agreed with your finance team. Multi-currency needs care: a QuickBooks customer has a fixed currency that cannot be changed once transactions exist, so the pipeline validates the currency on the Salesforce side before it creates anything.
Who operates it after go-live?
We do. The pipeline runs on cloud-native, fully EU-hosted infrastructure that we monitor. When Intuit deprecates an endpoint or Salesforce retires an API version, that is our problem to fix under contract, not something your revenue team discovers when invoices stop appearing. You get a named owner, alerting, and an SLA rather than a script somebody has to remember to run.

Need this integration built and permanently operated? Tell us which systems connect and what data has to move. Fixed-price scoping quote within 48 hours.

Request a scoping call