Adonis Consulting logoADONISCONSULTING

By Bradley Roth, Adonis Consulting ·

ERP to CRM Integration in Plain English (and What 'Bi-Directional Sync' Actually Means)

Two offices, one company

Your CRM is the front office. ServiceTitan, Jobber, Salesforce: whichever one you run, it holds customers, jobs, conversations, the promise of what you’re going to do.

Your ERP is the back office. QuickBooks, NetSuite, Dynamics: money, inventory, the ledger, what actually happened. (If you enjoy arguments, someone will tell you QuickBooks isn’t really an ERP. They’re technically right, and it changes nothing below. If your jobs system and your money system are two systems, this article is about you.)

Integration is one sentence: making them agree without a human retyping. Everything else is levels, and there are three.

The three levels

Level 1: the CSV shuffle. Export from one system, massage the file, import into the other, fix what bounced. It works, in the way that paying wages for copy-paste “works.” Price your version of that shuffle; most owners have never run the number, and it’s usually ugly.

Level 2: one-way sync. A pushes to B, automatically. New customer in the CRM appears in the ERP, no human involved. Fine, until B changes something. A payment recorded in the ERP never flows back, so the CRM keeps showing an invoice unpaid that the customer settled on Tuesday, and eventually somebody calls a customer about money you already have. One-way sync is a megaphone, not a conversation.

Level 3: bi-directional sync. Both systems can update the shared records, and both stay correct. This is the level that actually replaces the retyping human, and it is where integration gets hard. Everything below is about why, and about the one decision that makes it survivable.

The decision that makes bi-directional survivable

Before anyone writes code, you answer one question per field: when the two systems disagree, which one wins? Not per record. Per field.

The customer’s address: the CRM wins. That data is alive in the field; a tech corrects it at the truck, and the office should inherit the correction. The invoice balance: the ERP wins. That’s the ledger, and the ledger doesn’t take votes.

Write the whole map down: contact info, job status, invoice totals, payments, item pricing, each field with a named winner. One page. Decide it once, in writing, before building. With that map, a Wednesday-afternoon disagreement between systems isn’t an argument; it’s a lookup. The winner’s value holds, the loser gets updated, the change gets logged, and nobody improvises.

If you take one thing from this article: the source of truth is a decision you make, not a feature you buy.

The four ways bi-directional sync fails

Double-writes. The same invoice lands in the ERP twice. Usually two syncs carrying the same record, or a sync plus a person who hand-keyed it “just to be safe” because they didn’t trust the sync yet (the ironic failure mode; it happens constantly). Fix: every record carries its origin system’s ID, and the receiving system checks whether it has seen that ID before writing. Seen already means skip, not duplicate.

The update ping-pong. A pushes a change to B; B pushes it back to A; A pushes it again. An infinite loop of harmless updates, until one isn’t harmless. Fix: change tracking. Every synced update is stamped with where it came from, and a system never bounces back a change it received.

Race conditions. Two people change the same customer record in both systems the same afternoon. Both saves are legitimate. Whose version survives? Fix: the source-of-truth map answers, the losing value is overwritten with a log entry, and when money is involved the collision gets flagged to a human instead of settled silently. Nobody has to referee, because the source of truth for that field was decided in writing before either system existed.

Silent failure. The sync dies on a Tuesday, quietly. Nothing errors; nothing just runs. Nobody notices until month-end, when the numbers don’t reconcile and nobody can say why. This is the failure mode that eats weeks. Fix: an alert when the sync doesn’t run. Not when it fails; failing is loud. When it doesn’t run. If it’s scheduled every fifteen minutes and hasn’t checked in, you get the email that tells you when it didn’t. I build reporting the same way: the 5 AM report ships with a “the report didn’t send” email, because the absence of a message is also a message.

When $20-a-month middleware is the right answer

Candor, because I’d rather point you at the cheap tool than oversell you: Zapier-class middleware at twenty dollars a month is genuinely the right answer for a lot of jobs. Low volume. One direction. Data that hurts nobody if it lags or drops. The website lead that should show up in the CRM is a perfect middleware job; set it up in an afternoon and you’re done with this article.

It stops being the right answer when volume grows and per-task pricing bends upward, when you need bi-directional (exactly the hard case above), when you need real error handling, or when money touches the sync. Invoicing through a zap chain is freight on a footbridge. The full comparison, Zapier vs Make vs Power Automate vs a dedicated build, is here, with the per-task math at real volumes.

What a real integration costs and how long it takes

I publish prices, so: a sync between two systems is often near our entry point, $7,000, with most builds landing around $13,500 once every record type and edge case is counted honestly. Timeline honesty: a two-system sync is usually weeks, not months, but don’t shave the first week. That’s the discovery week, where the source-of-truth map gets written. Skipping it doesn’t save time; it just moves the cost to month-end reconciliation, where it compounds.

If you want this argument in shop terms, the ServiceTitan-to-QuickBooks piece is this same article wearing work boots, and the field-service automation guide is the whole map of where trades back offices leak hours.

Why nobody sells this explanation

Nobody sells this explanation because integration projects look like magic from the outside and plumbing from the inside. It’s plumbing. Expensive, honest plumbing — and once it’s in, it runs for years.

Bi-directional sync is the flagship of what I build. If your two systems disagree more than your people do, email me both names and what gets retyped between them. A human (me) reads it and answers within the hour, usually minutes.

Reading is the easy part

If something in this article described your week, email me the process. A human (me) reads every one and answers within the hour, usually minutes.

Email me Call