Guides

CRM and accounting revenue don't match: which is right?

CRM and accounting revenue don't match because they record different events. Which system is the source of truth for revenue, and how to find the gap fast.

Three document cards headed CRM, Ledger and Bank, each showing a different total for the same period.

CRM and accounting revenue don’t match because they record different events. The CRM counts deals agreed, at the value a salesperson entered. The ledger counts revenue invoiced or earned, at the value actually billed. The bank counts cash received. None is wrong. Each is the source of truth for one question, and the gap between them lives in three handoffs.

Your CRM says you closed $340,000 this quarter. Your accounting system says revenue was $291,000. Your bank balance suggests something else entirely. Nobody is lying and nobody has made an error. The three systems are answering three different questions, and the business has been treating their answers as one number.

Which system is the source of truth for revenue?

No system is the source of truth for everything. Each is authoritative inside its own boundary and unreliable outside it.

SystemAuthoritative forRecords the momentBlind to
CRM (HubSpot, Salesforce)Revenue committed but not yet billedA customer says yesDiscounts after close, invoicing, payment
Ledger (QuickBooks, Xero)Revenue earned, receivables, payablesAn invoice is raised or revenue is earnedDeals nobody told finance about
BankCash that exists right nowMoney landsWhat any of it is for

The bank knows what money is present, and nothing else. The ledger knows revenue, receivables and margin, but only for events someone recorded, in the period they chose. The CRM knows the pipeline and the moment a customer said yes. It is the only system that knows about revenue that hasn’t happened yet.

The trouble starts when a question crosses a boundary, such as how did we actually do this quarter, and gets three answers.

The three gaps, and what lives in each

Between the three systems sit three handoffs. Every discrepancy you will ever chase lives in one of them.

Gap 1 · Won in the CRM, never invoiced

A deal is marked closed-won and nobody raises the invoice. The salesperson considers it done; finance can’t invoice something it was never told about.

This is revenue leakage in its purest form. MGI Research defines billing leakage as services delivered or goods shipped but not invoiced within standard billing cycles, and puts revenue leakage overall at at least three to five percent of every company’s revenue (December 2025).

The subtler version: the deal is invoiced at a different value than the CRM records. A discount agreed on the call, a scope reduction, a rounding. The CRM keeps the original figure forever.

Gap 2 · Invoiced, never paid

The ledger says revenue. The bank says nothing arrived.

Some of this is just terms: a thirty-day invoice raised on the 28th is early, not late. But this gap also hides the invoice sent to the wrong email address, or stuck in an approval queue since June. Both look identical as receivables; only the age of the receivable tells them apart. And if nobody is chasing, an overdue invoice does not announce itself.

Gap 3 · Paid, never allocated

Money is in the bank, and the ledger still shows the invoice as open.

A payment arrived with no reference, or as one batch settling eleven invoices, and nobody did the cash application. Receivables are overstated, and somebody is about to chase a customer who has already paid. That damages the relationship with customers who did exactly what you asked. The mirror image is covered in you paid, they say it never arrived; the matching mechanics in match one payment to multiple invoices in Xero.

How to find where the discrepancy comes from

Don’t compare totals. Two numbers that differ tell you only that they differ. Reconcile the transitions instead, in this order:

  1. Every deal marked won in the period → does it have an invoice? List the exceptions. That is Gap 1, usually the largest and most surprising.
  2. Every invoice raised → does it have a payment, or a live receivable within terms? Anything outside terms with no chase logged is Gap 2.
  3. Every payment received → is it allocated to an invoice? Unallocated cash is Gap 3.

Each test takes an hour at most. When the named components add up to the difference, you no longer have a mystery; you have a work list. If they don’t add up, the fourth problem is almost always duplicates or misdated entries inside the ledger itself.

Worked example: bridging $340,000 to $291,000

Say the quarter above breaks down like this. The CRM-to-ledger gap is $49,000, and test 1 explains all of it.

