Enterprise DNA

Omni by Enterprise DNA

Enterprise DNA Resources

Step-by-step how-tos. Practical AI operating-system thinking for owners, operators, and teams doing real work.

220k+

Data professionals

Omni

AI agents and apps

Audit

Map the manual work

Guide Intermediate Omni Ops

Stop Losing Money on Unbilled Trades Service Work

Techs finish extra work in the field that never makes it onto the invoice. Here's how AI closes that gap and recovers real revenue.

Sam McKay |
Stop Losing Money on Unbilled Trades Service Work

A tech shows up for a $400 water heater swap. He notices a corroded shutoff valve, replaces it while he’s there, hauls away an extra 40 gallons of old debris, and spends 25 minutes on a permit call that wasn’t scoped. The invoice that goes out that afternoon still says $400.

This happens every week in plumbing, HVAC, electrical, and roofing shops doing $1M to $25M in revenue. Not because your techs are careless. Because the system for capturing what actually happened on a job depends on someone remembering to write it down, and then someone else remembering to bill for it. That chain breaks constantly, and it breaks quietly. Nobody flags it. The job just closes at the wrong number.

The gap between what happened and what got billed

Most trades businesses run on a version of this workflow. Tech gets dispatched, does the job, jots a few lines on a work order or in a mobile app, snaps a photo or two if the software prompts them, and moves to the next call. Materials get pulled from the truck stock or a supply run. Back at the office, someone keys the invoice off whatever notes exist, usually the original scope from dispatch, not the actual work performed.

The problem is that field notes and billing systems rarely talk to each other in a rigorous way. A tech’s note might say “replaced valve, extra disposal” but the invoicing person either doesn’t see it, doesn’t know how to price it, or is moving too fast to chase it down. Multiply that across 15 to 40 jobs a week and you’ve got a steady drip of unbilled labor, unbilled materials, and unbilled trip charges that never show up as a line item anywhere.

For a shop this size, we typically see this kind of leakage land somewhere between $50,000 and $200,000 a year. That’s not one dramatic mistake. That’s a hundred small ones, each one easy to wave off, all of them adding up to a number that would change your hiring plan or your equipment budget if you got it back.

Where the leakage actually hides

A few patterns show up again and again when we look at how trades shops lose unbilled revenue.

Extra materials pulled but not logged. A tech grabs a second thermostat, a coupling, an extra 10 feet of wire, from truck stock. It’s not on the original work order, so it never makes it to the invoice. Truck stock shrinks, margin shrinks with it, and nobody notices until the quarterly parts count comes up short.

Scope creep with no price attached. The job was supposed to be a diagnostic. It turned into a diagnostic plus a repair plus a part swap. The tech does the right thing for the customer and fixes it. The billing system never catches up.

Disposal, permit, and travel add-ons. Hauling an old unit, running a permit, driving 45 minutes outside the normal service radius. These carry real cost and are usually billable under your own pricing rules, but they depend on someone remembering to add the line.

Time on site versus time invoiced. A job billed as a flat-rate 2-hour call that actually took 3.5 hours because of an access issue or a complication. If your pricing has any labor-based component built in, that extra 90 minutes is real money that never gets captured.

None of this is anyone trying to shortchange the business. It’s a documentation and reconciliation problem, and it’s exactly the kind of repetitive, detail-heavy work that AI is good at closing.

What an AI agent doing this looks like in practice

The fix isn’t asking your techs to fill out longer paperwork. That fails every time, because they’re busy and paperwork is the first thing that gets skipped under time pressure. The fix is building a system that reconciles what happened against what got billed, automatically, using the information that’s already being generated.

Here’s the mechanics of how this works when we build it for a trades business inside Omni Ops.

Step one: pull every source of job truth. The agent connects to your field service or dispatch software, your invoicing system, and wherever your techs log notes and photos, whether that’s a mobile app, a group chat, or a paper ticket that gets scanned. It treats all of it as input.

Step two: cross-reference job notes and photos against the invoice. If a tech’s note mentions a part, a disposal fee, or extra time, and that item doesn’t appear on the invoice that closed the job, the agent flags it. Photos help here too. A photo of a new valve or an extra haul-away bag is evidence the agent can match against a parts list, even if the tech never typed the word “valve” anywhere.

Step three: check materials against what left the truck. If your inventory or truck stock system shows parts pulled for a job number that don’t show up on the invoice, that’s a second, independent signal pointing at the same gap. Two signals agreeing on the same job is a strong flag, not a guess.

Step four: surface it for a human, fast. The agent doesn’t auto-bill your customers. It builds a daily or weekly list of jobs with a likely gap, the specific item it thinks is missing, and the dollar estimate attached to it. Your office manager or bookkeeper reviews the list in minutes and either approves a supplemental invoice or dismisses the flag with a reason. Over time the agent learns which flags your team confirms and which ones it dismisses, and it gets sharper.

