Before: bookkeeper matching packing slips; after: email flagging a $142 PRV on a Ferguson bill missing from the invoice.

Article···6 min

EverydayA story, same factsTechnicalThe deeper cut

Automations

Unbilled materials job costing for plumbers: catch supply-house parts missing from the invoice

When a supply-house bill arrives, an automation flags parts missing from the customer invoice so materials you paid for get billed.

The short answer

Parts you bought for a job but never put on the customer's invoice now get caught before the invoice goes out. When a supply-house bill arrives, a scheduled AI step matches its lines to the job's customer invoice and emails you only the mismatches: the PRV valve on the Ferguson bill that never made it onto invoice #3391. Nobody spot-checks packing slips once a month, and materials you already paid for stop leaving as free work.

What it costs you now

Here is how it usually goes. The tech grabs a pressure-reducing valve and a couple of fittings on the shop account at Ferguson. The ticket goes on the van. Back at the office, invoicing starts from the job ticket or the original quote. The valve is on the supply bill. It is not on the invoice. Nobody matches the two unless the bookkeeper has a quiet afternoon.

Someone is supposed to catch it:

  • Example: the bookkeeper spends about 2 hours once a month lining up supply-house statements against closed job invoices.
  • Example: when that check slips, 4 missed parts a month at about $100 each walk out the door: $400 a month, about $4,800 a year, of materials you paid for and never billed.
  • Example: the customer also learns extras are free, so the next "while you're here" request gets bigger.

Q4 makes it worse. Supply houses change prices, year-end job costing reviews start, and December rush jobs leave the messiest tickets. That is when an unbilled PRV is most likely.

Busy weeks hide the miss. When three service calls stack after lunch, the office invoices from the quote and the packing slip waits in a pile. By Friday the pile is a statement. By month end the statement is "close enough." That is the exact habit this watcher breaks: it checks the bill the day it arrives, not when someone has time.

What runs by itself

The job is a watcher on two feeds you already have:

  • Supplier bills landing in QuickBooks or Xero (or as PDFs in the office inbox) with job numbers or addresses on the lines.
  • Customer invoices for those same jobs in Jobber, ServiceTitan, or your accounting system.

When a new supplier bill is entered (or every weekday at 4:00 for bills that arrived that day), it decides one thing: is there a material line on the bill that has no matching line on the customer's invoice for that job? If yes, you get one short note with the part, the amount, the bill number and the invoice number. If everything matches, silence.

It never changes an invoice on its own. It never pays a supplier bill. It only turns "I should have checked that packing slip" into a flag you act on.

This runs as a Zapier or Make AI step on new QuickBooks or Xero bills, comparing extracted lines to the linked job invoice, or as a scheduled ChatGPT task over bill PDFs in Drive and a job export. We can set this up for you inside the tools you already use.

For how this differs from pasting tickets into a chat window every night, see automation vs a chatbot.

Example: what lands in your inbox

Illustrative sample of the afternoon email:

Unbilled materials (3):
Job 8812 / inv #3391: PRV valve $142 on Ferguson #77812, not on invoice.
Job 8820 / inv #3402: 1" ball valve $38 + dielectric unions $24 on Winsupply #4411, not on invoice.
Job 8799: all bill lines matched. (no action)
Suggested invoice lines drafted from your price list — approve to add?

You add two lines, send the invoices, and the parts stop being gifts.

The time and money math

Assumptions, all labeled as an example. Swap in your own numbers:

  • Example: 2 hours a month of packing-slip spot checks.
  • Example: 4 missed parts a month averaging $100.
  • Example: office wage of $25 an hour on those 2 hours.

Time back: the monthly statement chase drops to a few minutes of reading flags and approving lines. Over a year that is about 24 hours of bookkeeper time back.

Money effect: the revenue is materials you already paid for. Example: 4 × $100 × 12 = $4,800 a year recovered. The 24 hours at $25 is another $600 of admin wages freed for billing or scheduling. Catching even one $140 valve a week pays for the setup quickly.

If you want to pressure-test the math on your own books, see how to measure AI ROI in a small business.

The office rarely loses a whole invoice. It loses a line. That is why the dollar amounts look small in isolation and large across a year. A $38 ball valve feels too minor to chase until you realize it happened four times this month and twelve months running. The watcher is built for that quiet leak, not for the dramatic missed change order.

Where it goes wrong (limits)

It needs a job number or address on the supplier bill. Counter tickets with no job reference cannot be matched until someone writes the job on them. One shop rule fixes most of that: "no job number, no charge to the account."

Stock parts bought for the truck, not a job, will look like orphans. You mark a vendor or SKU list as "truck stock" once and those lines stop flagging.

Price list gaps matter. If your customer price for a part is missing, the drafted line may use cost-plus a default markup you set. You still approve the number.

It reads bills and invoices, not the truck. If a tech buys on a personal card, the watcher never sees it.

What if it still doesn't work for you?

If you are a one-tech shop that invoices from the same tablet the parts were bought on, you may already catch everything. If your supply house cannot put job numbers on tickets, ask them once; most can. If after a month the list is always empty, your office is already disciplined and you still have a safety net. You lose a setup afternoon, not a new software seat.

Built inside the tools you already use

Deeplathe builds this matcher inside QuickBooks or Xero, your job software and the email you already have, so techs do not learn a new app. You decide the match rules, the default markup and what may be drafted. If you want other jobs that run this way, look at /solutions.

Questions owners ask

What does it cost to run?

A Zapier or Make plan plus the accounting and job software you already pay for, or a paid ChatGPT plan with connectors. One recovered valve often covers a month of that.

Will it work for a shop my size?

Best for shops with more than one tech buying on account across several jobs a day. A solo plumber who invoices from the van the same hour may not need it.

What if it flags truck stock as unbilled?

Mark those SKUs or vendors once as stock. They drop off. Wrong flags in week one are normal; you correct them once.

Is my supplier and customer data safe?

It uses the connections you grant. More on that in is customer data safe with AI tools.

Does this replace job costing software?

No. It catches the specific miss of "bought but not billed." Full job costing reviews stay with your bookkeeper.

Sources

Keep these

The working rules

Parts you bought for a job but never put on the customer's invoice now get caught before the invoice goes out.

Floor vote

Where are you with this job?

One vote per device. Change it any time.

Loading votes…

Field check

Field check

Four questions. Honest answers. No score sent anywhere but this page.

01 / 04

Can you name the one job this piece is for, in one sentence?

Mark

Saved on this device. No account.

Pass along

Comments

Comments

A short note on the job in this piece. Name optional. Saved on this page, not a profile.

Loading comments…