A contractor’s books can balance, reconcile to the bank, and still not say which jobs are making money. The books are organized by expense category — materials, labor, subcontractors, fuel — while the owner’s questions are organized by job. Job costing is what connects the two.
This article explains how a job-costing structure is built, what belongs in each job’s cost, which margin a report is showing, and how job costs are reconciled to the ledger. All examples are hypothetical, and the amounts are illustrative only.
Corey Roder, CPA PLLC does not itself perform audits, reviews, or other assurance engagements. This article is general information and not advice about a specific business or set of financial statements.
What job costing is, and what it is not
Job costing means recording each cost against the job it belongs to, by type of cost, when the cost occurs, so a job’s margin can be read while the job is still open.
- It is not bookkeeping by category. A profit and loss statement can show $410,000 of materials for the quarter. It cannot say which of fourteen open jobs used them.
- It is not estimating, but it depends on it. The estimate becomes the job’s budget. Job costing records the actuals so the two can be compared.
- It is not the WIP schedule. Job costing supplies the costs incurred to date. The WIP schedule adds the estimated cost to complete and billings. See The WIP Schedule for Contractors.
The structure: job, cost code, cost type
Every cost needs three pieces of information.
- Job. The job number the cost belongs to. A job should have a number before its first cost is incurred.
- Cost code. The phase or scope item the cost belongs to.
- Cost type. What kind of cost it is: labor, material, subcontract, equipment, or other.
Hypothetical cost codes, by trade:
| Trade | Example cost codes |
|---|---|
| Roofing | Tear-off · Decking repair · Underlayment · Shingle or membrane install · Flashing and sheet metal · Cleanup |
| HVAC installation | Rough-in · Equipment set · Ductwork · Controls and startup · Permits and inspections |
A few rules keep the structure usable:
- Keep the list short enough that the field will use it. A long list tends to get coded loosely. A shorter list used consistently is easier to maintain and easier to compare across jobs.
- Keep one master cost-code structure and select the applicable codes for each job. Every job draws from the same list, and a code means the same thing wherever it is used. A repair job does not need a tear-off code, and an HVAC service job does not need a controls-and-startup code. Selecting only what applies keeps the job clean without breaking comparability.
- Use the same codes in the estimate and in the actuals. If the estimate is built on one set of codes and the costs are recorded on another, budget-to-actual comparison becomes a manual exercise.
- Track approved change orders separately, either with their own cost codes or a job suffix, so base-contract costs and change-order costs can be read separately. This matters for the reasons described in Construction Profit Fade.
- Decide who controls the list. Codes added by whoever needs one are how a clean structure drifts.
Labor: wages are not the cost of labor
The hourly wage is only part of what an hour of labor costs. Labor burden is the additional cost that comes with having the employee, and it typically includes items such as:
- Employer payroll taxes
- Workers’ compensation insurance, whose cost depends on payroll and on how the work is classified
- General liability insurance that is priced on payroll
- Benefits and paid time off
Which items are loaded into the job’s labor cost, and which stay in overhead, is a policy decision. It should be made once and applied the same way in the estimate and in the actuals.
A hypothetical example. A crew member earns $30.00 an hour. The burden items below are made up to show the arithmetic. Your own burden depends on your payroll taxes, insurance rates, and benefits.
| Item | Per hour |
|---|---|
| Wage | $30.00 |
| Employer payroll taxes | $3.00 |
| Workers’ compensation | $4.50 |
| General liability on payroll | $1.00 |
| Benefits and paid time off | $3.50 |
| Loaded labor cost | $42.00 |
On a job that uses 400 labor hours, wages alone are $12,000 (400 × $30.00). The loaded cost is $16,800 (400 × $42.00). If the estimate used the loaded rate and the job cost report uses wages only, the job looks $4,800 better than it is.
Equipment and vehicles
Trucks, lifts, and tools cost money whether or not they are charged to a job. How that cost reaches job reports is a reporting policy, and either approach below can be a deliberate choice.
Keep equipment in overhead. Equipment cost stays in company-wide overhead and is not charged to jobs. This is simpler, and it can be a sound policy where equipment use is similar from job to job. The job report then shows job margin before equipment cost.
Charge an internal rate. Each job is charged an hourly or daily rate for the equipment it uses, so the job report shows equipment cost where the equipment was used.
Neither approach is wrong by itself. What matters is knowing which one a report reflects, and treating the estimate and the actuals the same way. If the estimate prices in an equipment charge, the actuals must carry one. If the estimate leaves equipment in overhead, the job report must leave it out too. A mismatch makes a job look better or worse than bid for reasons unrelated to how the work went.
Usage differences are easy to miss. When equipment stays in overhead, two jobs can show the same margin before equipment even though one used a lift for ten days and the other used hand tools. At a hypothetical internal rate of $15.00 an hour, a job that used 120 equipment hours carries $1,800 of equipment cost, and a job that used 5 hours carries $75. If the bids did not reflect that difference, the equipment-heavy job is being compared with the other on terms that favor it.
How internal equipment charges offset
An internal charge is a transfer, not a new cost. Jobs are charged for the equipment they use, and an equipment cost pool is credited for the same amount. The pool also holds the actual costs of owning and running the equipment: depreciation, fuel, maintenance, insurance, and repairs.
Across the company, the credits to the pool offset the charges to jobs, so total company cost equals the actual cost and nothing is counted twice. What remains in the pool is the difference between actual cost and what was charged to jobs.
A hypothetical truck. The truck costs $18,000 a year to own and operate. It is expected to be on jobs for 1,200 hours, so the internal rate is $15.00 an hour ($18,000 ÷ 1,200).
| Actual hours on jobs | Charged to jobs | Left in the equipment pool | What the balance means |
|---|---|---|---|
| 1,000 | $15,000 | $3,000 | Actual cost not charged to any job (under-recovered) |
| 1,200 | $18,000 | $0 | Fully recovered |
| 1,300 | $19,500 | −$1,500 | Jobs were charged more than actual cost (over-recovered) |
Total company cost is $18,000 in every case. The internal rate only moves it between job reports and the pool. Review the pool balance at least annually, and decide in advance how a remaining balance is treated, for example as overhead or as a reason to adjust the rate. How these costs are classified in the financial statements is a separate question for your CPA.
Overhead and margin: which margin is the report showing?
- Direct job costs are costs that can be identified with a job: its labor, materials, subcontractors, and equipment if it is charged to jobs.
- Field or jobsite overhead is cost tied to field operations but not to a single job, such as supervision across several jobs or shared small tools.
- General overhead is the cost of running the company: office staff, estimators, rent, and insurance not tied to payroll.
Two margins answer different questions.
- Job margin before allocated overhead is contract revenue minus the direct job costs included in the company’s reporting policy. Which costs count as direct, such as whether equipment charged to jobs is included, is set by that policy.
- Fully allocated margin is job margin before allocated overhead minus the field and general overhead assigned to the job.
A hypothetical job. Revenue is $100,000 and the direct job costs under the policy are $70,000. Job margin before allocated overhead is $30,000 (30.0%). If overhead is allocated at 12% of revenue ($12,000), fully allocated margin is $18,000 (18.0%).
Both margins are legitimate, and a report should say which one it shows. The estimate and the actuals must use the same one. A bid margin figured on a fully allocated basis compared with an actual margin before allocations makes a job look better than bid for no reason connected to the work.
Whether to allocate overhead to jobs is a policy choice. If you do, use one consistent allocation base, such as labor hours or labor dollars, in both the estimate and the actuals.
How job costs feed the WIP schedule
The job cost report supplies costs incurred to date. The project manager supplies estimated cost to complete. The WIP schedule uses both to calculate percent complete, earned revenue, and the billing position.
That means the WIP schedule can only be as sound as the coding under it. Costs sitting on the wrong job make one job look better and another look worse. Costs coded late move margin between periods. The costs in the schedule should be reconcilable to the general ledger, as described in the next section. See The WIP Schedule for Contractors for the schedule itself, and What Sureties Look At in Contractor Financial Statements for why the schedule matters to a bonding conversation.
Reconciling job costs to the general ledger
A reconciliation only works when it compares like with like. Before comparing anything, match four things:
- Jobs: the same set of jobs (for example, all jobs with activity in the period).
- Period: the same dates and the same cutoff.
- Cost categories: labor, materials, subcontract, equipment, and other, mapped to the ledger accounts that hold them.
- Accounting basis: the same basis on both sides, including the same treatment of accrued costs.
Two comparisons answer two different questions.
- Current-period job costs against current-period ledger expense. Add up the costs posted to jobs during the period, by category, and compare them with the ledger’s direct cost accounts for the same period. This shows whether what was posted to jobs matches what reached the ledger.
- Cumulative job costs against the WIP schedule. Job cost to date runs from the start of each job through the current period. The WIP schedule’s costs incurred to date should equal the prior balance plus the current period’s postings. A cumulative job figure cannot be compared directly with one period’s ledger expense.
Expect reconciling items, and list and explain each one:
- Costs accrued but not yet invoiced, or invoiced but not yet recorded
- Materials purchased but not yet installed and held in an inventory or similar account (and any WIP adjustment for uninstalled materials)
- Internal equipment charges to jobs and the offsetting credits to the equipment pool
- Payroll differences: field labor and burden on jobs against the payroll register, with office, shop, and training time not charged to jobs
- Costs posted to a balance-sheet account, such as a prepaid, that are not yet expensed
- Retainage payable, which affects the balance sheet and not the cost
- Cutoff differences at period end
- Overhead allocations, if you allocate
An unexplained difference is the finding. It points to a job, a period, a category, or a basis that does not match.
Where job-cost setups can break
These are diagnostic patterns to look for in your own setup:
- Costs posted to a general or uncoded job, so job margin is overstated and overhead looks inflated
- Materials bought for several jobs coded to whichever job is on the invoice
- Subcontractor and supplier invoices arriving without job numbers and coded later from memory
- Payroll split across jobs by estimate or percentage instead of from time records
- Time records submitted after payroll closes, so labor posts to the wrong period
- Equipment charged to jobs in the actuals but not in the estimate, or the reverse
- Change-order costs mixed in with base-contract costs
- Retainage payable to subcontractors handled differently from job to job
- Job cost totals never compared with the ledger and payroll register for the same jobs, period, categories, and basis
- Cost codes that keep multiplying
A practical test
Pick one open job and, without asking anyone, see whether you can find:
- The contract amount, including approved change orders
- Costs to date by cost type
- The budget by the same cost codes
- The estimated cost to complete
- Billings to date
- Gross profit to date, and which margin basis it is on
Then reconcile the job costs to the ledger as described above. Missing answers point to gaps in the reporting process. Check the job structure, coding, timing, responsibilities, and reconciliation before deciding what needs to change.
Who does what
Job costing is a shared process, and the accounting side cannot fix it alone.
- Field and project managers supply the information at the source: job numbers on purchase orders, time records that identify the job and cost code, and cost-to-complete estimates.
- The office codes and approves invoices and runs payroll.
- The accounting function maintains the job and cost-code structure, reconciles job costs to the general ledger, and prepares job cost and WIP reporting on a consistent schedule.
Our work sits on the accounting side. We help set up the job and cost-code structure, maintain the accounting records, and prepare job-level reporting from them. Coding at the source still depends on the people who order, receive, and approve the costs.
Where this connects
If your books balance but you cannot see what each job is making, see Outsourced Accounting. Where the close and job-level reporting need structure, that is Fractional Controller work. For the wider picture of contractor accounting, see Construction & Contractor Accounting. If you are earlier in the process, our earlier article on construction bookkeeping basics covers where to begin.
A review of the current setup — the chart of accounts, the job and cost-code structure, and how costs are being coded today — is a reasonable first step. Start a conversation.
Corey Roder, CPA is the founder of Corey Roder, CPA PLLC. He is a licensed CPA who founded a construction company and served as its COO and CFO, managing the financial and operational decisions of that business. Earlier in his career he worked as an auditor at Grant Thornton. More about the firm: Company & People.
Corey Roder, CPA PLLC does not itself perform audits, reviews, or other assurance engagements. Need an audit, review, or other assurance engagement? We can help coordinate it. Corey Roder, CPA PLLC maintains referral relationships with independent CPA firms that provide these services. The assurance engagement is separately contracted with and performed by the independent CPA firm.