All insightsFinance & Cash Flow

Unbilled Work: How Much Completed Work Never Becomes an Invoice?

Extra work, parts and call-outs often slip between field, inventory and billing systems. Here is how to measure unbilled work and close the gap.

The Ninjaz Group8 min read

Every finance team knows the number on the invoice. Far fewer know the number that should have been on it. Unbilled work is the labor, parts, travel and extras a business completes for a customer and never charges for. The customer did not dispute it. Nobody decided to waive it. It simply never became a line on an invoice.

That is revenue leakage in its most ordinary form. A technician swaps in an extra fitting and moves to the next job. A project manager agrees to a small change on a call. A parts counter hands over an item against a work order that closed an hour earlier. Each gap looks trivial. Across many locations and thousands of jobs, they add up to a figure that rarely appears in any report, because it never reached the billing system.

This article covers the usual causes of missed billing, how to find revenue leakage in your own operation, what it costs beyond the lost invoice, and the steps that close it. It then explains how The Ninjaz Group approaches the problem.

What Unbilled Work Actually Looks Like

Unbilled work takes several forms, and it helps to separate them because each one leaks in a different place.

  • Extra work: tasks added on site beyond the quote or work order, such as an additional hour, a second visit, or a repair discovered while doing something else.
  • Parts and materials: items issued from a warehouse or van that are never matched to a job, or matched but never priced.
  • Call-outs and travel: emergency visits, return trips, diagnostic time and mileage that sit outside a contract but get treated as part of "good service."
  • Out-of-scope requests: changes agreed by phone, email or chat that never become a change order.
  • Entitlement errors: usage above plan, warranties treated as active after they expire, and recurring fees that stopped when a contract renewed.

The pattern is consistent. In every case the work is real, and it is recorded somewhere: a time entry, a stock movement, a chat message, a call log. What is missing is the connection between that record and a billable line. Unbilled work is rarely a failure to do the job or to record it. It is a failure to carry the record across a boundary between systems.

Unbilled Revenue Causes: Six Places Work Goes Missing

Most unbilled revenue causes fall into six groups.

Capture happens away from billing. The technician records work in a field service app, the project team logs hours in a time tracker, and invoices are produced in the ERP or billing system. Anything not explicitly pushed across stays behind.

Approval is informal. A customer says "go ahead" to a technician on site. Nothing is written down, so when the invoice is prepared, nobody can confirm the work was authorized, and billing staff would rather skip a line than start an argument.

Rules live in people's heads. Which customers get free call-outs, which rate applies after hours, which parts are covered by warranty. If those rules are not in a system, they are applied inconsistently or not at all.

Timing breaks the flow. Work completes after an invoice run, a project closes before final hours are entered, or a job is invoiced at the quoted amount while later changes sit in a different record.

Re-keying introduces drops. Every time someone copies hours, part numbers or notes from one system into another, some of it gets lost or changed.

No one owns the gap. Operations assumes finance will catch it. Finance bills what it is given. The space between the two belongs to nobody, so nobody measures it.

How Fragmented Systems Create Missed Billing

Consider a group with twelve locations that services equipment for commercial customers. Dispatch and technician visits run in a field service tool. Larger installations are tracked in a separate project and time-tracking tool. Parts sit in an inventory system that each location updates on its own schedule. Customer contracts and the promises made during sales live in the CRM. Invoices are produced from the ERP or a dedicated billing system.

Now follow one job. A customer on a maintenance contract reports a fault. The technician arrives, finds the fault is worse than reported, and needs two more hours and a replacement pump. The customer agrees on the spot. The technician pulls the pump from the van, logs the hours in the field service app, and closes the visit.

Here is where it leaks. The pump was issued in the inventory system against the location, not the work order, so billing never sees it. The extra hours are in the field service tool, but the billing system only imports the contracted visit. The CRM shows the contract covers labor for standard faults, but nothing flags that this fault falls outside that definition. The customer's verbal approval is nowhere. The invoice goes out for the standard visit, or not at all if the contract is a flat fee.

Nothing here is dramatic. Every system did its job. The failure is that five systems each hold part of the story and none assembles it. Multiply that by every technician, every location and every week, and the gap becomes structural rather than occasional. Project work behaves the same way: hours land in the time tracker, change requests land in email, and the final invoice reflects the original milestone schedule.

How to Find Revenue Leakage in Your Own Operation

