Job costing software for cabinetry and millwork: keeping shop hours from disappearing into the bid
Custom cabinetry and millwork is sold on a drawing and built on a shop floor, and the distance between those two things is where jobs quietly stop making money. A run of cabinets that looked straightforward on the estimate can turn into extra jig-building, extra finish coats, or an unplanned rework once the fabricator actually gets into it — and if shop hours aren't tracked by job, that complexity never shows up as a number, just as "the shop was busy."
Add in material cost that swings hard by wood species and finish, install labor that's a completely different job than shop labor, and measure or template trips that get treated as free because nobody logs the drive and the hour on site, and it becomes very easy for a shop to be running at full capacity and still not know which jobs are actually profitable.
Where cabinetry and millwork costs actually go sideways
- Custom fabrication labor underbid — a run of cabinets with unusual angles, inset doors, or a finish that takes an extra coat can eat far more shop time than a standard box run, and it's easy to price the job like the simpler version.
- Material cost by species and finish — walnut, white oak, and paint-grade plywood aren't in the same cost universe, and a client upgrade mid-project can change the material line significantly without anyone re-pricing the labor around it.
- Shop labor vs. install labor — building the piece and hanging it on site draw on different skills, different paces, and often different people, and treating them as one labor number hides whether the overrun happened at the bench or on the wall.
- Undercounted measure and template trips — a site visit to template a countertop or verify an opening feels minor in the moment, but a few of those trips a month, unlogged, is real labor time that never gets attributed to the job it was for.
None of this shows up on a shop-wide view of the month. It shows up on one job's numbers, discovered when the final invoice doesn't match what the drawing suggested it should have cost.
What to check before buying
| Question | Why it matters for cabinetry and millwork |
|---|---|
| Can labor be split between shop time and install time? | A job that runs over needs to point at where — the bench or the site — before the next similar job gets priced the same way. |
| Does material cost post to the job by the piece, not the project? | A species or finish upgrade mid-run needs to show up against that specific job's material line, not get averaged across whatever else the shop is building that week. |
| Can a measure or template trip be logged as job time? | If site visits before fabrication starts aren't tracked, the job's true labor cost is understated before a single board gets cut. |
| Can you see a job's margin while it's still in the shop? | A run that's taking longer than planned is fixable with a schedule or crew change before install. The same overage found at delivery is just a number on an invoice. |
Shop time is the number most shops never see
The shops that get a clear read on their margins track fabrication hours per job the same way a service business tracks billable hours — not because every minute needs an invoice line, but because it's the only way to know if a bid was actually right. A job that took twelve extra shop hours because of an inset door detail is useful information exactly once: the next time that detail gets quoted.
A simple test: pull the last three custom runs your shop built and see if you can say, right now, how many shop hours went into each one versus what was estimated. If the answer is "the shop guys would remember roughly," that's the gap job costing software is meant to close.
Shop hours and site hours are different money
A joinery job has two labour pools with different rates, different overheads and completely different risk. Shop time is predictable and machine assisted. Site time is exposed to access, other trades and a building that is rarely as drawn.
Blending them into one labour figure hides the thing you most need to know, which is whether your installation is priced correctly. Plenty of shops make money in the workshop and lose it on site, and the total conceals both halves.
Nothing on site is square
Scribing, packing and adjusting to a wall that is out by ten millimetres is where installation hours actually go, and it is invisible in a cutting list. A run of units that took a day in the shop can take two on site for reasons that have nothing to do with the cabinetry.
Record install hours against room type and building age. Older properties are consistently slower, and once you can put a figure on how much slower, you can price a period property differently from a new build instead of hoping it averages out.
Where SiteLedger fits
SiteLedger gives cabinetry and millwork shops geofenced time tracking so shop hours and install hours post to the right job separately, AI receipt scanning that reads the vendor and total off a lumber yard or hardware receipt in about 4 seconds — including from a shop floor with no signal, syncing once it's back — and live per-job margin so a run that's overrunning in fabrication shows up before delivery day, not after.
It's $8/month for up to 10 workers on the Starter plan, or $15/month for unlimited workers with AI budget alerts and calendar scheduling on Professional. Both start with a 1-week free trial and no credit card. Timesheets export payroll-ready, and it syncs directly with QuickBooks Online; Xero and other payroll providers work through a CSV export rather than a live sync.
Common questions
- How do I stop underbidding custom fabrication?
- You can't fix the estimate until you know what the last similar job actually cost in shop hours. Tracking fabrication labor per job, separate from install, is what lets you compare the estimate against reality after the fact — and adjust the next bid instead of repeating the same underbid.
- Should shop labor and install labor be tracked as one job or two?
- One job, two labor legs. Splitting them into separate jobs loses the whole-project margin; combining the hours hides whether the overrun happened at the bench or on site. Tagging hours to shop or install within the same job answers both.
- Do I need to log measure and template trips separately?
- Yes, as job time against that specific job, even though nothing gets built or invoiced on that trip. A few unlogged site visits a month adds up to real labor cost that's currently invisible on every job's numbers.
- How does material cost tracking work when a client upgrades the wood species mid-project?
- The upgrade needs to post to that job's material line the moment the new material is purchased, not get folded into general shop supply costs. Otherwise the job's margin looks worse than the fabrication actually was, and the material change gets missed as the real cause.
Keep reading
Job costing for contractors: how to know your margin before the job closes
How to tie labor, materials, subs and overhead to a job while it is still open, budget each bucket, and spot a job going bad early enough to fix it.
Construction job costing software: what contractors should actually look for
How to choose construction job costing software: what it does that QuickBooks and project tools don’t, the features that matter, and what it should cost.
Job costing software for deck builders: keeping material swings and rain days off your margin
How deck builders cost jobs: footings into unknown ground, material waste on angles, permit and inspection gates, and finishes that need a return visit.