Bridge itemAmountRunning total
CRM closed-won this quarter$340,000$340,000
Two deals won, never invoiced−$31,000$309,000
Discounts and scope cuts after close−$18,000$291,000
Ledger revenue$291,000

Now run tests 2 and 3 against the bank. Say $38,000 of the $291,000 is within terms and $9,000 is past due with no chase logged. A further $12,000 has arrived but is unallocated, so the ledger still shows it owed. Every dollar now has a name, and three of those names are jobs someone can do this week.

Is it normal for the systems never to agree?

Some difference is normal and permanent. The systems measure at different moments, so timing alone guarantees a gap at any given date, as with deferred revenue billed ahead of delivery.

What is not normal is a gap nobody can explain or size. The test is whether you can name its components and whether they account for the whole variance. A CRM total that matched the ledger exactly would be the surprising outcome.

Why the gaps exist at all

Not because anyone is careless. Because the link between systems is a person.

A salesperson tells finance about a deal. Someone types the invoice. Someone else decides which invoice a deposit settles. Each step re-enters information that already exists in a system next door, and every re-entry is a chance to diverge.

The inputs are rarely clean either. In Validity’s 2025 survey of 602 CRM users, 76% said less than half of their organization’s CRM data is accurate and complete.

The problem scales badly. At twenty deals a quarter one person holds the whole picture and catches the exceptions. At two hundred, nobody does. Adding a fourth system rarely helps: a dashboard reading all three displays the same disagreement in one place. That shows the size of the problem and does nothing about its cause.

The test worth running this month

Take the last completed month and answer three questions:

  • How much was marked won and never invoiced?
  • How much was invoiced and is outside terms with no chase logged?
  • How much cash arrived and is not allocated to anything?

If you can’t answer within a working day, that is the finding: the numbers aren’t readily knowable. Most businesses find the first number is the biggest. Work that was done, agreed and never billed is the purest lost margin there is.

Closing the handoffs instead of adding a fourth system

Fynex operates in the space between the three systems rather than adding a fourth opinion. A closed deal becomes an invoice without someone remembering to raise it. An unpaid invoice escalates without someone remembering to chase it. A payment arrives carrying the invoice it settles, so allocation isn’t a monthly guess against a bank statement. That is the reconciliation layer: every payment booked back to the ledger, exceptions flagged with the reason attached.

The three gaps stop being places where work falls through and become states you can see, each with a number attached, continuously. The systems keep doing what they are good at. The handoffs between them stop depending on a person remembering.

FAQ

Frequently asked questions

Because they measure different events. A CRM records the moment a deal was agreed, valued at what the salesperson entered. An accounting system records the moment an invoice was raised or revenue was earned, valued at what was actually billed. Every discount applied after the deal closed, every project that shrank in scope, and every deal marked won that never got invoiced shows up as a gap between the two.
The accounting ledger, but only for revenue that has been earned and recorded. No single system is authoritative for everything: the bank is authoritative for cash that exists, the ledger for what has been earned and owed, and the CRM for what has been committed but not yet billed. Naming one system the source of truth for all three questions is what hides the gap.
Reconcile the transitions rather than the totals. Take deals marked won in the period and check each has an invoice. Take invoices raised and check each has a payment or a live receivable within terms. Take payments received and check each is allocated to an invoice. The gap always lives in one of those three handoffs, and testing them in order finds it within a working day.
Some difference is normal and permanent, because the systems measure at different moments and timing alone guarantees a gap at any given date. What is not normal is a gap nobody can explain or size. The working test is whether you can name the components of the difference, such as unbilled won deals, unpaid invoices and unallocated payments, and whether they account for the whole variance.
A sync helps with re-keying, but it does not close the gaps on its own. It copies records between systems; it does not decide that a won deal needs an invoice, chase one that went unpaid, or work out which invoice an unreferenced payment settles. Those handoffs are where the difference lives, so they need an owner, whether that is a person, a rule or an agent.
Book a demo