Two systems, one person in between
A deal closes in HubSpot or Salesforce. Someone in accounts opens Xero or QuickBooks, creates the customer again, copies the address, sets the payment terms and raises the invoice. When the invoice is paid, the sales team cannot see it, so they ring accounts to ask whether the customer is clear to order again.
Addresses get updated in one system and not the other. The same customer exists as "ABC Ltd" in the CRM and "A.B.C. Limited" in the accounts. Month-end involves an export, a spreadsheet and a lot of VLOOKUP.
Why the off-the-shelf connector did not stick
Most CRMs and accounting packages have a marketplace connector. Plenty of businesses switch one on, find it creates a flood of duplicate contacts, and switch it off again.
The connector is rarely the real problem. The problem is that nobody decided the rules first. Which system is the master for a company's legal name? For the billing address? For payment terms? What happens when sales changes a customer that already has open invoices? What counts as the same customer when the names do not quite match?
Without those answers, any sync just copies the mess in both directions faster.
There is a second trap: the existing data. Years of manual copying leave both systems with near-duplicates, old addresses and contacts who left long ago. Switching on a two-way sync over that data does not tidy it; it spreads each system's mistakes into the other.
What the double entry costs
| Where it hurts | What happens |
|---|---|
| Retyping | Staff time spent copying the same fields twice |
| Mismatched records | Invoices sent to old addresses or wrong contacts |
| Blind sales team | No view of overdue accounts when talking to a customer |
| Slow invoicing | Invoices wait until someone gets round to raising them |
| Reporting | Revenue by source or salesperson needs a manual stitch-up |
There is also the credit risk: a salesperson happily taking a new order from a customer who is months behind on paying, because that information lives in a system they never see.
How we connect them
- Ownership map. We agree, field by field, which system owns each piece of data. Commonly the CRM owns contacts and deals, and the accounting package owns invoices, payments and credit status.
- Matching key. We clean up existing duplicates and store each system's ID on the matching record in the other, so future syncs match on ID rather than on names.
- Sync service. A small service talks to both APIs (for example HubSpot and Xero, or Salesforce and QuickBooks). New won deals create customers and draft invoices; payments flow back to the CRM as status fields.
- Real-time where it matters. Webhooks push events like a closed deal or a paid invoice straight away. Less urgent data, such as reporting totals, runs on a schedule.
- Exception queue. Anything the rules cannot resolve, like a customer that might be a duplicate, goes to a short list for a person to decide rather than being guessed.
- Logging. Every create and update is logged, so when someone asks why a record changed, there is an answer.
Where a connector from Zapier, Make or n8n covers the need, we use it. A custom service earns its place when the rules are specific to how your business works.
What changes for the team
Sales close a deal and the invoice appears as a draft in accounts, with the right customer, terms and line items. Accounts approve and send it. When it is paid, the CRM shows it. Salespeople see the account status before they promise anything.
Month-end reporting draws from both systems without the spreadsheet in the middle. The awkward cases still exist, but they sit in one short queue rather than being discovered by a customer.
You might recognise this
- The same customer is typed into both the CRM and the accounts package
- Sales ring accounts to check whether a customer has paid
- You tried a marketplace connector and it created duplicates
- Addresses and contacts differ between the two systems
- Invoices go out late because someone has to create them by hand
- Month-end involves exporting both systems into a spreadsheet