Am I doing work I’m not billing for?

You finished the project. You handled the extra requests. You answered the weekend emails. But did you ever send an invoice for all of it? Here's how to find unbilled work hiding in your business.

7 min read

The short answer

Probably yes. If you deliver services, handle change orders, or do any kind of custom work, there is almost certainly work you completed but never invoiced. The only way to know is to compare what you did (tracked in your CRM, project tool, or time logs) against what you billed (tracked in your accounting software).


Unbilled work is the quietest way to lose money

You close a $12,000 project. Halfway through, the client asks for two extra deliverables. You say yes because you want to keep them happy. The project wraps up. You send the original invoice for $12,000. Those two extras? They were worth $3,200. You never billed for them and you never will, because by next week you have forgotten they happened.

This is not a billing error. It is a process gap. The work gets done, the client is happy, and you never realize you gave away 27% of the project value for free. Multiply that across every client, every month, and you are looking at tens of thousands in annual revenue that simply evaporates.

The problem is that the systems where work happens (your CRM, project management tool, email) are completely disconnected from the system where billing happens (QuickBooks, Xero). Nobody is cross-referencing them, so nobody catches the gap.


What unbilled work actually looks like in your systems

Unbilled work shows up as a mismatch between activity and invoices. Specifically, you are looking for:

  • CRM deals marked “Closed Won” with no matching invoice. You won the deal in HubSpot or Salesforce, but there is no corresponding invoice in QuickBooks or Xero.
  • Time logged against a client with no invoice for that period. Your team tracked 40 hours on a project last month. The invoice only covers 28.
  • Completed projects or milestones with no final bill. The project is done, the deliverable was sent, but the last invoice never went out because everyone moved on to the next thing.
  • Scope additions that were never quoted or invoiced separately. The client asked for extras during the engagement. You did the work. Nobody created a line item for it.

How to find unbilled work manually (step by step)

This requires pulling data from two or three systems and matching records by hand. Here is the process:

Step 1: Export your closed deals from your CRM

  1. 1
    In HubSpot: go to CRM → Deals

    Filter by “Deal Stage” equals “Closed Won” and set the close date to the last 90 days. Click “Export” in the top-right and choose CSV. You will get a file with deal name, amount, close date, and associated company.

  2. 2
    In Salesforce: go to Reports → Opportunities

    Create or open an Opportunities report filtered to Stage equals “Closed Won” with Close Date in the last 90 days. Click “Export Details” and choose CSV. You need the Opportunity Name, Amount, Close Date, and Account Name columns.

Step 2: Export your invoices from accounting

  1. 3
    In QuickBooks Online: go to Reports → Invoice List

    Set the date range to the same 90-day period. Click “Export to Excel.” You need invoice number, customer name, amount, and date.

  2. 4
    In Xero: go to Business → Invoices

    Filter to the same period, then click “Export.” Match column names: Reference, Contact, Total, and Date.

Step 3: Match deals to invoices in a spreadsheet

  1. 5
    Paste both exports into one spreadsheet

    Put CRM deals in one sheet and invoices in another. Add a “Matched?” column to the deals sheet.

  2. 6
    For each closed deal, look for a matching invoice

    Match by customer name and approximate amount. Customer names often differ between systems (“Acme Corp” vs “Acme Corporation Inc.”), so you will need to eyeball many of them.

  3. 7
    Flag unmatched deals

    Any deal marked “Closed Won” with no corresponding invoice is potentially unbilled work. Total up the amounts. That is money you earned but never collected.

Total time: 45 minutes to 2 hours depending on volume. The matching is tedious because customer names rarely match exactly between your CRM and accounting software.


What it takes to check for unbilled work every month

This is not a one-time exercise. Unbilled work accumulates continuously. To stay on top of it, you would need to:

  • Export from your CRM every month. Pull all closed-won deals for the period.
  • Export from your accounting software every month. Pull all invoices for the same period.
  • Manually match records across inconsistent naming. “Smith Consulting LLC” in HubSpot might be “Smith Consulting” in QuickBooks. You have to catch every variation.
  • Track scope changes separately. Even if the original deal was invoiced, you need a way to flag and bill additional work. Most teams have no system for this.

In practice, almost nobody does this consistently. The friction is too high and the payoff is invisible until someone calculates the total.


Or let Bottomline find your unbilled work automatically

Bottomline connects to your CRM (HubSpot, Salesforce) and your accounting software (QuickBooks, Xero) and runs the match for you. Every month, it compares closed-won deals against issued invoices and flags the gaps.

Unbilled work detected
Acme Corp - Website Redesign
No matching invoice
$8,500
Greenfield LLC - Q1 Retainer
Partial invoice ($2,800 of $4,200)
$4,200
Northstar Inc - Consulting
No matching invoice
$3,600
Total potentially unbilled$16,300
From a real Bottomline report. Deals are matched to invoices automatically using company name, amount, and date proximity.

No spreadsheets. No manual name matching. No exports. Bottomline handles the messy identity matching (“Acme Corp” vs “Acme Corporation”) and surfaces only the gaps that need your attention. You review the list, send the invoices, and collect the money you already earned.

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