In this article
- Why the guess is always optimistic
- What to track on every job
- Labour hours are the number that matters most
- Track the unbilled hours too, especially those
- Materials actually used, not materials estimated
- Overhead share, applied consistently
- Compare estimated against actual on every single job
- The leaks that show up again and again
- Prep underestimated
- The second coat that was not allowed for
- Access and setup time
- Snagging and return visits
- Scope creep that never became a change order
- Use the pattern to fix estimating, not just pricing
- A simple approach for a one person business
- A crew changes the problem
- Frequently asked questions
Most painters know their revenue and guess their profit. The guess is almost always optimistic. Job costing is the process that replaces the guess with a number, and it is the single fastest way to stop repeating the same expensive estimating mistake for another year.
The mechanism is simple. Before the job you produced an estimate made of assumptions. During the job reality happened. Job costing is writing down what reality cost and putting it next to what you assumed, on every job, until the pattern in the differences tells you what is wrong with your estimating. That is the entire discipline. Everything below is detail on how to do it without turning yourself into an accountant.
This is general business guidance for painting contractors, not tax or accounting advice. How you must record and report costs varies by jurisdiction and by business structure. Check your local rules and speak to your own accountant.
Why the guess is always optimistic

Human memory of a job is dominated by the parts that went well. You remember the two days where everything flowed, not the ninety minutes lost to the second trip to the merchant, or the half day of touch ups after the customer walked the job, or the hour of moving furniture you never mentioned in the price. Those hours were real, they were paid for by you, and they came directly out of the margin you thought you had.
There is also a maths problem. If you bank a healthy looking sum at the end of a job and never subtract your overhead share, you are counting money that is already committed to insurance, vehicle costs, phone, software, accounting and the hours you spend quoting jobs you do not win. A job can look profitable and still be losing you money once it carries its share of the business. The painting business profit margin guide covers what those numbers should look like.
What to track on every job
Six categories. If you capture these you can cost any job, from a single bedroom to a full exterior.
| Category | What it covers | How to capture it | Where it usually goes wrong |
|---|---|---|---|
| Labour hours by person | Every hour worked by you and each crew member on this job | Start and finish times logged daily, per person | Rounded to the nearest convenient number after the fact |
| Materials used | Paint, primer, filler, caulk, tape, sandpaper, sundries | Receipts assigned to the job the same day | Leftovers and shared tins never reconciled |
| Subcontractor costs | Anyone you paid to work on this job | Their invoice, coded to the job | Cash payments to a mate that never get recorded |
| Equipment and consumables | Hire charges, sprayer wear, brushes, rollers, sheets, scaffold | Hire invoices direct, consumables as a per day or per job allowance | Treated as general expense so no job carries it |
| Travel | Mileage, fuel, parking, tolls, time in the van | Distance and trips per job | Time in the van counted as free |
| Overhead share | This job's slice of running the business | A consistent allocation method applied to every job | Not applied at all |
Labour hours are the number that matters most
On most painting jobs labour is the largest cost and the one with the widest variance, so it is where job costing earns its keep. Materials are broadly predictable once you know how to estimate paint and material costs. Hours are not, and hours are where jobs quietly die.
Log hours per person per day, not per job in one lump at the end. A crew of three on a four day job is around ninety six person hours, and reconstructing that from memory a week later produces a number that is wrong in a predictable direction. If you convert hours to cost, do it with a fully loaded rate that includes the employment costs on top of the wage, as covered in the painting labour cost guide. Using the bare hourly wage understates every job you will ever cost.
Track the unbilled hours too, especially those
This is the part almost everyone skips, and it is where the honest version of job costing separates from the comfortable one. Count the hours that never appear on an invoice but were spent because of this job:
- Travel time to and from site, every day, for every person
- Loading and unloading the van
- The return trip to the merchant because something ran out
- Shop time: cleaning gear, sorting kit, prepping for the next day
- The site visit and the time spent writing the quote in the first place
- Snagging visits and the drive back for the one door that needed another coat
- Customer phone calls and colour decisions during the job
You do not have to bill those hours separately. You do have to know how many there were, because they are the difference between a job that looked like a good day rate and one that actually delivered it. A two hour round trip for a forgotten tin does not vanish because nobody invoiced it.
Materials actually used, not materials estimated
The estimate said a certain number of tins. Record what actually got opened. Half a tin left over is not a saving if you cannot use it on another job, and running over is information about your spread rates rather than bad luck. Assign receipts to a job on the day, in the van, with a photo. Receipts collected in a footwell and sorted monthly get assigned to whichever job you can still remember, which is another way of saying they get assigned wrong.
Overhead share, applied consistently
Pick a method and apply it to every job the same way. The most common approach for a small painting business is to take your annual overhead, divide by your realistically billable hours in a year, and carry that as a cost per billable hour on top of labour. The precision matters much less than the consistency. An imperfect method applied to every job still ranks your jobs correctly, which is the point. The markup guide covers how this feeds into pricing.
Compare estimated against actual on every single job
Costing a job and filing it does nothing. The value is entirely in the comparison, and the comparison has to happen while you still remember the job. Do it within a few days of finishing, and keep it to one page.
| Line | Estimated | Actual | Gap | Why |
|---|---|---|---|---|
| Prep hours | From the estimate | From the daily log | Hours over or under | One sentence, honestly |
| Painting hours | From the estimate | From the daily log | Hours over or under | One sentence |
| Unbilled hours | Whatever you allowed | Travel, shop, returns | Almost always over | One sentence |
| Materials | From the estimate | From receipts | Over or under | One sentence |
| Other costs | Hire, subs, travel | Actual | Over or under | One sentence |
The "why" column is the whole exercise. A gap without a reason is trivia. A gap with a reason is an instruction for the next estimate.
Treat the gap as information, not failure
The reason painters avoid job costing is not that it is hard. It is that it produces uncomfortable answers, and nobody enjoys documenting that a job they were proud of made less than they thought. Reframe it. The gap is not a report card. It is the only feedback loop your estimating has. An estimator who never sees actuals is throwing darts in the dark and being told nothing about where they land.
You are also allowed to find that a job went well. Plenty do. Knowing which ones and why is just as useful, because it tells you what kind of work to chase.
The leaks that show up again and again
After a dozen jobs the same handful of causes will account for most of your overruns. They are remarkably consistent across the trade.
Prep underestimated
The most common leak by a distance. Prep is the hardest part of a painting job to see from the doorway during a walkthrough, and it is the part that expands once you are actually up close. Filling, sanding, caulking, stripping, degreasing, masking and protection all take longer than the mental image of them. If your actuals show prep running over on job after job, your prep allowance is wrong, not your crew. Fix it with the prep time guide and by building an allowance from your own logged history rather than instinct.
The second coat that was not allowed for
Strong colour changes, patchy substrates, poor previous work and pale colours over dark all quietly demand another coat. If you priced two and did three, you have donated an entire pass of the whole job. Assess coverage properly at the walkthrough and say in writing how many coats the price includes.
Access and setup time
Stairwells, high ceilings, tight rooms full of furniture, parking two streets away, carrying kit up three floors, an occupied house where you can only work in one room at a time. None of these change the square footage and all of them change the hours. Standard production rates assume reasonable access. When access is not reasonable, the rate does not apply and you have to say so at estimate stage.
Snagging and return visits
A return visit costs you far more than the work involved. It is travel each way, setup, teardown and a lost slot in the day, all for twenty minutes of actual painting. Track return visits explicitly. If they are frequent, the fix is usually in the completion walkthrough rather than the painting: walk the job properly with the customer while you are still set up, and deal with the list then.
Scope creep that never became a change order
The extra cupboard, the ceiling that was not in the price, the door frame they asked about on day three. Individually small, collectively a serious leak, and invisible unless you cost jobs. Track them as their own line so you can see what saying yes actually costs you over a year, then handle them as documented change orders.
Use the pattern to fix estimating, not just pricing
Here is the distinction that separates painters who improve from painters who just get more expensive. If your jobs come in over, the reflex is to put prices up. Sometimes that is right. Often it is not, because the problem is not that your price is too low, it is that your estimate did not describe the job.
Raising prices across the board when your prep allowance is systematically short means you now overprice the easy jobs and still underprice the hard ones. You lose the easy work you would have made money on and win the difficult work you will lose money on. That is a worse business, not a better one, even at higher headline prices.
The fix is to feed the actuals back into the assumptions. If prep on occupied properties runs consistently over, change the prep factor for occupied properties. If your ceiling production rate is optimistic, change the rate. If travel is eating a day a week, change how you price jobs outside your core radius or stop taking them. Adjust the model that generates the number rather than adding a blanket cushion to the output.
Then, separately, look at whether your prices are right. Once your estimates describe reality, you can see clearly whether your rate delivers the margin you need, and the raising your prices guide becomes a real decision rather than a panic response. Estimating accuracy and price level are two different levers, and the avoid underbidding guide is mostly about the first one.
Separating a bad job from a bad estimate
Before you change anything, work out which of three things happened.
A bad estimate is when the job went normally and the numbers were still wrong. Nothing unusual happened, everyone worked at a normal pace, and it still took a third longer than priced. This is a systematic problem and it will repeat on every similar job until you change the assumption. Act on it.
A bad job is when something specific and unusual went wrong. Rain for three days on an exterior, a customer who changed colours twice, a substrate that turned out to be failing under the old coating, a crew member off sick mid week. It hurt, but it does not tell you your estimating is broken. Note the cause and move on.
A bad decision is when you knew the price was thin and took it anyway, to fill a gap or to get in with a client. That is a legitimate business choice, but book it as one. Do not let it contaminate your production rates as though it were evidence about how long painting takes.
The way to tell them apart is volume. One job over is noise. Five similar jobs over in the same line item is a system problem. Never rewrite your estimating model on a sample of one.
A simple approach for a one person business
You do not need software to start. You need a habit and about ten minutes a day.
Keep one row per job in a spreadsheet, or one page per job in a notebook. At the end of each day write the date, the job, hours worked including travel, and anything you bought. Photograph receipts and note the job on them. At the end of the job, total it, add your overhead per hour, subtract everything from what you invoiced, and write the actual result next to the estimate.
Then write one sentence about the biggest gap. That sentence, repeated across thirty jobs, is worth more than any tool. Review the whole sheet once a month and look for the line item that shows up over and over.
The failure mode for solo painters is not complexity, it is delay. Costs recorded the same day are accurate. Costs reconstructed at the weekend are fiction with a spreadsheet around it.
A crew changes the problem
With a crew you are no longer recording your own hours, you are collecting other people's, and that is a different discipline. Two things break first: hours arriving late or rounded, and materials moving between jobs in the back of a van with nobody assigning them.
Fix hours by making daily submission non negotiable and same day. Whether that is a group message at the end of each shift or a proper time tracking tool, the rule is that yesterday's hours are recorded before today starts. Make it easy and make it routine, and explain why it exists. Crews resist time tracking when they think it is surveillance, and accept it when they understand it is how the business finds out which jobs are worth taking.
Fix materials by requiring a job reference on every purchase, and by keeping the van stock separate from job stock. Anything drawn from van stock gets noted against the job it went to.
Also start tracking per person rather than only per job. Different painters produce at different rates on different work, and that is not a stick to beat anyone with. It is how you decide who to put on the spray work and who to put on the cutting in, and it makes your production rates far more accurate because you stop using a single average for a mixed crew.
At crew scale the admin load is where a spreadsheet starts to creak, and where painting business software that links estimates to actual job costs starts to justify itself. The order matters though: get the habit working on paper first. Software applied to a business with no costing discipline just produces empty fields faster. This is one of the foundations covered in the scaling a painting business guide, and it is also what makes hourly quoting defensible when you price by the hour.
Estimated versus actual, on every job.
PaintPricing keeps your quotes built the same way every time, which is what makes comparing estimated against actual mean anything. Free for your first 3 quotes, no card required.
Frequently asked questions
How long does job costing take per job?
Around ten minutes a day during the job to log hours and assign receipts, plus twenty to thirty minutes at the end to total it up and compare against the estimate. That is it for a typical residential job. The cost is entirely in remembering to do it daily. Reconstructing a job from memory afterwards takes longer and produces numbers you cannot trust, which defeats the purpose.
Should I include my own labour as a cost if I am the owner?
Yes. If you paint on site, cost your hours at the same fully loaded rate you would pay someone to do that work. Otherwise every job looks profitable because the largest input appears to be free, and you cannot tell whether the business is earning anything beyond paying you a wage. Your profit is what remains after your labour is paid for, not instead of it.
What if my actual costs are always higher than my estimate?
That is a systematic estimating problem, not bad luck, and it is fixable. Find which line item is consistently over, usually prep hours or unbilled travel and shop time, and change that assumption rather than adding a blanket cushion to every price. Blanket cushions overprice easy jobs and still underprice hard ones, so you lose the good work and keep the bad.
Do I need software to track painting job costs?
No. A spreadsheet with one row per job and daily entries works well for a one person business and for many small crews. Software earns its place when you have several people submitting hours, materials moving between jobs, and enough volume that manual entry becomes the bottleneck. Build the habit first, because a tool cannot enforce a discipline you do not have.
How do I allocate overhead to a single painting job?
Take your annual overhead, divide it by the hours you realistically bill in a year, and carry that as a cost per billable hour on top of labour on every job. It is approximate, and that is fine. Consistency matters more than precision, because a consistent method still ranks your jobs correctly against each other, which is what you are trying to learn.
How many jobs before the data is useful?
You will notice something on the first job and you should not act on it until you have several. One job over is noise, since anything from weather to a difficult customer can explain it. Five or six similar jobs showing the same line item over is a pattern worth changing your estimating for. Keep costing everything in the meantime, because the pattern only appears if the record is complete.
