How do I set up job costing so I can see what each job actually cost and what it made?

Applies to: United States · Updated 2026-09-30

Give each job a number when it opens and record that number on every bill, purchase, time record and invoice as it is entered; a per-job result cannot be rebuilt reliably afterward. Capture materials, labor from time records naming the job, subcontractors and other direct costs, and bill against the same job. Decide whether overhead is applied, compare each job with its estimate, reconcile job totals to the ledger, and call a result final only after late bills arrive.

Why must the job go on each cost and billing when it is recorded?

The Defense Department's clause on contractor accounting systems, DFARS 252.242-7006, sets criteria for defense contractors whose contracts include it; two of them describe a structure worth copying: identification and accumulation of direct costs by contract and accumulation of costs under general ledger control, meaning costs gathered by job inside the books, not in a side list.

Assigning jobs afterward, from memory or a bank feed, fails. A feed line shows a payee and an amount, not a job; a bill covering two jobs cannot be split accurately weeks later; hours not tied to a job on the day are guessed. Whatever cannot be placed stays unassigned, and every job looks cheaper than it was.

What counts as one job, and when does it open and close?

The Federal Acquisition Regulation (FAR), which sets cost principles for U.S. government contracts, calls the unit you want results for a cost objective, defined in FAR 31.001 as "a function, organizational subdivision, contract, or other work unit for which cost data are desired". In a contracting or project business it is usually one agreement with one customer for one scope of work. Write these rules down before the first job runs:

  • New job. A new agreement or work order opens a new job, and no job number is reused.
  • Change order. An approved change order stays on the job it changes, with its price and estimated cost.
  • Small and warranty work. You decide once whether each service call or each customer-month is a job, and whether warranty call-backs reopen the original job.
  • Opening. A job opens when the customer accepts the work, before its first cost or deposit, with its price and estimate recorded.
  • Closing. A job closes only after the final check below and afterward takes entries only through a noted reopening.

Which costs belong to a job, and which are overhead?

FAR 31.202 treats costs specifically identified with a final cost objective as its direct costs. FASB's guidance on costs to fulfill a contract, in Accounting Standards Update 2014-09 (paragraph 340-40-25-7), lists five kinds of cost that relate directly to a contract: direct labor; direct materials; allocations of costs such as contract supervision, insurance and depreciation of tools and equipment; costs explicitly chargeable to the customer; and other costs incurred only because the entity entered into the contract, such as payments to subcontractors. Use a narrower working test than FASB's list: would this cost exist without this job? It leaves allocations such as supervision, insurance and tool depreciation in overhead, where they reach a job only through an applied rate. Capture these categories against each job:

  • Materials. These are items bought for the job or drawn from stock for it.
  • Labor. This is the time of the people doing the work.
  • Subcontractors. These are all subcontractor bills for the job.
  • Other direct costs. These include permits, rented equipment, disposal and travel that exist only because of the job.

Capturing materials alone makes every job look more profitable than it was. Treat each kind of cost the same way on every job: the federal cost principles for government contracts, in FAR 31.202, bar charging a cost as direct "if other costs incurred for the same purpose in like circumstances have been included in any indirect cost pool". The same section lets a direct cost of a minor dollar amount be treated as indirect if the treatment is consistently applied to all final cost objectives and produces substantially the same results as treating it as direct.

How does labor reach a job?

A payroll run shows what each person was paid, not where they worked, so labor reaches jobs only through time records that name the job. The DFARS 252.242-7006 criteria include a timekeeping system that identifies employees' labor by cost objective and a labor distribution system that charges direct and indirect labor to the appropriate cost objectives.

When employees work several jobs in a day, this is a precondition, not a refinement: each person logs hours per job on the day, with codes for time that belongs to no job, such as shop time, travel between jobs and training, and someone other than the employee approves the record where staffing allows. Without it, job cost either omits labor, which overstates every margin, or spreads it by guess, which misstates each job's margin in either direction.

Choose one cost basis for those hours and write it down:

  • Pay rate. Each hour is costed at gross hourly pay, and employer payroll taxes, insurance, benefits and paid leave stay in overhead.
  • Loaded rate. Each hour carries gross pay plus those employer costs, which then stay out of overhead, because counting them in both the rate and overhead charges them twice; FAR 31.203 applies the same rule to government contracts.

For salaried staff, divide pay by expected hours. Each pay period, job hours at the rate go to their jobs and indirect hours to overhead; recording the payroll run itself is a separate question. The distribution moves cost the payroll run has already recorded. Debit job labor, carrying the job, for job hours at the rate, and debit the indirect labor account for indirect hours. Credit the account the payroll run debited, or a labor clearing account it posts to. Under a loaded or salaried rate, what remains in that account is the gap reconciliation step 4 explains. If your payroll posting already splits wages by job, do not distribute them again. If you work on jobs without being on payroll, record your hours and either add a stated rate in the job report or say the margin includes your own pay.

How do billings attach to the same job?

