Home  ›  Guides  ›  Integrations between core business platforms  ›  Keep ERP, finance and CRM data in sync: reconciliation basics

Keep ERP, finance and CRM data in sync: reconciliation basics

An integration can report success while records go missing or change. A regular reconciliation compares what each system holds and shows the gaps while they are still small.

Most integrations log an error when a record fails. Some problems never reach that log. A rule can filter a record out. An order can be cancelled in one system only. An amount can change after the sync. Each of these leaves the systems different with no error.

Reconciliation is a regular check that the systems agree after the integration runs. It relies on the field owners and identifiers agreed in deciding which system owns each field. It complements the logs and alerts covered in choosing an integration approach.

Define the records you compare

Each system must count the same set of records. Agree these points for each record type before the first run.

Allow the agreed sync lag before you call a record missing. For example, if orders should arrive within 15 minutes, leave out orders created in the last 15 minutes before the cut-off.

Compare keys and fields as well as totals

Counts and totals flag some differences. Compare record keys and fields as well, because errors can cancel out. For example, one missing $2,000 order and another $2,000 order sent twice leave the counts and totals unchanged.

  1. Counts and totals. Compare them for the period. They give a quick signal.
  2. Keys. List the external IDs in each system. Find IDs that appear in one system only, or more than once.
  3. Fields. For records in both systems, compare the fields that matter, such as amount, status, currency and customer ID.

Records with no external ID cannot be paired. List them separately, and ask the owning team to fix their keys.

Include records that changed later

A check of new records misses changes to older ones. Include these in each run:

Select this part of the check by the last-modified date, not the created date. Some systems hide deleted records from normal reports. Check whether yours keeps a deletion log you can report on.

Set up the daily check

Here is an example of a daily check. The business sends orders from a CRM to an ERP. The ERP raises invoices and passes them to the finance system. All figures are illustrative.

CheckCRMERPFinanceResult
Won orders, yesterday (count)4241n/a1 fewer in ERP
Won orders, yesterday (total, ex GST)$186,400$181,150n/a$5,250 lower in ERP
Invoices raised, yesterday (count)383838Match
Invoices raised, yesterday (total, inc GST)$171,600$172,700$172,700$1,100 lower in CRM
Payments received, yesterday (total)n/a$94,300$94,300Match
Customers with no external ID3n/an/a3 to fix

The order rows suggest one order worth $5,250 did not reach the ERP. The invoice rows suggest an amount changed after the CRM received it. Totals alone do not prove either cause. Compare the order and invoice IDs and amounts to find the records behind each difference.

Run the check at the same time each day, after the overnight sync and the agreed lag. A scheduled report or a short script can produce the table. A spreadsheet can work while volumes are small.

Investigate each mismatch

When a key or field differs, find the cause before you change anything.

What you findPossible causeWhat to do
Record in source, missing in targetSync failed, a filter excluded it, or the lag has not passedCheck the integration log and search the target. Fix the cause, then resend if the record is still missing.
Record in target, missing in sourceDeleted or cancelled in source, or created by hand in targetConfirm with the field owner. Cancel, void or link it through the system's normal process.
Same record, different valueEdited after sync, a credit or void, or a different tax or rounding ruleCorrect it in the owning system and let the sync update the copy.
Two target records for one source recordA retry or a failed match created a duplicateConfirm the authoritative record and follow the system's approved correction process. Then fix the matching and retry logic that created the duplicate.
Same gap every dayA mapping or rule is wrongRaise it with whoever supports the integration.

Before you resend a record, check whether the destination already holds it. The write may have succeeded while the acknowledgement failed. A resend then creates a duplicate.

Correct data in the owning system. An edit to the copy is overwritten at the next sync, or sent back as a conflict.

Log each mismatch with the record ID, the cause and the fix. After a month, the log shows which causes recur.

Check runs that are stuck or failed

Some processes run as an orchestration. One event starts a run that moves through steps in several systems. A run can stop partway and leave records in some systems but not others.

List these runs in the daily check:

For each compensated run, check that it left no half-finished records. For example, look for a sales order with no invoice, or an open invoice on a cancelled order. Compare the run's step history with the records in each system, using the same record keys.

The guide to choosing an integration approach covers retries, timeouts and undo steps.

Name the people who act on it

A reconciliation without an owner turns into a report nobody reads. Agree these roles before the first run.

ResponsibilityOwner (example)
Reviews the daily check by 10 amNamed finance systems officer, with a named backup
Fixes order and customer gapsSales operations
Fixes invoice and payment gapsAccounts receivable
Fixes faults in the integrationIntegration partner, vendor or developer
Signs off the month-end reconciliationFinancial controller

Agree a threshold that raises a gap with the reviewer, for example one missing record or $100 in total. Agree how fast each type of gap must be fixed.

Protect the data the check uses

A reconciliation needs identifiers, dates, statuses and amounts. It rarely needs names, addresses or contact details.

Test the check before you rely on it

Test it in a sandbox or test environment loaded with a full day of production-sized data. Then introduce errors on purpose.

  1. Stop one order from syncing and confirm the check reports it.
  2. Change an invoice amount after sync and confirm the field comparison finds it.
  3. Remove one order and send another twice, with the same amount. Confirm the key comparison finds both while the totals match.
  4. Cancel an older order and confirm the check picks up the change.
  5. Run the check at peak volume, such as end of month, and time it.

Common questions

How often should I reconcile my CRM and ERP?

It depends on how often records change and how costly a late fix is. Daily suits many businesses that sync orders or invoices. Weekly may be enough for slower records, such as customer details. Reconcile in full at month end.

Can reconciliation be automated?

The comparison can run on a schedule and send an alert. A person still needs to investigate each mismatch and decide on the fix.

Which system is right when they disagree?

The system that owns the field. Agree field ownership before you start, and correct data there.

More on integrations between core business platforms

All guides in this area

How to decide which system owns each field

When your CRM and ERP hold the same customers and orders, agree which system owns each shared field and which identifier links them.

Read the guide: How to decide which system owns each field

Native connector, middleware or custom integration: how to choose

Compare a connector, an integration platform and custom code, decide when a process needs orchestration, then test the shortlist at peak load.

Read the guide: Native connector, middleware or custom integration: how to choose

Browse guides by area

All guides