Job costing sounds like something you hire for. It isn't — not for materials, anyway. One ledger per job, every ticket landed in it, and a weekly look: that's the whole system. What it catches is specific, and each catch is real money.
Catch #1: unbilled materials
The biggest leak in T&M and cost-plus work is material you bought, installed, and never billed. The return trip with three parts on the truck. The extra circuit the owner asked for in the hallway. The counter run somebody made on the way in. None of it was forgotten on purpose — it just never got written anywhere the invoice could see.
With a per-job ledger, unbilled material is a mechanical check instead of a memory test: compare the ledger against the invoices and change orders you've raised. Anything in the ledger that isn't on paper to the customer is your money sitting in somebody else's building. Run that comparison before final billing on every job and you'll be surprised what it finds — in the worst way, the first time.
Catch #2: duplicate charges
The same purchase can reach you twice: an emailed invoice you paid, then the same charge on the monthly statement paid again. Or a supplier's system hiccups and invoices one delivery twice. When every ticket is logged with its invoice number, a duplicate jumps out — same number, same amount, twice. Without the log, both copies look legitimate, because each one is a real document.
Catch #3: price creep
Commodity prices move, and the price you were quoted at bid time is not automatically the price on the ticket six weeks later. A per-job ledger makes drift visible: the same part number showing up at a rising unit price across tickets, on one screen. On cost-plus work that's billing backup. On fixed-price work it's an early warning that this job's materials budget is going to blow — while there's still time to tighten waste, substitute, or price the remaining change orders accordingly. Without the ledger, price creep is invisible until the job closes, when the only thing left to do is feel bad.
Catch #4: credits that never came
Material goes back — handed to a driver, run to the counter — and somebody says “we'll credit your account.” Did they? A ledger entry for the return, checked off when the credit memo actually posts, is the only way to know. Returns without follow-up are donations.
The bonus: estimated vs. actual, mid-job
Once materials land per job, you get the number most subs only see at the post-mortem: materials-to-date against the materials in your bid, while the job is still running. A job burning its materials budget at the halfway mark is a problem you can still act on. The same comparison after close-out is just a story.
The minimum viable system
- One ledger per job — a page, a sheet, a tab, whatever you'll actually keep.
- Every ticket lands the day it happens: supplier, invoice number, job, amount.
- Weekly: ledger vs. what's been billed. Bill the gap.
- Monthly: ledger vs. the supplier statement, line by line.
- Job end: ledger vs. bid. Learn something for the next estimate.
Let RevnuPros keep the materials ledger for you.
Snap the ticket at the counter — the AI reads the supplier, invoice number, and line items, and files the purchase to its job with unbilled material flagged.