Job Costing for Small Contractors, Simply

By Mark Fulton · 2026-08-21 · 15 min read

Job Costing for Small Contractors, Simply

Job costing for a one to five person contracting business is three numbers per job, not a cost accounting system. You need what you quoted, what you actually spent on that job, and how many hours actually went into it. Everything else in a job costing guide, cost codes, work in progress schedules, overhead allocation percentages, exists because a company with a bookkeeper and a project manager needs those things. You do not. The only discipline the small version requires is tagging each expense to a job at the moment you spend the money, and writing down your hours the day you work them. That fits on a phone in the truck. When the job closes, subtract, and you know whether the price you quoted was the right price.

The reason most small contractors never do this is that job costing has been explained to them as an accounting discipline, and it arrives bundled with software at $99 a month and a setup weekend they do not have. So they quote from memory, feel busy, and find out in February that a whole category of work was carrying almost no margin. The version below can be started this afternoon on a job you are already halfway through.

What is job costing at a small scale?

Job costing means putting a boundary around one job and totaling everything that crossed it. Money out on materials and subs. Hours in from you and anyone helping. Money in from the customer. That is it. The formal definition adds direct costs, indirect costs, and allocated overhead, and those distinctions matter enormously to a fifty person general contractor bidding public work. At your scale they mostly move a small number between two buckets while the real leak sits somewhere else entirely.

What changes when you do it is not the accounting. It is the quoting. A contractor who has costed eight bathrooms quotes the ninth from evidence. A contractor who has costed none quotes it from the feeling that the last one went alright. Those two contractors charge different prices, and only one of them knows which of their trades is actually paying.

The Internal Revenue Service is unusually direct on the systems question. Its small business recordkeeping guidance states that the law does not require any special kind of records, and that you may choose any recordkeeping system suited to your business that clearly shows your income and expenses. Publication 583 puts monitoring the progress of your business first in its list of reasons to keep records, ahead of anything to do with filing. Nothing in either document requires construction accounting software. A notebook that clearly shows the numbers satisfies the standard, which means the choice of tool is yours and should be made on whether you will keep using it in week six.

One boundary worth stating plainly: this is about running your own numbers so you can price work. Anything that crosses into deductions, depreciation, filing positions, or how to classify a helper belongs with a bookkeeper or accountant, not a blog post.

Which three numbers per job are non-negotiable?

One: what you quoted. The number the customer agreed to, plus any change orders you actually charged for. Write it down the day you send it. This is the only one of the three that is easy, and it is still the one most often reconstructed from a text message six weeks later.

Two: money spent on this job. Every receipt, sub invoice, delivery charge, dump fee, and rental. Not an estimate of materials. The actual sum of the actual receipts, tagged to this job as they happen.

Three: hours worked on this job. Yours and anyone you paid. Not clocked to the minute. Start and finish, one line a day, per job.

Those three give you the only two answers that change behavior. Gross margin in dollars is number one minus number two minus the cost of number three. Effective hourly rate is number one minus number two, divided by number three. The second is often the more useful figure for a small contractor, because it is directly comparable across a kitchen, a deck, and a day of punch list work, and it translates instantly into whether the job was worth the week.

Notice what is not on the list. Overhead allocation, percentage of completion, committed cost, labor burden rate. Those become worth the effort when you have multiple crews running concurrently and cannot see all the work from where you stand. Until then they add setup cost and remove nothing from your day. The general small business finance guidance from the U.S. Small Business Administration makes the same point in different language: bookkeeping exists to keep the business running smoothly, and the point at which you bring in more machinery is a cost benefit decision, not an obligation.

How do you tag an expense to a job in ten seconds?

This is the entire habit, and it is the only part that fails. Everything else is arithmetic you can do at the end.

The rule is: tag at the moment of spending, never later. In the parking lot, not on Sunday night. A receipt without a job name attached becomes an untagged expense within about four hours, because by then there have been two more stops.

Ten seconds looks like this. Open the money entry, type the amount, type the vendor, pick the job. Three fields. If your system needs a fourth field, a category, a cost code, a phase, it will not survive a wet Tuesday. This is the same habit described in the post on tracking expenses without accounting software, with one addition that turns generic expense tracking into job costing: the job name.

