All articles

Custom CRM

CRM That Syncs With QuickBooks Two Way: 8 Tests

Most CRMs advertise two-way QuickBooks sync and ship a read-only balance mirror. Here are the 8 tests that separate real bidirectional sync from a demo.

Om Patel 18 min read
Photo: Shahabudin Ibragimov / Unsplash

The short answer

Two-way QuickBooks sync is a marketing phrase, not a technical standard. Most native CRM connectors push invoices one way and pull a balance back. True bidirectional sync means field-level ownership, conflict resolution, and an error queue you can replay. Test the exceptions, refunds, voids, renames and duplicate names, not the happy path.

Every CRM on the market says it syncs two way with QuickBooks. Almost none of them mean the same thing by it, and the gap between the phrase and the implementation is where field service and professional services businesses lose their weekends to reconciliation.

One framing note before the tests. Passing all eight tells you a vendor's bidirectional sync is real; it does not tell you that you want it. For most businesses the better architecture is one-way sync at quote acceptance, which removes the entire class of conflict rather than resolving it well, and the case for that is in QuickBooks CRM sync problems. Use what follows when you have a genuine reason to need bidirectional, or when you need to check whether a vendor's claim is true.

I went through the top ten ranking pages for this query. All ten are vendor rankings: Method at number one, then HubSpot, Zoho, Insightly, Pipedrive, pros and cons, pricing tables. Not one of them defines what two-way sync means, and not one mentions a single constraint in Intuit's own API that determines whether the sync can work at all.

That is the article. Not which CRM, but which tests, and why they are the tests.

The short answer

A CRM syncs two way with QuickBooks when a change made in either system reaches the other, on the same field, with a defined winner when both sides change that field at once. Most connectors sold as two-way do not meet that definition.

The clearest statement of this I found came not from a vendor but from a practitioner. In a thread on r/CRMSoftware asking which CRM to run alongside QuickBooks, a commenter going by avomir wrote: "QBO is tough because the native integrations for most CRMs don't do more than show outstanding balances. You'd need to use Zapier to build something like 'when opportunity reaches this stage, create an invoice'. I don't have a strong recommendation here just wanted to give you a heads up on that as the marketing landing pages are often misleading."

That is the whole problem in three sentences, from someone with no product to sell.

The three tiers hiding behind one phrase

Before you compare vendors, work out which tier you actually need. Buying tier 3 when you need tier 1 is how a simple integration becomes a six-month project.

TierWhat it doesWhat it does not doRight for
0. Balance mirrorDisplays QuickBooks invoices, balances and payment status inside the CRM recordWrites nothing back to QuickBooksSales reps who need to see if a client is past due before calling
1. Push and status returnCreates the QuickBooks customer and invoice from the CRM, returns payment statusDoes not accept edits made in QuickBooks back into the CRMMost small businesses, most of the time
2. True bidirectionalField-level sync in both directions with conflict rules, external ID matching and a replayable error queueRequires you to decide, in writing, who wins on every contested fieldBusinesses where office staff genuinely edit the same records in both systems

Most vendor pages describe tier 1 and call it tier 2. Some describe tier 0 and call it tier 2.

A commenter in that same thread, posting as HITS_827, put the recommendation bluntly: "For many small businesses, one-way CRM-to-QuickBooks creation plus payment-status sync back to the CRM is safer than full bidirectional editing. Two-way sync is useful only when people genuinely need to change the same records in both systems."

Tip

Before you shortlist a single vendor, answer one question: does anyone in your office edit customer or invoice records directly inside QuickBooks after they are created? If the answer is no, you need tier 1, and half the sync problems in this article disappear.

Why QuickBooks itself makes true two-way sync hard

This is the section no listicle writes, because it requires reading Intuit's developer documentation rather than vendor marketing. Seven constraints in the QuickBooks platform shape what any integration can do, and they apply equally to Method, HubSpot, Zoho and a connector you build yourself.

1. Display names must be unique across three tables

