Are there CRM deals that I never invoiced?

Your CRM says the deal is closed. Your accounting software has no record of the invoice. This gap is more common than you think, and it is costing you real money. Here's how to find every instance.

7 min read

The short answer

Export your closed-won deals and your invoice list, then match them. Every CRM deal marked “Closed Won” should have a corresponding invoice in QuickBooks or Xero. The ones that do not are money you earned and never collected. This is the most direct CRM-to-accounting reconciliation you can do.


Your CRM and accounting software live in separate worlds

In theory, every closed deal triggers an invoice. In practice, the CRM and accounting software are separate systems managed by different people with different workflows. The sales rep marks the deal closed. The bookkeeper sends invoices from QuickBooks. Between those two steps, deals fall through.

Maybe the deal details were not communicated clearly. Maybe the deal closed on a Friday afternoon and Monday brought new priorities. Maybe the customer's billing address was not in the CRM, so the bookkeeper put it aside and forgot. The reasons vary. The result is always the same: work was done, the deal was won, and nobody sent a bill.

This problem scales with volume. If you close 5 deals a month, you probably catch everything. If you close 20 or 30, the chances of a deal slipping through increase with every handoff.


The specific match you need to verify for every deal

For each closed-won deal in your CRM, you need to confirm that:

  • An invoice exists for that customer. The customer or company name on the deal matches a customer in your accounting software.
  • The invoice amount is close to the deal amount. Exact matches are ideal, but amounts within 10-15% are acceptable (scope may have adjusted during delivery).
  • The invoice date is within a reasonable window of the close date. An invoice sent 2 weeks after the deal closed is normal. An invoice 3 months later (or never) is a gap.

How to match CRM deals to invoices (step by step)

Step 1: Export deals from your CRM

  1. 1
    In HubSpot: CRM → Deals → filter and export

    Go to CRM → Deals. Filter by Deal Stage equals “Closed Won” and Close Date in the last 90 days (or 6 months for a deeper audit). Click “Export” and choose CSV. Make sure the export includes Deal Name, Amount, Close Date, and Associated Company Name.

  2. 2
    In Salesforce: Reports → Closed Won Opportunities

    Create a report on Opportunities where Stage equals “Closed Won.” Set Close Date to the last 90 days or longer. Include Opportunity Name, Amount, Close Date, and Account Name. Click “Export Details” as CSV.

Step 2: Export invoices from accounting

  1. 3
    In QuickBooks Online: Reports → Invoice List

    Go to Reports and search for “Invoice List.” Set the date range to cover the same period as your CRM export (plus a few extra weeks to catch delayed invoicing). Export to Excel. You need Customer Name, Invoice Amount, and Invoice Date.

  2. 4
    In Xero: Business → Invoices → export

    Go to Business → Invoices. Filter by date. Export to CSV. The columns you need: Contact Name, Total, and Invoice Date.

Step 3: Run the match

  1. 5
    Set up a matching spreadsheet

    Paste CRM deals in Sheet 1 and invoices in Sheet 2. Add a “Match Status” column to the deals sheet. For each deal, search the invoice list for a matching customer name and similar amount.

  2. 6
    Handle company name variations

    This is the hardest part. “ABC Solutions” in HubSpot might be “ABC Solutions LLC” in QuickBooks. “Smith & Co.” in Salesforce might be “Smith and Company” in Xero. You will need to review manually or use approximate text matching formulas.

  3. 7
    Total unmatched deals

    Every deal with “No Match” is a potential uninvoiced deal. Sum the amounts. That is revenue sitting uncollected.

Total time: 1 to 2 hours for a 90-day window. The majority of the time goes to name matching. If you extend to 6 months or a year, double the time.


New deals close every month, and the gap reopens

Even if you clean up every uninvoiced deal today, next month brings new deals, new handoffs, and new opportunities for gaps. The only sustainable solution is either a bulletproof process (where someone manually verifies every deal was invoiced) or an automated check that does the matching for you.

Process solutions work until someone is on vacation, or busy, or the deal details are unclear, or the customer name does not match. Automated matching works regardless of who is in the office.


Or let Bottomline match every CRM deal to an invoice

Bottomline connects to your CRM (HubSpot, Salesforce) and accounting software (QuickBooks, Xero). Every month, it compares every closed-won deal against your invoice records. It handles fuzzy company name matching, amount tolerance, and date proximity automatically.

CRM deals without matching invoices
24
Deals closed (90 days)
21
Matched to invoices
3
No invoice found
Hillcrest Partners - Advisory Retainer
Closed Mar 12
$6,400
Beacon Health - Phase 3 Buildout
Closed Feb 28
$9,200
Coastal Media - Annual Contract
Closed Feb 15
$14,400
Total uninvoiced$30,000
From a real Bottomline report. Every closed-won deal is automatically matched against your invoice records using company name, amount, and date.

No exports. No spreadsheets. No fuzzy VLOOKUP formulas. Bottomline handles the identity matching across systems and shows you exactly which deals were never billed. You review the list, send the invoices, and collect the money.

Get your answer. Every month, automatically.

Connect your accounts in 5 minutes. Your first report arrives within 24 hours.

Works with QuickBooks, Stripe, HubSpot, Google Ads, and more
© 2026 Bottomline