Every contract price, change order, deposit and invoice carries the job; a cost-only setup says what a job cost, never what it made. The billing arrangement decides what else the record carries, and margins compare only between jobs on the same arrangement:

ArrangementThe job record also carriesWhat the margin shows
Fixed pricePrice, approved change orders and the estimate by categoryThe margin tests the estimate and how the job was run
Time and materialsBillable and non-billable hours, billing rates and materials billedFAR 16.601 describes hourly rates "that include wages, overhead, general and administrative expenses, and profit", so the margin over direct cost must cover overhead before profit
Cost plus a feeWhich costs the contract reimburses or excludes, and the fee termsLargely the fee less excluded costs
Unit priceUnit rates and the quantities completed and billedCost per unit against each rate, readable only if quantities are recorded

Retainage held back from progress billings is a separate question.

Should overhead be applied to jobs, and what does the margin mean without it?

Choose one path and print it on every job report:

  • Direct costs only. The margin is revenue minus direct cost, which is the job's contribution toward overhead and profit, not its profit.
  • Applied overhead. FAR 31.203 has indirect costs grouped logically, each group allocated by "an allocation base that is common to all cost objectives to which the grouping is to be allocated" and on the benefits accruing to them. If overhead follows crew time, direct labor hours or cost may be that base; set a rate from a past period's overhead divided by that period's total base, and give each job its base times the rate.

The same FAR section accepts less precise methods that achieve substantially the same results, so one business-wide rate can be enough. Add applied overhead in the job report rather than posting it, compare it with actual overhead each period, and revise the rate when the gap persists.

The costly mistake is judging a direct-only margin against a price set to cover overhead: the job can look healthy and still lose money. Use a job's result to price the next of the same kind only when both sit on the same labor basis, overhead path and billing arrangement.

What happens to a cost that arrives without a job?

Each point where costs enter the books needs a habit that puts the job on at entry:

Where the cost entersHow the job gets on it
Supplier billEntered with job and category; a bill for several jobs is split by line
Card or cash purchaseThe buyer notes the job at purchase, and the bookkeeper matches the bank or card line to that note
Materials from stockAn issue record naming the job
Subcontractor billEntered against the job and its subcontract
TimeA job or indirect code on each daily entry
Journal entryA job on every line touching a job-cost account
Invoice, change order or depositThe job, entered by whoever raises it

Make the job a required field wherever your system allows. Anything entered without one goes to a single holding code such as "Unassigned", never without a job into a job-cost account, and the person who can identify the job clears it weekly from the documents. A cost that genuinely serves several jobs goes to overhead or is split on a stated basis when entered. Moving a cost between jobs is an adjusting entry, and the DFARS 252.242-7006 criteria include approval and documentation of adjusting entries, so record the reason and the approver. List the holding-code total on every job report.

Which reports should the setup produce?

Build each report from the ledger, so it agrees with the books:

  • Job profitability. It shows revenue, cost by category and margin for each job to date, after overhead too if you apply it.
  • Estimate against actual. It sets each category's estimate, revised for approved change orders, beside actual cost.
  • Job cost detail. It lists every transaction on a job with its source document, for whoever runs the job to review.
  • Unassigned and indirect. It shows the holding code and the hours booked to no job.
  • Open jobs. It shows each job's status and the date of its last cost.

Record estimates in the same categories and on the same labor and overhead basis as actual cost, or the difference measures the change of basis, not the job. Available reports depend on your system; choosing between accounts, classes, tags or another tracking dimension is its own question.

A job running across months has two views: job to date, adding every cost and billing since it opened, and the period, showing one month's entries. Both are correct and answer different questions. How costs not yet billed, and billings ahead of the work, are treated at period end is a separate question.

How do I prove the job totals agree with the ledger?

The DFARS 252.242-7006 criteria include reconciling subsidiary cost ledgers and cost objectives to the general ledger and determining costs charged to a contract at least monthly. Reconcile each month, with job reports and ledger on the same basis and dates:

  1. For each account carrying job costs, add the month's amounts on jobs, in the holding code and under an indirect code.
  2. Compare that total with the account's ledger balance for the month, which it should match exactly.
  3. Compare the month's billings by job (on the cash basis, collections by job) plus non-job amounts with the accounts those billings post to: revenue and any customer-deposit or advance-billing account.
  4. Compare labor charged to jobs plus indirect labor with payroll cost, and explain any gap a loaded or salaried rate creates.
  5. Trace each difference to its entry, usually a missing job, a job on the wrong account or a journal entry without a job, and correct it with a documented entry.

Applied overhead, kept outside the ledger, is not part of this check. The reconciliation proves every amount in the job-cost accounts is on a job, in the holding code or coded indirect, not that each cost sits on the right job; the job cost detail and estimate review catch that. A job spreadsheet kept apart from the books drifts from them, so reconcile any such file the same way.

When is a job's result final?

