Job costing for contractors: how to know which jobs are actually making you money

Revenue is one of the more misleading numbers in a contractor's financial picture. A painting company that did $280,000 last year looks like it had a good year. But if the crew completed 40 jobs and 12 of those jobs lost money after materials and labour were properly accounted for, the real story is that 28 profitable jobs subsidised 12 unprofitable ones. The numbers above are illustrative, not an industry statistic, but the pattern is common enough to be worth taking seriously.
Job costing is how you find that out. It is the practice of tracking what each job actually cost to complete, comparing that to what the job paid, and using that information to price the next job more accurately.
What job costing actually measures
Job costing connects revenue and expenses at the job level rather than the business level. Standard bookkeeping tells you total revenue brought in and total cost incurred over a period. Job costing tells you how much a specific job cost to deliver and how much it paid — different and more useful information.
The direct costs that belong in a job costing calculation are the costs that exist because of that specific job: materials purchased for it, labour hours performed on it at their actual loaded cost, and any subcontractors or equipment rented specifically for it. A job record should also capture costs already committed through purchase orders or subcontracts, not just invoices already received, because an open commitment affects the job's projected margin even before the bill arrives.
What does not go into the per-job cost calculation is overhead: insurance, truck payments, software subscriptions, administrative salaries, and the owner's compensation. Those are costs of running the business covered across all jobs collectively, not costs of any specific job.
The calculation is:
Job gross profit = job revenue minus job direct costs
Job gross margin = job gross profit divided by job revenue
A $4,000 painting job with $1,600 in materials and $800 in direct labour produces $1,600 in gross profit and a 40% gross margin. That $1,600 is available to cover overhead costs not included in the calculation. It is not automatically $1,600 of take-home profit. A job with a negative gross margin has failed to recover even the costs directly attributed to it, before overhead is considered at all.
Labour cost: the number most contractors underestimate
Labour is the most commonly miscalculated cost in job estimates, usually because contractors use the hourly wage rather than the fully loaded employer cost.
In 2026, the employer's Social Security rate is 6.2% on covered wages up to the applicable wage base, and the Medicare rate is 1.45% on all wages. Those two employer taxes alone add $2.14 per $28 wage hour before unemployment taxes, workers' compensation, or benefits are included. FUTA has its own wage base and may be reduced by a state unemployment tax credit, so applying one flat percentage to every hour would also produce the wrong cost.
Workers' compensation adds further cost that is highly trade-specific. A roofing or concrete contractor faces materially higher workers' compensation rates than an interior painter, and rates are calculated using company-specific experience factors rather than a standard percentage that applies to all trades. A claim that workers' compensation always adds a specific percentage to any trade's labour cost is not accurate; the right approach is to pull the actual rate from your policy and apply it to your own payroll calculations.
For context on the scale of the wage-to-total-employer-cost gap: Bureau of Labor Statistics data from June 2026 shows that across all private industry, wages and salaries averaged $32.82 per hour worked and benefits averaged $14.07. That ratio is context, not a target number for any specific contractor. Build your own estimating labour rate by category using your actual wages, employer payroll taxes, workers' compensation premium, and benefits. Divide the relevant annual employment cost by the job hours available to recover it. Treat paid leave consistently: if annual wages already include it, do not add it again separately.
Materials: what happens between the quote and the job
Materials cost has two separate failure modes, and both undermine accurate job costing.
The first is cost change: a supplier quote expires, quantities exceed the takeoff, or unexpected site conditions require different materials. AIA's supplementary-conditions guidance specifically recognises unanticipated material-price escalation and discusses identifying price-exposed materials at the bidding stage. A bid that uses a quoted price without an escalation allowance is exposed to margin erosion if the project is delayed before materials are purchased.
The second is misassignment: if paint purchased under Job A is used on Job B without a correcting entry, Job A looks too costly and Job B looks too profitable even though company-wide spending is unchanged. The individual job margins are both wrong even if the total is accurate.
The fix for misassignment is a job identifier applied when materials are ordered, not reconstructed at the end of the month. Record inventory issued from a shared store, correct entries when materials move between sites, and reconcile ordered quantities against invoiced amounts without counting the same commitment twice. Where the work permits it, estimate a defensible waste allowance rather than assuming every purchased unit becomes usable finished work.
An illustrative price-change case. The New Jersey Society of CPAs describes an unnamed mid-Atlantic contractor whose commercial flooring bid locked in material costs that rose significantly before the project started. The price increase was substantial enough to threaten the job's viability. The lesson from that case is not that prices always rise — it is that a job budget needs to distinguish between committed and uncommitted costs as the project progresses, and that a signed contract does not automatically protect margin when it does not include appropriate price-adjustment clauses.
Tracking margin while the job is still in progress
Completed-job reports tell you what happened. A work-in-progress review tells you what the whole job is now expected to cost while there is still time to act.
For a longer job, the WIP view combines the current agreed price, costs incurred to date, open commitments, an estimate of costs still to come, and a forecast final margin. The AICPA describes WIP schedules using contract price, estimated total cost, costs incurred, and billings to date. The surety industry uses the term profit fade to describe actual costs exceeding initial estimates — a pattern visible in WIP data before the project closes.
An illustrative example: a $10,000 job with a $7,000 direct-cost budget. After spending $4,000, the foreman estimates another $4,000 to finish. The revised expected direct cost is $8,000 and the forecast gross profit is $2,000 — 20% of the unchanged contract price, against the 30% originally planned. That 10-percentage-point decline is visible before the last invoice arrives. Investigate whether the remaining cost reflects extra labour hours, higher material prices, or a scope change the client requested. Do not treat an unapproved change request as certain revenue.
Case study: Chico Electric. Chico Electric, an electrical and solar contractor in California, relied heavily on spreadsheets despite having an ERP system in place. Its software provider reports that duplicate data entry was common, and producing executive job-costing reports took close to a week. That delay is the operational problem: a forecast that arrives after the work is done cannot inform decisions about the remaining scope, labour scheduling, or change-order pricing.
Scope changes and change orders. AIA guidance on change orders calls for considering additional cost and schedule effects and obtaining written client approval before proceeding. Recording a requested change without an authorised price is the mechanism by which a profitable job slowly becomes an unprofitable one. Record the changed scope before treating any associated price as secure revenue.
Connecting job margin to your break-even threshold
The markup-versus-margin distinction matters in practice and is worth stating explicitly because it is a frequent source of estimating errors.
To achieve a 38% gross margin on a job with $6,000 of projected direct costs, the required price is $6,000 divided by 0.62, or approximately $9,677. Adding a 38% markup to the cost — multiplying $6,000 by 1.38 — produces $8,280, whose gross margin is only about 27.5%. The two denominators are different. A contractor who consistently prices using the markup calculation while targeting a margin will price below the intended level on every job.
Whether 38% is the right target for any specific job depends on expected volume, overhead level, competitive conditions, and the return the owner needs from the business. The calculation is a tool for pricing consistently toward a target, not a claim about what any particular type of work should earn.
The connection to break-even is direct. If monthly overhead is $18,000, the following illustrates how the required job volume changes with different contribution levels:
Twenty jobs at $900 each exactly covers $18,000 in overhead. Job 21 is the first that begins generating profit. If a contractor believed jobs were contributing $1,400 but actual job costing shows $900, a volume plan built on the old number is structurally inadequate. Overhead allocation can also be applied at the job level to get a fully costed view that includes the overhead each job must cover, which is useful when evaluating whether specific job types are genuinely profitable rather than just contributing positively toward shared costs.
Billing, cash, and the jobs that look profitable but drain cash
Margin answers whether work is expected to earn enough. Billing and collection answer when that work finances payroll and suppliers. A job with a healthy expected margin can still drain cash if it is completed but not billed, or billed but not collected.
The AICPA explains that requisitioning or billing is a cash-flow mechanism, not itself the recognition of revenue. The National Association of Surety Bond Producers defines underbillings as costs and earned profit exceeding billings, and notes that such balances can arise from timing, disputed work, or unapproved changes and can strain liquidity.
Case study: Old Republic Surety. A surety association account describes a contractor whose underbillings had inflated reported working capital by nearly $3 million. One project was 97% complete with $296,000 of underbillings at year-end. Six months later the project was 99% complete, but underbillings had grown to $419,000 despite ongoing losses. The surety excluded those balances from its working-capital assessment because collection was regarded as unlikely. The contractor is not named, and this involves a larger project than most trades businesses run. The lesson still applies to smaller work: a healthy projected margin should prompt a separate check of approved scope, invoices issued, receivables outstanding, and cash collected.
An apparently profitable job that has not been invoiced is financing the client without your knowledge or agreement.
A repeatable process that makes the numbers usable
Case study: S&B Electrical Systems. As this UK electrical contractor grew, its administration became more complex. According to a case study from its systems provider, S&B used many self-employed electricians and needed a workable route from timesheet records to contractor payments and job costs. Its team linked systems so timesheet data could be imported, payments calculated, and costs passed into the accounting system. The provider reports that S&B built written reports showing expenditure and profit by job. The case study does not quantify a before-and-after margin improvement; the change it documents is visibility.
For a smaller trade business, the goal is not necessarily the same software. It is making timesheets, purchases, and job identifiers agree often enough that the owner can trust the job report before bidding the next job. The minimum repeatable process at each stage looks like this:
How Inkle helps
Inkle Books categorises transactions and closes the books monthly, which supplies the underlying data that job costing depends on: accurate material costs, payroll expenses broken out by period, and subcontractor payments clearly recorded. Running meaningful job costing analysis requires that those transaction-level records are accurate and current.
Inkle does not provide job costing software or project management tools — those are specialist functions with dedicated platforms built for them. What Inkle handles is the accounting layer: the bookkeeping, the monthly close, and the financial statements that give you the aggregate view of how the business performed across all completed work.
Inkle handles bookkeeping and tax for owner-operated businesses across the US. See how it works or book a demo to talk through what your business needs.
Frequently asked questions
What is the difference between gross profit per job and overall business profit?
Gross profit per job is revenue minus the direct costs of that job: materials, direct labour, and project-specific subcontractors. Overall business profit subtracts overhead from the total gross profit across all jobs. A job can show a healthy gross margin while the business still loses money if the combined gross profit from all jobs is insufficient to cover overhead.
How do I calculate a fully loaded labour cost for job estimates?
Start with the employee’s hourly wage and add employer payroll taxes (Social Security at 6.2%, Medicare at 1.45%), federal and state unemployment taxes, workers’ compensation insurance, and any benefits costs. Total employer cost per hour is typically meaningfully higher than the bare wage, and using only the wage in estimates while incurring the full loaded cost is one of the most common causes of margins coming in below expectation.
What should I do when a job’s actual costs exceed the estimate?
First identify where the overrun occurred: materials, labour hours, subcontractor costs, or expanded scope. If the client requested additional work, issue a change order before continuing. If it was an estimating error, update the relevant inputs — labour hours, material quantities, waste allowance — so the next similar bid reflects what the job actually cost.
How do I track job costs without specialised software?
Attribute each direct cost to a specific job at the time it is recorded, not from memory at month-end. In software that supports classes or projects, tag each transaction with a job identifier. Without that, maintain a simple job log for each project, recording every direct cost as it is incurred, and reconcile against invoices and time records at completion.
Should I include overhead in my per-job cost calculations?
It depends on the decision. For pricing, allocating overhead to jobs gives a fully loaded cost that ensures each job contributes toward covering fixed costs. For profitability analysis, keeping direct costs and overhead separate gives a cleaner view of job-level gross margin. Many contractors find it useful to track both: gross margin per job for operational insight, and full-cost profitability after overhead allocation for pricing decisions.
.jpg)

.webp)

