Job costing is the step that happens after the work: take the final job revenue and the costs you chose to track, compare the actual result with what you estimated before the job, and identify which assumption missed.
For a pressure-washing owner-operator, a useful loop is simple:
Estimate → perform the work → record actuals → compare variance → update the next estimate.
This is different from asking what you should charge. Pricing is the plan before the job. Job costing tells you how that plan performed after the job.
Important: the “tracked job result” used in this guide is a management measure based only on the cost categories you include. It is not the same thing as accounting net income, taxable profit, or cash in the bank.
What to Record After Every Completed Job
You do not need dozens of fields to learn from completed work. Start with five numbers that let you compare the estimate with reality:
- Final job revenue. Use the amount actually earned for the completed scope, including approved changes or discounts.
- Actual labor time and labor cost. Record the total working time your pricing model is supposed to cover, using the same labor-cost method you used when estimating.
- Actual direct job costs. Record the job-specific costs you decided to track, such as materials, consumables, travel or other direct expenses.
- Allocated overhead. Apply the same consistent overhead-allocation method you use in your pricing system.
- Tracked job result. Subtract the included labor, direct costs and allocated overhead from final job revenue.
If your pre-job estimate did not include a cost category, fixing that model comes first. See 7 Costs Pressure Washing Owners Forget When Quoting Jobs for the pre-quote checklist.
Use the Same Categories on Both Sides
An estimate-versus-actual comparison only helps when the categories match. If your estimate includes owner labor but your actual review treats owner labor as zero, the comparison is distorted. If overhead is allocated one way when quoting and another way after the job, the variance can become noise instead of useful feedback.
A practical comparison table looks like this:
| Job-cost field | Estimated | Actual | Variance |
|---|---|---|---|
| Revenue | Planned selling price | Final earned revenue | Actual − estimated |
| Labor | Estimated labor cost | Actual labor cost | Actual − estimated |
| Direct costs | Estimated job-specific costs | Actual job-specific costs | Actual − estimated |
| Allocated overhead | Planned allocation | Consistent actual allocation | Actual − estimated |
| Tracked job result | Estimated result | Actual result | Actual − estimated |
The goal is not to make every variance zero. The goal is to understand why the result moved.
Two Simple Job-Costing Formulas
For this management framework:
Tracked job result = final job revenue − actual labor cost − actual direct job costs − allocated overhead
Then:
Tracked job margin = tracked job result ÷ final job revenue × 100
Only call the result “profit” internally if you are clear about what has and has not been included. A job-level worksheet normally does not replace your bookkeeping, tax records or full-company financial statements.
The U.S. Small Business Administration separates fixed and variable costs in its general break-even guidance and defines break-even as the point where total cost and total revenue are equal. That is useful background for thinking consistently about cost structure, but it is not a pressure-washing price benchmark. See the SBA break-even guidance.
Worked Example: The Quote Looked Better Than the Completed Job
This is a hypothetical planning example, not a recommended pressure-washing price, labor rate, overhead amount or target margin.
Suppose a job was quoted at $650. Before the work, the owner estimated:
- Labor: 4.0 hours × $30 planning labor cost = $120
- Direct job costs: $55
- Allocated overhead: $100
- Estimated tracked job result: $650 − $120 − $55 − $100 = $375
- Estimated tracked job margin: $375 ÷ $650 = 57.7%
After the job, the actual record shows:
- Labor: 5.5 hours × $30 = $165
- Direct job costs: $72
- Allocated overhead: $100
- Actual tracked job result: $650 − $165 − $72 − $100 = $313
- Actual tracked job margin: $313 ÷ $650 = 48.2%
The tracked result missed the estimate by $62. The math also tells you exactly where the miss came from:
- Labor cost was $45 higher than estimated.
- Direct job costs were $17 higher than estimated.
- $45 + $17 = the full $62 result variance.
That is more useful than saying “the job was less profitable than expected.” Now there are two assumptions to investigate.
Diagnose the Variance Before Changing Your Price
Do not automatically raise every price because one completed job missed the plan. First classify the miss.
Labor variance
If the job repeatedly takes longer than estimated, inspect the production-time assumption. Was the measured scope wrong? Did setup and pack-down take longer than the model allows? Is the service's production rate consistently too optimistic?
If the same service misses in the same direction across several comparable jobs, update the production assumption. If one unusual property caused the miss, keep the broader rate intact and record the property-specific complexity instead.
Direct-cost variance
If job-specific costs repeatedly exceed estimates, find the category that is drifting. The useful fix is a better allowance or better input—not a random markup applied to every service.
Revenue variance
If final revenue is lower than the estimate, record why. An approved discount, removed scope, unrecorded change or billing error tells you something different from a labor overrun.
Overhead variance
If your allocation method changes from job to job, fix the method before drawing conclusions from the variance. The purpose of allocated overhead here is consistency for management decisions, not creating a substitute for formal accounting.
Rework or callback variance
If a callback adds unplanned time or cost, record a reason code. A recurring pattern may point to a scope, inspection, training or quality-control problem. A single unusual callback is not automatically a reason to apply the same surcharge to every future customer.
A Simple Variance Decision Tree
- Same service repeatedly takes longer: revise the production-time assumption.
- Only unusual properties run long: improve the complexity checklist rather than changing every base assumption.
- Small stand-alone jobs repeatedly underperform: review mobilization and your minimum-charge logic.
- Direct costs repeatedly exceed the allowance: update that cost input.
- Customers accept quotes easily but completed jobs underperform: investigate the costing model before chasing more volume.
- Completed jobs perform well but too few quotes convert: the problem may sit in lead quality, presentation or follow-up instead. Use the quote close-rate diagnostic.
Do Not Change an Assumption From One Weird Job
Job costing becomes useful as a small dataset develops. One job can expose a mistake, but repeated comparable jobs are stronger evidence for changing a standard assumption.
For example, if three similar house-wash jobs each take materially longer than your estimating model predicts, that is a better reason to revisit the production assumption than one property with unusual access or an unexpected scope issue.
Use notes or reason codes so you can separate a repeatable estimating problem from a one-off exception.
Run a Five-Minute Job Closeout
A simple closeout routine can keep the data from disappearing:
- Confirm final revenue and scope.
- Enter actual labor time.
- Enter actual direct costs.
- Apply the consistent overhead allocation.
- Calculate the tracked job result and margin.
- Compare estimated versus actual.
- Choose the largest variance reason.
- Record whether the estimating model needs a change now, needs more evidence, or needs no change.
Do the closeout while the job is still fresh enough to remember what happened.
Review Patterns Weekly, Not Just Individual Jobs
Once a week, scan completed jobs for repeated misses:
- Which service type most often runs over estimated time?
- Which direct-cost category most often misses?
- Which jobs clear your target economics most consistently?
- Are small distant jobs creating a repeated mobilization problem?
- Are estimates accurate but close rate weak?
- Are quotes closing well while actual job results keep missing?
The point is to make one evidence-based adjustment instead of constantly rebuilding the price sheet from memory.
Job Costing Is Not the Same as Bookkeeping
Your job-costing system is a management tool. Bookkeeping and accounting answer broader questions about the company and may classify costs differently.
Keep the purpose clear: job costing should help you compare a specific estimate with the work that actually happened and improve the next operating decision. Your accountant or bookkeeper can advise on formal financial and tax treatment for your business.
Spreadsheet or CRM? Use the Simplest System That Gets Updated
You can run this process in a disciplined spreadsheet, a job-management platform or another system that reliably keeps estimated and actual fields together.
The important question is whether you can consistently retrieve the estimate, actual labor, actual costs, job result and variance without reconstructing the job from texts and receipts later.
If you are deciding whether a workbook is still enough, read Pressure Washing Spreadsheet vs CRM: When Do You Actually Need Software?.
Feed the Learning Into the Next Quote
The job-costing loop is not complete until the next estimate uses better information.
If a repeated variance shows that your production time or direct-cost allowance is wrong, update that assumption, then test the next quote with the revised numbers.
If you need a repeatable place to keep pricing, leads, customers, jobs, A/R and estimated-versus-actual operating review together, the Pressure Washing Business OS is the natural next step.
Frequently Asked Questions
What is the difference between estimating and job costing?
Estimating predicts the time, costs and result before the work. Job costing records what actually happened after the work and compares the actual result with the estimate.
Should an owner-operator include their own labor?
For management planning, use a consistent labor-cost assumption for the work you perform so owner time does not silently appear as free production. That planning choice is separate from how your accountant handles owner compensation or tax reporting.
What if I do not know how to allocate overhead?
Choose a consistent business-specific method rather than pretending overhead is zero. Common management approaches allocate overhead by billable hour, by job or as a percentage, but the right accounting treatment for your business should come from your financial professional.
How often should I change my pricing assumptions?
Change them when actual job evidence shows a repeatable miss or when a real cost changes materially. Avoid rebuilding the model after every unusual job.
Do I need software to track job profitability?
No. A spreadsheet can work when the business is simple and the record is updated reliably. Software becomes more valuable as team, scheduling, communication and transaction complexity grow.
Make Every Completed Job Improve the Next One
A completed job should leave you with more than an invoice. It should leave you with better production data, better cost assumptions and a clearer idea of which work actually supports the business.
Close the job, explain the variance, and carry the lesson into the next estimate.