Job Costing Without Enterprise Software
A notebook in the truck and four numbers per job will tell you more about your pricing than a year of guessing.
You bid a 148-foot French drain at 22 crew-hours. The crew was on site Tuesday, Wednesday and half of Thursday. Three guys. That's roughly 60 crew-hours, not 22.
The job still made money, because the material markup carried it and you'd padded the price. But you don't know that. You just know the check cleared and the next one like it is on the calendar for the 24th.
Job costing is the practice of finding out what actually happened, in numbers, and comparing it to what you said would happen when you priced the work. It doesn't require software. It requires four numbers per job and the discipline to write them down before you forget.
Why most contractors skip this and still survive
Job costing feels like homework for a business that's already busy. The job's done, the money's in, and going back to reconstruct hours feels like grading your own test after the semester ended.
Here's what it actually costs you to skip it. Your price on a repeat job type is either right, high or low, and you have no way to tell which. If it's high, you're losing bids you could have won and you'll blame the market. If it's low, you're winning more work and making less money per job, which feels like growth right up until it isn't.
The contractors who get burned worst are the ones growing fastest. A bad price on one job a month is a rounding error. The same bad price on twelve jobs a month is your entire year.
You don't need to cost every job. You need to cost the jobs you do repeatedly, because those are the ones where a small error repeats.
The four numbers, and why these four
There are a dozen things you could track. Most of them you won't, because tracking them is annoying and the annoyance compounds until you quit. So track four.
- Crew-hours on site. Not calendar days. Number of people multiplied by hours they were actually working the job. Two guys for six hours is twelve crew-hours.
- Material cost, actual. What the receipts say, not what you estimated. Include the second trip to the supply house.
- Equipment and disposal. Rental days, fuel above normal, dump fees, delivered stone. The costs that only exist because this job existed.
- Revenue collected. The final number on the invoice, including change orders, minus anything you ate.
Everything else — overhead allocation, truck depreciation, your own salary — belongs in your hourly rate, not in the job record. If you try to allocate overhead job by job with a notebook you'll spend an hour per job and stop by March.
Crew-hours is the one that matters most, and it's the one everybody guesses at. Labor is usually the largest variable cost on a drainage or hardscape job and it's the only one that doesn't produce a receipt. Material overruns announce themselves. Labor overruns hide.
How to capture crew-hours without a time tracking app
Your crew lead writes two numbers on a card: what time they got on site, what time they left, and how many people were there. That's it. If there's a lunch break longer than thirty minutes, note it.
The card goes in a folder in the truck. Once a week you transfer the cards to a spreadsheet with one row per job. Five minutes on a Friday.
Two things break this. The first is asking for too much detail — if the card asks for hours broken out by task, nobody fills it in. The second is not closing the loop, so the crew lead sees the card disappear into a void and stops caring. Tell them once what you learned from it. "That Millbrook job took us nineteen hours, I'd bid thirteen, so I'm bidding the next one at twenty." That's enough.
Drive time is a judgment call. If the job is forty minutes each way and you're paying from the shop, that's 80 minutes of paid time per person per day that has to land somewhere. Put it in the job if the job is unusually far. Put it in your overhead rate if your service area is consistent. Just be consistent about which, because inconsistency is what makes the comparison useless.
A worked comparison: estimated versus actual on one drain
Here's the shape of the thing. Use your own numbers, not these — your loaded labor rate and your stone price are not mine.
Say you bid a 148-foot French drain at $13,130. Your estimate assumed:
| Bucket | Estimated | Actual | Variance |
|---|---|---|---|
| Crew-hours | 36 hrs | 47 hrs | +11 hrs |
| Labor cost at $42/hr loaded | $1,512 | $1,974 | +$462 |
| Material | $2,900 | $3,240 | +$340 |
| Equipment & disposal | $1,450 | $1,450 | $0 |
| Total direct cost | $5,862 | $6,664 | +$802 |
| Revenue | $13,130 | $13,130 | $0 |
| Gross margin | $7,268 (55%) | $6,466 (49%) | -6 pts |
The $42 per loaded hour is a placeholder. Loaded labor — wage plus payroll tax, workers' comp, and whatever benefits you carry — commonly lands somewhere in the $38 to $55 range per hour in North American markets, and comp rates for excavation work swing that number more than wages do. Work out your own from a real payroll run before you use this table on anything.
Now read the variance. Labor ran 31% over. Material ran 12% over. Equipment was dead on, because equipment is rented in whole days and you already knew how many days.
Six margin points sounds survivable, and on one job it is. Run the same error across thirty jobs at this size and you've left roughly $24,000 on the table for the year. That's the number that should get your attention, not the $802.
What the first three jobs actually teach you
One job tells you nothing. It could have been rock, a bad crew day, a homeowner who moved the flag line twice. Three jobs of the same type start to show a pattern.
Here's what to look for once you have three.
- A consistent labor multiplier. If all three came in between 25% and 35% over on hours, your estimating isn't random — it's biased. Multiply your gut hours by 1.3 and you're close. This is the single most valuable output of the exercise.
- Which bucket is actually loose. Contractors assume material is where they bleed. Usually it isn't. Material is over by the cost of one extra trip. Labor is over by a third of a day.
- Whether one job is an outlier. Two jobs at plus 10% and one at plus 80% is not an estimating problem, it's a job-selection or site-conditions problem. Find out what was different about the third. Usually it's access, depth, or a homeowner who changed scope mid-dig.
- Where your scope language is failing. If the overrun traces to work you did that wasn't in the proposal, the fix isn't in your pricing. It's in the exclusions section, which the proposal that gets signed the same week covers in more detail than I will here.
The temptation after three jobs is to raise your price. Sometimes that's right. Often the better move is to raise your estimated hours and leave the price where it is, which means you'll start declining the jobs that were never profitable at that price and keeping the ones that were.
Feeding it back into the estimate
Costing is only worth the trouble if the number changes the next bid. The mechanism is simple: your template carries the hours, and you update the hours.
If you've built reusable templates for your five most common jobs, each one already has a labor line with an hours figure in it. That figure is a hypothesis. Job costing tests it. Every time you close out a job, you either confirm the hours or you move them.
Move them in small steps. If three jobs ran 30% over, don't jump straight to 30%. Go to 20%, run three more, see where you land. Big corrections based on small samples are how contractors price themselves out of a market for a season and never figure out why.
Per-foot rules get the same treatment. If you carry a per-foot band as a sanity check — and that's a reasonable thing to carry — actuals are what let you widen or narrow the band honestly instead of adjusting it by feel.
What ScapesHQ does not do here, plainly
This post is about a gap in our own product, so I'll be direct about it.
ScapesHQ does not track time. It does not record job actuals, and it does not cost a job against its budget. Those are on the list, they are not built, and nothing in the product today will do this for you. If you connect the pieces and expect an estimated-versus-actual report to appear, it won't.
What the product does hold is the estimated side — the estimate, the proposal, the options the client chose, the signed record with the scope that was agreed. That's the left-hand column of the table above, and it's worth having in one place instead of scattered across a drive.
The right-hand column is yours to keep, in a spreadsheet or a notebook, until somebody builds it. A spreadsheet with one row per job and six columns will do this job well for a long time — until it doesn't, and the failure points are fairly predictable when you get there.
Don't wait for software. The cards in the truck folder work now, and the contractor who's been keeping them for eighteen months prices better than the one with a subscription and no data.
FAQ
How many jobs do I need to cost before the numbers mean anything?
Three jobs of the same type is the minimum for spotting a pattern, and six is where you can trust it. One job tells you nothing because any single job can be wrecked by rock, weather or a homeowner changing scope. Cost your repeat job types first, since that's where a pricing error repeats and compounds.
Should I include my own hours in crew-hours?
Yes, if you're on site doing production work. Count yourself at the same loaded rate as a crew member. Time spent selling, measuring or doing paperwork belongs in overhead, not in the job, otherwise your sales-heavy jobs will look artificially unprofitable.
What's a realistic loaded labor rate?
It varies a lot by market and by what your workers' comp classification costs. Take a real payroll run, add employer payroll taxes, comp premium and any benefits, then divide by the hours actually worked on jobs rather than hours paid. Most contractors are surprised the number is 25 to 45 percent above the base wage.
Does ScapesHQ track job actuals or time?
No. Time tracking, job actuals and job costing against budget are not built. ScapesHQ handles the estimate, proposal and signed record side; the actuals side stays in your own spreadsheet or notebook for now.
Should I raise my price if my actuals come in over?
Not automatically. First raise the estimated hours in your template so future bids reflect reality, then see which jobs you still win. Sometimes the right answer is a higher price, and sometimes it's declining the job type entirely because it was never profitable at any price the market pays.
The short version
Track four numbers on every repeat job type: crew-hours on site, actual material cost, equipment and disposal, and revenue collected. Write them on a card in the truck and transfer them to a spreadsheet once a week. After three jobs of the same type you'll see whether your labor estimate is consistently low, by how much, and which bucket is actually leaking. Then move the hours in your estimate template in small steps and test again.
Book a walkthrough and we'll look at what your last three estimates assumed, so you know what to measure against.