Four rules that keep it working:

  • One job name, spelled one way. Pick a convention and never deviate. Customer surname plus street is good: Alvarez Ridgeway. Alvarez kitchen, Alverez, and kitchen job are three different jobs to any system, including your own memory.
  • Tag the small ones too. The forty dollar stops are where the leak hides. A single one is noise. Fourteen of them across a remodel is a day of your pay.
  • Sub invoices get tagged the day they arrive, not the day you pay them, or a job you closed in March keeps growing in May.
  • Hours go in the same place at the same time. One line at the end of the day: job, hours, what you did. The what you did is worth the extra four seconds, because it is what tells you a year later why that job took eleven hours more than the same job at the next address.

If you genuinely cannot type on site, the paper fallback works: one envelope per job in the truck, receipts in, hours written on the outside. It costs you an evening at the end of the job instead of ten seconds at a time, and it produces the same three numbers.

How do you value your own hours on the job?

This is where small contractor job costing usually goes wrong, because there are two defensible conventions and mixing them produces a number that means nothing.

Convention A: your labor is a cost. Pick an hourly rate for yourself, put your hours into the cost stack at that rate, and whatever is left over is business profit. This tells you whether the job was profitable after paying you properly. Use it for quoting, because a price that does not cover your own time is not a price.

Convention B: your labor is not a cost. Total the money out only, and what is left is the amount you take home for the hours you put in. Divide it by your hours and you get your effective hourly rate. This tells you what the job actually paid you.

Run both. They answer different questions and the gap between them is informative. What matters is picking a rate for Convention A that is defensible: what you would have to pay a competent tradesperson to do the same work locally, plus the employment costs you would carry on top of their wage. Local wage data for your trade, or what you have actually paid subs for similar work, both beat a number you like the sound of. This is the same reasoning as putting the owner's pay into a break even calculation for a service business: a business that only works when the owner is unpaid is a job with extra paperwork attached.

What does the estimate versus actual gap usually reveal?

It reveals hours. Almost always hours, and almost never the hours anyone predicted.

Here is a single kitchen remodel, costed line by line. Every figure below is invented to make the mechanism visible. These are the example's own inputs, not industry averages, and the entire point is that you substitute your own.

The setup: a fixed price kitchen remodel, quoted at $18,400. Cabinets supplied by the contractor, countertop subbed to a fabricator, plumbing and electrical subbed out, everything else done by the contractor with a helper two days a week. The estimate costed the owner's own time at $55 an hour and the helper at $25.

Line Estimate Actual Variance
Cabinets $5,200 $5,480 +$280
Countertop (sub) $2,600 $2,900 +$300
Flooring materials $980 $1,140 +$160
Plumbing (sub) $850 $850 $0
Electrical (sub) $1,050 $1,400 +$350
Paint, drywall, fixings $420 $610 +$190
Dumpster and disposal $400 $520 +$120
Your hours (60 est, 84 actual @ $55) $3,300 $4,620 +$1,320
Helper hours (24 est, 31 actual @ $25) $600 $775 +$175
Total cost $15,400 $18,295 +$2,895
Price quoted $18,400 $18,400 $0
Margin $3,000 (16.3%) $105 (0.6%) -$2,895

Nothing catastrophic happened on this job. Nobody put a foot through a ceiling. Every single line is a small, ordinary, entirely believable overrun, and together they took a sixteen percent job to nothing.

Now sort the overruns by size and note which of the three columns caught each one:

Where the margin went Amount Caught by
Your extra 24 hours $1,320 hours column
Electrical: old wiring, junction box relocated $350 money column
Countertop: wall out of square, extra seam $300 money column
Cabinets: freight surcharge on a backordered run $280 money column
Paint, fixings, consumables $190 money column
Helper's extra 7 hours $175 hours column
Flooring: replacement for a bad cut $160 money column
Second dumpster haul $120 money column
Total $2,895

Two things fall out of this that a contractor cannot see without the columns.

The hours were the single largest leak by a factor of nearly four. $1,495 of the $2,895 was time, and it was time nobody invoiced for. Twenty four extra hours is three working days. It felt at the time like a normal amount of fiddling: the microwave outlet the customer asked to move on day four, waiting on the countertop template, refitting a filler strip. The money column alone would have shown a $1,400 overrun and pointed at suppliers and subs, which is the wrong place to look.

Under Convention B, the effective hourly rate is the sharper number. Strip the owner's labor out of the cost stack and the estimate implied $6,300 for 60 hours, about $105 an hour. The actual was $4,725 for 84 hours, about $56 an hour. So the contractor did earn roughly the tradesperson rate they set for themselves, which is why the job did not feel like a loss. But the business kept $105 for carrying the risk on an $18,400 contract, which will not replace a truck, cover a warranty callback, or fund the next slow month.