QuickBooks requires the DisplayName attribute to be unique across every Customer, Vendor and Employee object in the file. You cannot have a Customer and a Vendor with the same display name. Attempt it through the API and Intuit returns validation error 6240, "duplicate name exists," documented in Intuit's own developer help centre and reproduced in the troubleshooting docs of practically every sync vendor, from MyWorks to JobNimbus to Flex Rental Solutions.

This is the single most common sync error in the wild, and it has a specific cause. A connector that matches records by name rather than by stored entity ID will break the first time somebody renames a customer, then create a second one. A well-built integration stores the QuickBooks realm ID and entity ID on the CRM record and matches on that.

2. You cannot hard delete anything

The QuickBooks Online API does not support hard deletion of name-list entities. A delete call performs a soft delete: QuickBooks sets the record inactive rather than removing it, and soft-deleted records remain queryable. Customers with associated transactions cannot be permanently removed at all, and making a parent customer inactive makes every sub-customer inactive with it.

For a sync, that means deletion is not symmetric. Delete a contact in your CRM and the QuickBooks record survives as inactive. If your connector interprets "inactive in QuickBooks" as "delete in CRM," a routine accounting cleanup will quietly strip records out of your sales pipeline.

3. Webhooks tell you something changed, not what

QuickBooks Online supports webhooks, but notifications typically carry only a reference to the changed entity, so the integration must make a follow-up API call to retrieve the actual data. Delivery can lag the event, entity coverage is limited, and duplicate notifications occur. The practical consequence is that serious integrations combine webhooks with periodic polling, or with Change Data Capture, which Intuit caps at a 30-day lookback window.

That cap matters more than it sounds. If your sync is down for longer than 30 days, there is no incremental catch-up path. You are doing a full reconciliation pass.

4. Throttling puts a hard ceiling on migration speed

QuickBooks Online enforces roughly 500 requests per minute per realm ID, with about 10 concurrent requests per app, returning HTTP 429 when exceeded. The batch endpoint is throttled more tightly still, reported at 120 requests per minute per realm following a change effective 31 October 2025 in production, and a single batch is capped at around 30 operations with an approximate 1 MB payload limit.

By the numbers

At 500 requests per minute per company file, and with each customer typically requiring a read, a match and a write, a first migration of 5,000 customers plus their open invoices is measured in hours. Any vendor who tells you the initial sync is instant has not run it on your data volume.

5. Automated Sales Tax will overrule your CRM

This one costs real money and almost nobody checks it. Intuit changed the QuickBooks Online API on 10 August 2018 for companies with Automated Sales Tax enabled. Before the change, a sales transaction line with no TaxCodeRef was treated as non-taxable. After it, Intuit's developer documentation states that such a line is "treated as if the TaxCodeRef is TAX," with taxability determined by the item.

Intuit's stated rationale is explicit: "The QuickBooks Online vision of AST is for the QuickBooks Online platform to take up the responsibility of applying the right taxes on a transaction." The tax engine applies tax based on the taxability of the customer, the address of record for the transaction, and the taxability of the items for the agencies covering that address. The only way to suppress it is to send NON explicitly on the line.

If your CRM writes invoices and does not populate TaxCodeRef deliberately, you will find tax on lines that should not carry it. Run one taxable and one exempt invoice through the connector before you trust it with a month of billing.

6. Custom fields are mostly a read operation

Custom fields in QuickBooks Online are retrievable through the API, but creating and updating them is not fully supported. QuickBooks Online Advanced lets customers define up to 10 custom fields, yet only the first three String custom fields are exposed through the existing API functions.

This is why a Reddit commenter evaluating Pipedrive's native QuickBooks connector reported that it "handles basic contact and invoice linking, though it can get finicky with custom fields." It is not the CRM being finicky. It is the ceiling on the QuickBooks side.

Related ceilings worth knowing: QuickBooks has no dedicated Project entity in the API, since projects are modelled as sub-customers behind an IsProject flag, tags can be read but not created or updated through the API, and bank feed lines still sitting in For Review are not exposed at all.

7. On Desktop, real time means polling