You do not need a transformation program to get a first estimate. You need a few reconciliations that most companies have never run. Here is a practical sequence.

  1. Pick a sample. Choose a recent month and two or three locations or service lines, including your busiest and your least consistent.
  2. List completed work. Export closed work orders, approved timesheets, completed visits and stock issues from the field service tool, time tracker and inventory system.
  3. List billed work. Export invoice lines from the ERP or billing system for the same period.
  4. Match them. Link each completed job to its invoice lines by work order, customer and date. Flag jobs with no invoice, jobs where billed hours are lower than logged hours, and stock issues with no matching charge.
  5. Classify each gap. Was it extra work, parts, a call-out, an out-of-scope request or an entitlement error? Was it genuinely free under the contract, or missed?
  6. Value it and trace it. Price the gaps at your standard rates, then trace a handful back to the point where the record stopped traveling. That is your root cause.

Expect the matching step to be messy. Identifiers will not line up, and you will probably do part of it by hand. That mess is itself a finding: if a person cannot easily match a job to its invoice, no process can either. Present the result as a range, separating confirmed leakage from items needing review. Do not extrapolate it into a company-wide figure until you have repeated the exercise across more sites.

What Unbilled Work Really Costs

The lost invoice is the visible cost. The others are quieter, and in combination often larger.

Time. Staff chase missing details after the fact, reconstructing jobs from texts and photos. Billing teams spend days on corrections that would have taken minutes at the time of work.

Inventory. Parts leave stock without a charge, so counts drift, reorder points misfire, and shrinkage gets blamed on theft or error when the real cause is an unbilled issue.

Lost deals and bad pricing. If extra work is never billed, it never appears in margin reporting. Jobs look more profitable than they are, quotes are priced on false history, and renewals are negotiated without knowing how much free service a customer consumes.

Mistakes. Inconsistent rules mean similar customers are treated differently. Some are charged and some are not, and the ones who are charged notice.

Burnout. Technicians and project managers do the extra work, then are asked to explain paperwork weeks later. Billing staff absorb the pressure of month-end clean-up.

Customer frustration. Late corrective invoices arrive months after the work, with charges the customer did not expect. That erodes trust far more than a clear charge at the time would have.

Closing the Gap: What to Change

Detection is a one-time exercise. Closing the gap means changing how records move. These steps apply whether or not you change any software.

Make the work order the spine. Every labor entry, part issue, travel charge and approval should reference one work order or project code. If it cannot, it should be blocked or flagged.

Capture approval at the source. Give technicians and project managers a simple way to record a customer's agreement to extra work, with a name, time and note, attached to the job.

Put pricing rules in a system. Rate cards, contract entitlements and warranty status should be data that billing reads, not knowledge that people carry.

Reconcile on a schedule. Run the matching exercise from the diagnostic weekly, automatically where possible. Exceptions go to a named owner with a deadline.

Bill from events, not from month-end memory. When a job closes, the system should assemble the billable lines and ask someone to confirm them, rather than waiting for the invoice run.

Measure the leak as a KPI. Track unbilled work as a share of completed work by location, service line and team, and review it alongside revenue.

How The Ninjaz Group Approaches Unbilled Work

The Ninjaz Group is a managed-services partner for multi-location enterprises, and unbilled work suits its engagement model because the problem lives between systems rather than inside one.

It starts with a Blueprint: mapping the operation to find where work is done twice, data goes stale or money leaks. For unbilled work, that means tracing a job from request to cash across your field service tools, time tracking, ERP, inventory, CRM and billing system, and showing where the record stops. You keep the map either way.

Build & Link follows, with no rip-and-replace. The software you already pay for stays. Through Managed Link, the integration layer Ninjaz builds, owns and maintains, connectors carry work orders, time, stock movements and contract terms between those systems.

The Ninjaz Operating Platform is the hub. Its unified data layer keeps one record per customer, asset and order, so a part issued, an hour logged and a contract term can be read against the same job. Workflow automations can flag a closed job with no billable lines, or a stock issue with no charge. The Command Center can be set up to show unbilled work by location as a live KPI with alerts, while roles and an audit trail record who approved what. Team chat boards tied to records keep an out-of-scope agreement attached to the job instead of buried in a thread.

Then comes Operate. Managed Business Operations keeps the integrations and day-to-day running in place after go-live. To be clear, no platform fixes this alone. Pricing rules still need decisions, and people still need to confirm charges. What changes is that the information arrives together.

Start Measuring What You Have Already Earned

Run the diagnostic above on one service line this month. Even a rough result tells you whether you are looking at a rounding error or a structural gap.

If you want help mapping where your own records stop traveling, book a consultation and we will talk through your systems and processes. If you would rather see how the pieces fit together first, take a look at the platform demo.