The lesson is not that the price was too low. It is that the estimate was too optimistic on hours, that the change order was never priced, and that the fixed price meant every one of those small material overruns landed on the contractor rather than the customer. Those are three separate fixes, and none of them is visible without three columns.

How do you use last year's jobs to quote this year's?

Once you have five or six costed jobs, quoting stops being a feeling. Three moves get you most of the value.

Group jobs by type, not by customer. All the kitchens together, all the bathrooms, all the deck builds, all the small repair days. Compare actual hours across each group. The spread inside a group is the real information: if your kitchens land between 68 and 96 hours, quoting 70 is a decision to lose money about half the time.

Quote from your median actual hours, not your best job. Memory reaches for the job that went well, because that one was pleasant. Your records will show you the middle one. Use the middle one and price the risk separately.

Track material overrun as a percentage per job type. In the example above, materials and subs ran about twelve percent over. If that pattern repeats across three or four jobs, it is not bad luck, it is your estimating method, and the fix is either a contingency line in the quote or a change order clause that lets specific overruns pass through.

Two more things worth doing while the year is fresh. Record why each job overran in one short sentence at close out, because the pattern in the reasons is more useful than the pattern in the numbers. And check margin by job type at least twice a year. Contractors are regularly surprised to find their least favorite category of work is their most profitable, and that a category they enjoy has been quietly subsidized by the rest of the book.

Frequently asked questions

How do I track costs on a job without accounting software?

Three columns per job in whatever you will actually open: quoted amount, money spent, hours worked. A notebook, a spreadsheet with one row per job, or a simple money log where each entry carries a customer or job name all produce the same result. The thing that makes it work is not the tool, it is tagging every expense to a job at the moment you spend, and writing hours down the day you work them. A tool that adds fields you do not need makes the habit less likely to survive, which is a bigger risk than any feature you gain. Full recordkeeping guidance for a business is a bookkeeper question, and the IRS publishes its own on what records to keep and for how long.

Should I include my own labor in job costs?

Run it both ways, and be consistent about which you are quoting from. Include your hours at a defensible rate when you want to know whether the job was profitable after paying you properly, which is the version to quote from. Exclude them when you want to know what the job actually paid you per hour, which is the version that tells you whether the work is worth doing. The mistake is switching between the two without noticing, which makes a job look profitable because the owner worked for free. Whether your own pay is a business expense for tax purposes depends on how your business is structured, and that is a question for your accountant.

What's a reasonable margin on a small contracting job?

There is no universal figure worth repeating, and any specific percentage you see quoted without a named source and a disclosed sample is worth ignoring. The useful benchmark is your own: cost six of your jobs, look at the spread, and you will find your real range within a season. Margin also varies enormously by trade, contract type, and how much of the work you sub out, so a number from a commercial general contractor tells you almost nothing about a residential remodel. What matters more than hitting somebody else's percentage is that the margin covers the risk you are carrying: warranty work, the jobs that go wrong, slow months, and equipment replacement.

How do I stop underquoting the same type of job?

Underquoting the same job type repeatedly is a records problem, not a pricing nerve problem. Cost three of them, take the median actual hours rather than the best case, and quote from that. Then look at what was not in the estimate at all, which is usually one of four things: travel and material runs, the change the customer asked for and you never priced, cleanup and disposal, or the last ten percent of a job that always takes longer than the first ninety. Add explicit lines for those. If a customer pushes back on the higher number, you now have a costed job to point at instead of a feeling, and you can decide whether to decline the work with evidence rather than resentment.

Sources

Every dollar figure in the kitchen remodel is invented for illustration. It is an example scenario built to show how the three columns behave, not a claim about what a kitchen remodel costs or what any contractor earns.

Cost your next job while it is still open

Pick the job you are on right now and start from today. Log each expense in the money module of SMBDashboard as you spend, tagging it to the customer, and add a line for your hours at the end of each day. The per job total reads straight back to you, so at close out you have the three columns instead of a shoebox. It is free, there is no account to create, and your data stays in your browser unless you turn on Pro sync. The free tier holds 25 customers, 200 money entries, and unlimited tasks, which covers a real job rather than a demo. Pro removes the caps and adds CSV export, recurring entries, and your own branding on the printed report, at $48 every six months, about $8 a month, or $149 once. If you want the expense side on its own first, the small business expense tracker is the same log without the rest of the dashboard around it.


SMBDashboard is a free, local-first small business dashboard. Your data stays in your browser unless you switch on Pro sync.