QuickBooks Desktop integrations run through the Intuit Web Connector, which polls your web service on a schedule the user configures. Integration vendors recommend intervals between 10 and 60 minutes and warn that setting it below roughly 5 minutes produces errors, because a new sync kicks off before the previous one has finished.

So when a vendor advertises real-time two-way sync and your books are on Desktop, what you are buying is a short polling loop with a local connector running on a machine that has to stay on. That is a perfectly reasonable architecture. It is just not real time, and the difference shows up the first time a technician in the field expects an invoice to appear immediately.

We build custom CRMs for trades and service businesses where QuickBooks is already the system of record and nobody wants to move off it. That means a field-level sync map you approve before we write code, external ID matching so renames never spawn duplicates, and an error queue your office manager can actually replay.

Book a free CRM demo

Decide who owns which field before you shop

The best framework I found on this subject came from a Reddit comment, not a vendor. Prestigious_Classic2, replying in the same r/CRMSoftware thread, wrote: "Before picking the CRM, decide which system owns each piece of data. I would normally let the CRM own prospects, communication, and pipeline activity, while QuickBooks owns customers once they become billable, invoices, payments, and accounting records."

Then the line that should be printed on the wall of every implementation: "Integrations often look perfect in a feature list but break around corrections and exceptions."

Here is that ownership map filled in for a typical service business. Write your own version before you take a single demo, because it converts a vague shopping question into a specific one.

DataOwnerDirectionNotes
Leads, prospects, pipeline stageCRMCRM onlyNever belongs in QuickBooks
Calls, emails, notes, activityCRMCRM onlyQuickBooks has no place to put it
Estimates and quotesCRMCRM to QuickBooksPush on acceptance, not on creation
Customer record, once billableQuickBooksBidirectional on a narrow field setAddress, terms, tax status
InvoicesQuickBooksCRM creates, QuickBooks owns thereafterEdits after posting belong in the ledger
Payments, credits, refundsQuickBooksQuickBooks to CRMStatus only, never editable in the CRM
Chart of accounts, tax codesQuickBooksQuickBooks to CRMRead-only reference data
Job or project profitabilityDependsUsually CRMQuickBooks has no true Project entity

The moment you fill this in, most vendor comparisons resolve themselves. If the only bidirectional row you need is the customer record on four fields, you do not need the deepest integration on the market. You need a reliable one.

The 8 tests to run during the trial

Run every one of these on a trial account with your own data before you sign anything. They take about two hours. They are ordered by how often they fail.

1. The duplicate name test. Create a customer in your CRM with a name that already exists as a Vendor in QuickBooks. A good connector detects the conflict and surfaces a resolvable error. A bad one throws error 6240 into a log nobody reads and silently stops syncing that record.

2. The rename test. Create a customer, sync it, then rename it in QuickBooks. Sync again. If a second customer appears in QuickBooks, the connector is matching on name rather than entity ID, and it will duplicate your list over time.

3. The tax test. Push one fully taxable invoice and one exempt invoice. Check the tax lines in QuickBooks against what the CRM displayed. If the exempt one picked up tax, the connector is not sending NON on those lines.

4. The refund test. Issue a refund or credit memo in QuickBooks against a synced invoice. Does the CRM show the customer as owing less, or does it still show the original balance? This is the single most common gap in tier 0 and tier 1 connectors.

5. The void test. Void a synced invoice in QuickBooks. Voided is not deleted, and many connectors handle only deletion. A voided invoice that still reads as open revenue in your CRM will corrupt your pipeline reporting.

6. The partial payment test. Apply a payment for half the invoice amount. Confirm the CRM shows partially paid rather than flipping to paid or staying unpaid.

7. The outage and retry test. Disconnect the integration mid-sync, or let the token expire, then reconnect. This is the test HITS_827 described precisely: the integration should "preserve external IDs, avoid duplicate creates on retry, show failed records in an error queue, and let someone replay them after correction." If failures vanish into a log with no replay button, every outage becomes manual data entry.