Step five: close the loop weekly. Instead of a vague sense that “we’re probably leaving some money on the table,” you get an actual number every week. Some weeks it’s $600. Some weeks, after a run of complex jobs, it’s $4,000. Either way, it’s visible, and visible problems get fixed. Invisible ones don’t.

This is the same underlying approach we use for the 24/7 Dispatch Voice Agent, which answers every inbound call, qualifies the job, and books it directly into your dispatch tool so nothing lands in a voicemail box nobody checks. It’s built on the same principle as the Estimate Follow-Up Agent, which tracks every estimate you send and follows up on day 2, day 5, and day 14 with messaging tuned to the trade and the job size, because a $12,000 re-pipe estimate needs a different follow-up cadence than a $300 drain cleaning quote. Follow-up alone typically converts 15% to 25% of estimates that would otherwise go stale and get forgotten. The unbilled work agent works the same way. It doesn’t replace judgment, it removes the manual scanning and remembering that judgment depends on.

The dollar math, made specific

Take a mid-size HVAC shop doing $6M a year with 12 techs in the field. If each tech misses an average of $40 in unbilled materials or labor per week, and that’s a conservative number based on what we typically see, that’s $480 a week across the crew, roughly $25,000 a year. That’s before you count the bigger misses, the scope-creep jobs and disposal fees that run into hundreds of dollars each.

Compare that to what missed calls and slow follow-up already cost the same business. A missed service call can run $500 to $3,000 depending on the job type, and most shops lose several a week when the owner or a single admin is glued to the phone trying to dispatch, source parts, and answer calls at the same time. Add up dispatch overhead, often 20-plus hours a week of owner or admin time spent juggling the phone instead of running the business, and you start to see why the $50,000 to $200,000 annual leakage band for trades businesses this size isn’t an exaggeration. It’s usually an undercount, because most owners have only ever measured the parts of the problem they could see.

Trades shops in the $1M-$25M range typically leave $50,000 to $200,000 a year on the table across missed calls, slow follow-up, and unbilled field work, based on patterns we see across the Omni network.

This is why we built the Review and Reactivation Agent alongside the dispatch and billing pieces. It asks every happy customer for a review the day after the job closes, while the experience is still fresh, and it reactivates customers automatically at the right service interval, whether that’s a 6-month HVAC tune-up or an annual electrical safety check. Recovering unbilled work fixes what already happened. Reactivation and reviews build the pipeline that keeps new jobs coming in. Neither one works well without the other.

Where to start if you haven’t measured this yet

If you’ve never run a formal reconciliation between field notes, materials pulled, and what got invoiced, you likely don’t have a real number for how much this is costing you. Most owners we talk to have a gut feeling, “we’re probably leaving something on the table,” but no actual figure. That gut feeling is usually low.

A practical first step, even before you touch any software, is tightening up what happens with your after-hours and overflow calls, since that’s the most visible leak and the easiest to quantify. We put together a worksheet for exactly that. The After-Hours Call Recovery Plan for Trades walks through how to audit your current after-hours coverage, estimate what missed calls are actually costing you, and set up a basic recovery process before you invest in anything more advanced. You can download it here and run it against your own call logs this week.

But calls are only one piece. If you want a full picture, including what’s happening between field notes and invoices, the fastest way to get real numbers is a direct audit of your operation, not another generic software demo.

What an Omni Audit actually gives you

We run a 60-minute session we call the Omni Audit. No slide deck, no sales pitch dressed up as a workshop. We look at your actual dispatch data, your call logs if you have them, and a sample of recent job files, notes, materials, and invoices side by side. From that, you get three things: a dollar estimate of what unbilled work and missed calls are costing you annually, a short list of the two or three leaks worth fixing first, and a rough build plan for what an agent addressing those leaks would actually look like inside your existing tools.

You can see Omni for trades businesses to get a sense of what we look at before you book anything. Most owners walk away from the audit with a number they didn’t have before, and a clear view of whether the fix is a quick process change or something worth building an agent for.

If you’re ready to get that number for your own business, book a 60-min Omni Audit and bring a week of job files. We’ll show you exactly where the gap is between what your crew did and what got billed for it.

The real cost of waiting

Every month you run without reconciling field work against invoices is a month where the same leak keeps draining money, quietly, in amounts too small to notice individually and too large to ignore in total. The businesses that fix this aren’t necessarily the ones with the most sophisticated software. They’re the ones that decided to actually measure the gap instead of guessing at it.

If you’ve read this far, you already suspect there’s a number in your business you haven’t looked at closely enough. There usually is. You can explore more of how this works across dispatch, follow-up, and reactivation in our guides library, or browse the broader Omni platform to see how the pieces fit together.

Otherwise, the more direct route is the audit itself. You can check out the trades audit page or go ahead and book your Omni Audit now. Sixty minutes, real numbers from your own jobs, no deck required.