The job closed on time and still lost money
A five-axis job ships on the promised date. The customer's happy, the invoice goes out, and three weeks later the owner is staring at a job cost report wondering why the margin came in eight points under quote. Nobody did anything wrong on the floor — the part is good, the delivery was on time, the paperwork is clean. But somewhere between the quote and the invoice, hours got spent that were never priced in, and there's no record of exactly where.
This is the most common blind spot in small job shops running QuickBooks and a spreadsheet: they can tell you what a job should have cost, and they can tell you what the customer was billed, but they can't tell you what it actually cost to run, operation by operation, until the job is long gone and the crew has moved on to three other things. By the time the numbers surface, nobody remembers whether the setup ran long because of a tooling problem, a first-article delay, or an operator who'd never run that fixture before.
Actual-vs-quoted labor tracking is the mechanism that closes that gap. It doesn't require guessing after the fact — it requires comparing two numbers that already exist, at the operation level, while the job is still open. This article walks through how that comparison actually works, where the "quoted" side comes from, how the "actual" side gets captured without turning the floor into a data-entry exercise, and what to do with the variance once you have it.
What "actual vs quoted" actually compares
The phrase sounds like a report title, but it's really a discipline: every operation on a routing carries a standard — a quoted or estimated time — and every operation, once run, generates a logged actual. Actual-vs-quoted labor tracking is the ongoing practice of holding those two numbers next to each other, per operation, per job, instead of only at the job's final invoice.
That distinction — per operation, not just per job — matters more than it sounds. A job-level comparison tells you the total ran over. An operation-level comparison tells you which operation ran over: the deburr step, the second setup, the inspection hold. Without that resolution, "we lost margin on this job" is a diagnosis with no treatment. With it, the shop can trace the overrun back to a specific step on a specific routing and ask a specific question: was the standard wrong, or did the operation genuinely take longer this time?
That's the whole mechanism. The standard time vs actual time comparison is what turns a pile of clocked hours into a signal instead of noise. For a closer look at how the two sides of that comparison are defined and where each one lives in the shop's paperwork, see our breakdown of standard time vs actual time in manufacturing.
Where the "quoted" number actually comes from
The quoted side of the comparison isn't invented at reporting time — it has to already exist on the job before the first chip flies. That means a routing (the sequence of operations a part goes through, from first setup to final inspection) has to carry a standard time per operation, not just a lump total for the whole job.
In practice, most small shops already have a version of this. It might live in a quoting spreadsheet, in the estimator's head, or in a rough per-hour allowance baked into the price. The problem isn't that the standard doesn't exist — it's that it's rarely broken out by operation and rarely carried forward onto the document that travels with the job. A quote that says "18 hours" doesn't help anyone diagnose an overrun. A routing that says "0.75 hr setup / 1.5 hr run" on the second operation gives the floor and the office the same reference point.
This is also where quoting drift gets its start. If the standard on the routing was copied from a similar job two years ago, and the machine, the material, or the tolerance has changed since, the "quoted" side of the comparison is already wrong before anyone clocks in. Actual-vs-quoted tracking doesn't fix a bad standard by itself — but it's the only mechanism that surfaces a bad standard early enough to correct it before it repeats. We cover how that repetition compounds job after job in quoting drift and machine shop margin erosion.
Where the "actual" number comes from
The actual side has to be captured without turning every operator into a data-entry clerk, or it won't get captured honestly. That's the practical argument for clock-in/clock-out at the operation level — a kiosk or a mobile view where an operator selects the job, the operation, and taps in and out — rather than reconstructing hours from memory at the end of a shift.
The other half of actual-time capture is the downtime reason code: setup, run, waiting, rework. A logged actual that's just "6.2 hours on operation 30" tells you less than one that's "1.1 hr setup, 4.4 hr run, 0.7 hr waiting on material." The reason code is what separates a standard that needs revising from a scheduling problem that has nothing to do with the routing at all. If an operation runs long because the shop was waiting on stock, that's not a quoting error — it's a material-flow issue, and lumping it into "run time" would corrupt the very standard you're trying to protect.
Manual time entry with supervisor approval covers the exceptions — a job that has to be logged after the fact, a correction to a mis-clocked operation — but the baseline should be operators clocking their own operations in real time. That's the only way the actual side of the comparison stays trustworthy enough to act on.
Turning two numbers into a variance
Once both sides exist — a standard time per operation and a logged actual per operation — the variance itself is simple arithmetic. Take a representative example, illustrative only: a routing quotes 0.5 hours for setup and 2.0 hours for run time on a milling operation, for a standard of 2.5 hours. The operator clocks 0.6 hours of setup and 2.7 hours of run, for an actual of 3.3 hours. That's a variance of 0.8 hours, or 32% over standard, on that single operation.
Multiply that gap by a burden rate — the fully loaded cost per hour for that work center, covering labor, overhead, and machine cost — and the variance stops being a time problem and becomes a dollar problem. If the shop's machinist labor is priced against something close to the median annual wage for machinists, reported by the U.S. Bureau of Labor Statistics at $56,150 for May 2024, an unpriced 0.8-hour overrun on one operation is a real, specific number, not a vague sense that "this job ran long." Roll that same 32% variance across every operation on a routing, or across every job that shares this routing, and the shape of the problem changes from "one bad day" to "a standard that's been wrong since it was written."
This is the arithmetic behind per-operation job costing — pricing and tracking margin at the operation level instead of only at the job level, so a variance can be traced to a cause instead of averaged away across a job that had some fast operations and some slow ones. We go deeper on that structure in per-operation job costing.
Reading the variance as a pattern, not an incident
A single overrun on a single job is an incident. The same operation running over standard on five consecutive jobs is a pattern, and patterns are what actual-vs-quoted tracking is built to surface. This is the territory of labor efficiency variance — the aggregate gap between standard and actual hours across a period, a customer, or a work center, rather than a single job.
Three questions tend to separate a pattern worth acting on from noise:
- Is it the same operation, across different jobs? That points at the routing's standard, not the crew.
- Is it the same operator, across different operations? That points at training or fixture familiarity, not the quote.
- Is it the same work center, regardless of job or operator? That points at machine condition, tooling, or a burden rate that no longer reflects reality.
None of these are conclusions you can reach from a spreadsheet that only totals hours at the job level. They require the operation-level resolution described above, tracked consistently enough over enough jobs to see the shape. For the formal mechanics of how a labor efficiency variance is calculated and interpreted across a period, see labor efficiency variance in manufacturing.
What actually happens once the loop is closed
The value of actual-vs-quoted tracking isn't the report — it's the feedback into the next quote. A shop that reviews variance regularly starts every new quote from a standard that's been checked against reality instead of one that's been copied forward for years. That's the actual mechanism by which margin stops eroding quote after quote: not a single big correction, but a routing standard that gets nudged closer to true every time a job closes.
That feedback loop also changes what a "close" job means. A job that shipped on time and on spec but ran 30% over its labor standard on two operations isn't a success story — it's a warning that the next quote for a similar part is underpriced by the same margin unless someone catches it. Closing the loop means that warning reaches the estimator before the next quote goes out, not a quarter later.
How WorkTickets handles the comparison
WorkTickets was built around this exact mechanism, not as an add-on report but as the core of the workflow: a routing carries the standard time per operation, a traveler (printed with an optional barcode/QR, or viewed digitally on a mobile or tablet screen) carries that standard onto the floor, and one-tap kiosk or mobile clock-in/out — with setup, run, waiting, and rework reason codes — captures the actual. Actual-vs-quoted labor is tracked per operation and rolled up per job on every tier, so the comparison isn't locked behind an upgrade.
On the Professional tier and above, burden and machine-rate configuration per work center turns that variance into a job-level profitability summary, and branded PDF reports let that summary go out to a customer or get reviewed with a supervisor without a spreadsheet in between. What WorkTickets doesn't do is schedule the shop or manage inventory — it's an execution-and-costing layer, deliberately scoped below a full ERP, built for the shop that's outgrown paper travelers but has no line item in the budget for a JobBOSS2- or ProShop-sized deployment.
Four tiers run $199, $349, and $599 a month self-serve (Essentials, Professional, Business), with an Enterprise tier starting at $1,199/month for shops that need it — and every tier starts with a 14-day trial, long enough to run actual-vs-quoted tracking against a handful of real jobs before committing to anything.
Where to start
If the shop is still comparing actual and quoted hours at the end of the month, or worse, at the end of the job, the fix isn't a bigger spreadsheet — it's moving the comparison to the operation level and doing it while the job is still open. Our job costing resource hub walks through the related pieces — standards, variance, per-operation costing — as one connected system rather than separate topics.
For a shop that wants to run the comparison on paper before touching software, the Job Costing & Quoted-vs-Actual Workbook lays out the same standard-vs-actual structure in spreadsheet form. And for a shop ready to see it running against live jobs, the 14-day trial is the fastest way to find out whether the gap between quoted and actual on this month's jobs is bigger than anyone expected.