8. The volume test. Load a realistic batch, a few hundred records, and time it. You are checking for 429 throttling behaviour. A connector that backs off and resumes is fine. One that fails the batch and leaves you to work out which records landed is not.

Watch out

Test 7 is the one vendors will try to talk you out of running, usually by saying it never happens. Token expiry, API deprecations and QuickBooks maintenance windows all happen. The question is not whether the sync will break. It is whether your office manager can fix it without calling support.

Based on what the vendors themselves publish and what practitioners report, the landscape sorts roughly like this. Verify against your own tests rather than taking any of it on faith, including mine.

Method CRM is the only major CRM built around QuickBooks from the start, and it markets a patented real-time two-way sync covering customers, invoices and payments for both Online and Desktop. If QuickBooks is genuinely the centre of your operation and its object model fits your business, it is the shortest path to tier 2. A Method employee posting transparently in the r/CRMSoftware thread made the case honestly: many QuickBooks integrations "say they sync, but in practice you still end up double entering things."

HubSpot and Zoho offer native connectors with real bidirectional elements on the customer and invoice objects. Zoho's syncs contacts, products, invoices, estimates and purchase orders. Both are strong general CRMs where the QuickBooks link is a feature rather than the foundation. The caution from the field is that small teams find HubSpot's pricing hard to justify for what the accounting link delivers.

Pipedrive, Insightly, Nutshell, Capsule and Keap all connect, with varying depth, and several users report layering Zapier on top for the specific automation they wanted, such as creating an invoice when a deal closes. That is a legitimate pattern. Just recognise that a Zapier layer runs on triggers rather than reconciled state, which means it drifts, and it has no replayable error queue.

Field service platforms like Jobber and Housecall Pro solve a different problem: they own scheduling and dispatch and push to QuickBooks. If you are in the trades, that category is usually a better starting point than a sales CRM, and we compared it in detail in the best CRM for field service and blue collar businesses.

When the honest answer is to build

Off-the-shelf wins more often than agencies like to admit. Buy the connector when your business objects map cleanly onto QuickBooks objects and the standard field set covers your workflow.

Building becomes the rational choice at three specific points, not before:

  • Your core business object is not a QuickBooks object. Recurring service contracts with variable scope, multi-visit jobs, equipment under warranty, retainers with drawdown. QuickBooks has no Project entity and models projects as flagged sub-customers, so anything project-shaped needs a home elsewhere.
  • The exceptions are your business, not your edge case. Progress billing, deposits held against future work, change orders mid-job. Every connector handles a clean invoice. Almost none handle a change order that moves 30 percent of a job's value between line items after a deposit has been applied.
  • A silent sync failure costs you real money. If a missed invoice means an unbilled job rather than a tidy-up task, you need an error queue and an owner, not a log file.

One operator in r/pressurewashing, frustrated with a field service platform, named the constraint exactly: "The limited API access is also an inevitable dealbreaker. I'm building my own CRM because like you, I'm encountering the same struggles."

That is a reasonable conclusion to reach, and also a decision worth making slowly. Most businesses that think they have outgrown their CRM have actually outgrown their configuration, which is a much cheaper problem. We wrote about how to tell the difference in signs you have outgrown your CRM, and about the failure pattern that swallows the projects that go ahead anyway in why CRM implementations fail.

The one-page checklist

Take this into every demo.

  1. Ask for the field map: which objects, which fields, which direction, per object.
  2. Ask what happens when the same field changes in both systems within the sync window.
  3. Ask whether matching is by name or by stored QuickBooks entity ID.
  4. Ask to see the error queue, and ask who on your team would be looking at it.
  5. Ask whether failed records can be replayed after correction, or only re-entered.
  6. Ask how the connector populates TaxCodeRef on invoice lines.
  7. Ask whether it is Online or Desktop, and if Desktop, what the polling interval is.
  8. Run the eight tests above on your own data, in a trial, before money changes hands.

If a vendor cannot answer the first three from memory, you are talking to a salesperson about a feature checkbox rather than to anyone who has run the integration in anger. That is not disqualifying. It just means the answers you need are still ahead of you, and the trial is where you will get them.

