Ask most owner-operators how much they billed last month and they'll quote you a number off the accounting system. Ask them how much work their crews actually performed last month and you'll get a pause. That pause is the problem. The two numbers should match. In a lot of shops, they quietly don't — and the difference walks out the door every single billing cycle.
This isn't about your bookkeeper being sloppy. It's structural. A field ticket is created in one place (the field, often on paper or in a ticketing app), the invoice is created in another (QuickBooks or your accounting package), and payroll is calculated from a third source (timesheets or LEMS). Three systems, three data entry points, no referee checking that they agree. When they drift apart, revenue falls into the cracks between them.
Where the money actually leaks
In service companies that run tickets-to-invoice by hand, leaked revenue almost always comes from the same handful of places:
- Tickets that never became invoices. A ticket gets written in the field, the paper gets lost, damaged, or buried in a truck, and nobody in the office ever keys it. The work was done. The customer was never charged.
- Tickets billed at the wrong rate. Your rate table changed, but the person keying the invoice used last quarter's number. Or a unit count got fat-fingered. Small per-ticket errors, multiplied across hundreds of tickets, add up to real money.
- Invoices rejected for a missing AFE, lease, or cost center. The operator's AP system kicks it back. It goes in a pile to "fix later." Later is 60 days later, and sometimes never.
- Unsigned or disputed tickets. No signature, no approval, so it sits. The crew remembers doing the work; six weeks on, nobody can prove it.
- Change orders and standby that never made it onto a ticket. The crew waited four hours on location. That standby time is billable. If it didn't get written down, it didn't get billed.
Every one of these is a data-integrity problem wearing a revenue costume.
A self-audit you can run this week
You don't need new software to find out if this is happening to you. You need to put three lists side by side and look for the gaps. Here's the exact check I'd run for an owner who wanted proof before spending a dollar.
The 5-step unbilled-revenue audit
- Pull every field ticket from one busy month. All of them — paper, app, whiteboard, whatever. Count them. That's your work performed number.
- Pull every invoice you sent for that same month's work. Match them ticket-for-ticket. The tickets with no matching invoice line are your first leak. Add up their value.
- Spot-check 20 invoices against their tickets on rate and quantity. Right hours? Right units? Right rate-table version? Standby and mileage included? Note every mismatch — then assume that error rate runs across the whole pile.
- List every invoice rejected or short-paid by an operator in the last 90 days. Sort by reason: missing AFE, missing lease, no signature, pricing dispute. That pile is recoverable revenue sitting in limbo.
- Compare crew hours on payroll to billable hours on tickets for that month. If you paid for 1,000 field hours and only billed 900, where did the other 100 go? Some is legitimately non-billable. Some isn't.
If you do this and the lists line up perfectly, congratulations — you have a tight operation and you can stop reading. Most owners who run this honestly find the opposite: a stack of unmatched tickets, a 3-5% rate-entry error, and a rejected-invoice pile nobody owns.
What the gap is worth
Put rough numbers on it. The math is sobering even when you're conservative:
Notice this isn't margin you have to go win in a competitive bid. It's revenue you already earned. You did the work. You paid the crew. The only thing missing is the part where you got paid for it.
Why it keeps happening
Because nothing is checking. The field-ticket system doesn't know what's in QuickBooks. QuickBooks doesn't know what's on the tickets. Payroll doesn't know either. Reconciliation — the act of making the three agree — happens manually, in spreadsheets, days or weeks after the work, by someone who's already behind. By the time a gap surfaces, the ticket is cold and the operator's billing window may be closed.
Ten years ago, fixing this meant a six-figure custom software project. That's no longer true. With solid database design, a few targeted integrations, and modern AI-assisted development, the three systems can be tied together and checked against each other automatically — nightly — without ripping out the tools you already run.
Once that layer exists, the leaks close on their own: every ticket gets matched to an invoice, missing AFEs and signatures get caught before billing, rate errors get flagged automatically, and you get one screen that shows unbilled tickets, rejected invoices, and true margin per job — the day you look, not at quarter-end.
Want to know your real number?
Run the audit above yourself, or have us do it with you. The NeonSky Business Systems Assessment maps exactly where your tickets, accounting, and payroll disagree — and what that gap is worth.
See O&G Data Systems → Book a Systems Assessment