Work can finish weeks before its costs do. Keep a finished job marked complete but not final until these checks pass:

  • Every purchase order and subcontract for the job has a matching bill, or a note that none will come.
  • Every subcontractor's final bill is in.
  • All time records for the job's dates are approved and distributed.
  • The final invoice and every change order are billed.
  • The holding code holds nothing belonging to the job.
  • A month-end reconciliation has been completed after the last day of work.
  • Every supplier used on the job has confirmed, or its next statement shows, that nothing for the job remains unbilled.

On cash-basis books a bill reaches the job when paid and an invoice when collected, so a job is final only once both are settled; on accrual books, once they are recorded. A bill arriving after that still goes to the job through a noted reopening, not to overhead, and whoever used the result is told.

How do I start when jobs are already under way?

Pick a start date. Jobs opened after it follow the whole setup from their first cost. Give each job already running one of two labels:

  • Complete history. Add the job to its earlier bills, receipts and invoices already in the books, back to its first cost, where your system allows it without changing amounts or dates, and record its estimate. Earlier hours count only if earlier time records name the job. If they do not, label the job partial, because its labor is incomplete.
  • Partial. Where earlier costs cannot be traced, report only work after the start date against the estimate for that work, and keep the job out of comparisons and pricing.

Neither path posts an opening balance: earlier costs are already in the books, and a separate entry would count them twice. On the cash basis, a bill or invoice open at the start date has not yet reached income or expense; it reaches the job once, when paid or collected, so give it the job now if it is already entered as an open item, or at payment. On accrual books, an open bill or invoice already recorded has already counted and needs only the job added.

What does one job look like from opening to close?

Job 2417 is an invented fixed-price bathroom remodel at 38,500, kept on the accrual basis, with labor costed at 42.00 an hour on the pay-rate basis, so employer payroll costs sit in overhead. Its estimate allowed 120 labor hours. Every record carries job 2417 as it is entered:

StepRecordCategoryAmount
1Job opened on signing, price and estimate recordedEstimate20,640.00
2Deposit invoice, 30 percent of the priceBilling (deposit)11,550.00
3Supplier bill, another job's lines split offMaterials7,860.00
4Card receipt, job noted at purchaseMaterials345.00
5Plumbing subcontractor billSubcontractors6,500.00
6Change order signed at 1,800, estimated electrical costEstimate1,100.00
7Electrical subcontractor billSubcontractors1,100.00
8Permit and dumpster billsOther direct930.00
9Time records, two employees, 134 hours at 42.00Labor5,628.00
10Progress invoice, 40 percent of the priceRevenue15,400.00
11Final invoice, 30 percent plus the change orderRevenue13,350.00
12Supplier bill arriving three weeks after the last site dayMaterials612.00

The closed job compares with its revised estimate as follows:

CategoryRevised estimateActualDifference
Materials8,200.008,817.00617.00
Labor5,040.005,628.00588.00
Subcontractors7,600.007,600.000.00
Other direct900.00930.0030.00
Total direct cost21,740.0022,975.001,235.00

Its billings total 40,300.00, the full price with the change order, so the direct margin is 17,325.00; called final before step 12, the job would have shown 17,937.00. With overhead applied at an invented 26.00 per direct labor hour, the job carries 3,484.00 of overhead and a margin after overhead of 13,841.00.

What should I check before the first job runs?

Run this check before the first job and whenever a new way of buying or billing starts:

CheckDone when
Job definitionRules for new jobs, change orders, small and warranty work, opening and closing are written
IdentifierA unique job number is required on every bill, receipt, time record, invoice and job-cost journal line
Capture pointsEach route in the capture table has an owner
LaborTime records carry a job or indirect code, and the cost basis is written
Overhead and estimatesReports state the overhead path, and estimates use the categories and basis of actual cost
Holding codeIt exists and is cleared weekly
Report setThe five reports run from the ledger
ReconciliationJob totals, billings and labor tie to the ledger monthly
ClosingThe final check and the late-bill rule are written
Jobs under wayEach running job is labeled complete history or partial
Sources
  1. U.S. Department of Defense (Code of Federal Regulations, published by the U.S. Government Publishing Office) — 48 CFR 252.242-7006, Accounting system administration, revised as of October 1, 2025
  2. U.S. General Services Administration, Acquisition.gov (Federal Acquisition Regulation) — FAR 31.001, Definitions, FAC 2026-01, effective 03/13/2026
  3. U.S. General Services Administration, Acquisition.gov (Federal Acquisition Regulation) — FAR 31.202, Direct costs, FAC 2026-01, effective 03/13/2026
  4. Financial Accounting Standards Board — Accounting Standards Update No. 2014-09, Revenue from Contracts with Customers (Topic 606), May 2014
  5. U.S. General Services Administration, Acquisition.gov (Federal Acquisition Regulation) — FAR 31.203, Indirect costs, FAC 2026-01, effective 03/13/2026
  6. U.S. General Services Administration, Acquisition.gov (Federal Acquisition Regulation) — FAR 16.601, Time-and-materials contracts, FAC 2026-01, effective 03/13/2026

Machine-readable: markdown · JSON