The businesses that get this right are not the ones who picked the cleverest CRM. They are the ones who decided, in writing, which system owns which field, and then spent two hours breaking the integration on purpose before they trusted it with a year of revenue.

Frequently asked questions

Which CRM actually syncs two way with QuickBooks?
Method CRM markets the deepest native two-way sync for both QuickBooks Online and Desktop, and HubSpot, Zoho, Insightly, Nutshell and Pipedrive all publish QuickBooks connectors. The honest answer is that the vendor name matters less than the field map. Ask any vendor for the list of objects and fields that sync in each direction, plus what happens on a conflict. If they cannot produce that document, the integration is a one-way push with a balance read-back regardless of what the landing page says.
What does two-way sync actually mean?
It means a change made in either system propagates to the other, on the same fields, with a defined winner when both sides change the same field. Three very different things get sold under that label: a read-only mirror that displays QuickBooks balances inside the CRM, a one-way push of customers and invoices with payment status returning, and genuine field-level bidirectional sync. Only the third is two-way in the technical sense.
Why does my CRM keep creating duplicate customers in QuickBooks?
Because QuickBooks requires the DisplayName to be unique across every Customer, Vendor and Employee record in the file. Intuit returns validation error 6240, duplicate name exists, when a sync tries to create a record whose display name is already taken anywhere in those three tables. A well built connector stores the QuickBooks realm ID and entity ID against the CRM record and matches on that ID rather than the name, so a rename never produces a second customer.
Can a CRM sync with QuickBooks Desktop in real time?
Not in the strict sense. QuickBooks Desktop integrations run through the Intuit Web Connector, which polls your service on a schedule that the user sets. Integration vendors commonly recommend intervals of 10 to 60 minutes and warn that settings below roughly 5 minutes cause errors because a new sync starts before the previous one finishes. Anything advertised as real time on Desktop is a short polling interval, not a push.
Does QuickBooks Online support webhooks for real time CRM sync?
It supports webhooks, but with caveats that shape the design. Notifications generally carry a reference to the changed entity rather than the full record, so your integration has to make a follow-up API call to fetch the details. Delivery can be delayed, entity coverage is limited, and duplicate notifications happen. Most production integrations pair webhooks with periodic polling or Change Data Capture, which can only look back 30 days.
Will a CRM overwrite the sales tax on my QuickBooks invoices?
It can, and this is one of the least understood failure points. On companies with Automated Sales Tax enabled, Intuit changed the API in August 2018 so that a sales line with no explicit TaxCodeRef is treated as taxable and priced from the item's taxability, where an empty value previously meant non-taxable. If your CRM does not explicitly send NON on lines that should not be taxed, the tax engine will apply tax based on customer taxability, the address of record and item taxability.
Should I use a native connector, Zapier, or a custom integration?
Native connectors are the right call when the standard object map covers your workflow. Zapier and similar tools fit low-volume, event-shaped work such as create an invoice when a deal is marked won, but they run on triggers rather than a reconciled state, so they drift and they rarely have a replayable error queue. A custom integration earns its cost when your business object does not map to a QuickBooks object, when you need field-level ownership rules, or when a failed sync has to be caught and corrected rather than silently skipped.
How many API calls can a QuickBooks sync make?
QuickBooks Online throttles at roughly 500 requests per minute per company file, with a maximum of about 10 concurrent requests per app, and returns HTTP 429 when you exceed it. The batch endpoint has its own tighter ceiling, reported at 120 requests per minute per realm since a change that took effect on 31 October 2025, and batches themselves are capped at around 30 operations. This is why a first-time migration of several thousand customers takes hours rather than minutes.
Bespoke pipelines, automations, 360° customer records and real-time reporting, a CRM built around how your team actually works, connected to your entire stack.
Book a free CRM demo

Free tools

Find out what your site is costing you.

Enter your address and we check the real page. Scores are free and the itemised report lands in your inbox. No account, and we change nothing on your site.