A contractor once described the problem exactly: "Our margin was 24 percent, then 19, then 26, and none of the jobs changed." Nothing operational had changed. What had changed was which costs were being counted as cost of the work.
Direct cost versus overhead is not an accounting technicality. It determines whether your margin number is comparable to last month, comparable between jobs, and usable for pricing. Here is where the line usually goes, and where it gets argued about.
Why the boundary matters more than the classification
There is no single correct answer for every cost. Reasonable firms treat small tools, vehicle costs, and project management salaries differently, and all of them can defend the choice.
What is not defensible is changing the answer. Gross margin is a comparison instrument. Its whole value is in reading this month against last month, this job against that job, this year against last year. A definition that shifts destroys the comparison, and worse, it destroys it invisibly: the number still looks like a margin.
So the practical rule is: decide once, write it down, apply it every month, and revisit it deliberately at year end rather than transaction by transaction. A margin defined slightly imperfectly but consistently is far more useful than one defined perfectly this month and differently next month.
What normally sits above the line
Direct costs are costs that exist because a specific job exists. If the job had not been won, the cost would not have been incurred.
- Field labor wages. Hours worked on jobs by crews, foremen when they are on the job, and working owners for the time they spend in the field.
- Labor burden on that labor. Employer payroll taxes, workers compensation, and often benefits, allocated on the same basis as the wages.
- Materials for a specific job. Purchased and consumed on the work.
- Subcontractors. Invoiced against a job.
- Rented equipment for a job. The excavator hired for two weeks on one site.
- Permits and inspection fees. Job specific by definition.
- Dump and disposal fees. Where they can be attributed to a job, which is usually.
- Job specific travel, lodging, and per diem. On out of area work.
- Bonds and job specific insurance. Where a bond or policy was required for a particular contract.
The unifying test is causation, not amount. A $400 permit is a direct cost. A $40,000 general liability premium covering all work in the year is not.
What normally sits below the line
Overhead is the cost of being in business, incurred whether or not any particular job was won.
- Office and administrative salaries. Bookkeeping, dispatch, reception, and the owner time spent running the company rather than the work.
- Rent, utilities, and yard costs. The shop and the office.
- General insurance. General liability, commercial auto, umbrella policies not tied to a contract.
- Software, phones, and technology. Estimating, accounting, and field software subscriptions.
- Marketing and business development. Including estimating time on jobs you did not win.
- Professional fees. Legal, accounting, and advisory.
- Financing costs. Interest, line of credit fees, and merchant processing.
- Depreciation on owned equipment. Unless you allocate it by a consistent documented method.
Estimating cost deserves a note. Time spent estimating a job you won is arguably a direct cost of that job, but time spent on the four you lost is unambiguously overhead. Because the two are hard to separate cleanly, most small contractors put all estimating cost in overhead. That is a reasonable choice as long as it is the same choice every month.
The five costs that cause the most disagreement
1. Labor burden
The most consequential one. Raw wages understate the cost of labor by a wide margin once employer taxes and workers compensation are included, and construction workers compensation rates are high enough that the gap is material.
If burden sits in overhead while wages sit in direct cost, every job looks more profitable than it is, and the overstatement is largest on the most labor intensive jobs. That is precisely backwards from what you want, because labor heavy work is where margin discipline matters most.
Treat burden as direct cost, allocated on the same basis as the wages. Where a transaction level allocation is impractical, a documented burden rate applied consistently is much better than leaving it out.
2. Small tools and consumables
Blades, bits, fasteners, tape, blades again. Individually trivial, collectively not.
Two defensible treatments: attribute them to jobs where the purchase is clearly for one job, or put all of it in overhead on the grounds that attribution costs more than it is worth. Either works. What does not work is attributing them when someone remembers and not when they do not, because then margin varies with bookkeeping attention rather than job performance.
3. Vehicles and fuel
Trucks are used for jobs, for material runs, for estimating, and for commuting. Most small contractors treat vehicle cost as overhead because splitting it requires mileage records nobody keeps.
If vehicle cost is large relative to your revenue, a documented allocation, for example by field labor hours per job, produces a more honest margin. If it is small, overhead is fine. The deciding factor is materiality, not principle.
4. Project management and supervision salaries
A superintendent running four jobs is clearly a cost of the work, but not of any one job. Firms split roughly evenly between treating supervision as direct cost allocated across active jobs, and treating it as overhead.
Allocated is more informative if you have a reasonable basis, such as labor hours or contract value. Overhead is more honest if you do not, because an allocation with no basis is just noise given a decimal point.
5. Owned equipment
Rented equipment for a job is a direct cost with no ambiguity. Owned equipment is harder: the cash went out years ago, and depreciation, maintenance, and financing continue regardless of which job uses it.
The informative approach is an internal equipment rate charged to jobs, offset against the equipment cost pool. It is also the approach most likely to be abandoned. If you are not going to maintain it, put owned equipment cost in overhead and know that equipment heavy jobs are being flattered.
Should you allocate overhead to jobs at all?
This is a different question, and the answer for most small contractors is: not in the accounting, yes in the pricing.
Allocating overhead into job cost gives you a fully burdened job result, which sounds better and is harder to interpret. The allocation basis is always somewhat arbitrary, so a job can look unprofitable because of the allocation method rather than the work. That is a bad thing for a report whose job is to change field and pricing decisions.
Keep gross margin clean: revenue less direct cost. Then handle overhead in pricing by knowing what gross margin you need to cover overhead and leave a profit. If overhead runs at a certain level per year and you expect a certain revenue volume, the required gross margin percentage follows arithmetically. That is a pricing target, and it is more actionable than a fully allocated job report.
The one exception is contract requirements. Some cost reimbursable or government contracts specify overhead allocation methods, and then the contract governs.
Tax treatment is a separate question
How a cost is classified for management reporting and how it is treated for tax purposes are not the same question, and they do not have to give the same answer.
Certain construction contract accounting rules, capitalization requirements, and method elections affect the tax return without affecting whether a cost is useful to see above the gross profit line in your monthly reporting.
Meridian Ledger Group LLC does not provide tax advice and does not prepare or file tax returns. The right sequence is to set up management reporting so it answers your operating questions, and to have your CPA or tax professional tell you where the tax treatment differs. Both can be true at once, and a well organized file makes the reconciliation between them straightforward rather than painful.
Writing the policy down
The policy does not need to be long. One page covers it, and having it written is what makes it survive staff changes and busy months.
It should state, for each cost category, whether it is direct or overhead, and if direct, how it gets allocated. It should name who codes it and when. And it should have a date, so you know which periods were governed by which version.
- List your recurring cost categories, straight off last year Profit and Loss.
- Mark each one direct or overhead.
- For anything direct that is not naturally job specific, write the allocation basis.
- For anything genuinely borderline, write the choice and one sentence of reasoning.
- Date it, and note that changes take effect at the start of a fiscal year rather than mid year.
That last point matters. Changing the boundary mid year makes the year internally inconsistent and the comparison useless. If you decide in July that burden should move above the line, the honest options are to apply it from January and restate, or to apply it from the next fiscal year. Applying it from July and comparing to June is the one option that produces a misleading number.
What to do if your history is already inconsistent
It usually is, and that is a normal starting point rather than a crisis.
The temptation is to reclassify years of history. Resist it unless there is a specific reason, such as a lender or a CPA requiring it, because the work is substantial and the resulting numbers are still reconstructions.
The better approach: pick a clean start date, usually the beginning of the current fiscal year or the current quarter. Write the policy. Apply it consistently from that date. Treat the earlier history as approximate and label it that way in your own mind when comparing.
Two accurately defined quarters give you a comparison you can trust. Three years of inconsistently defined history give you a trend line that means nothing. If the underlying file is also unreconciled, that comes first, since reclassifying transactions in a file that does not tie to the bank means doing the work twice. Meridian handles that sequence as cleanup and catch-up, and the boundary policy is set as part of it.
The short version
There is no universally correct classification for every construction cost, so consistency beats theoretical precision. Put field labor, burden, materials, subcontractors, and job specific costs above the gross profit line, put the cost of being in business below it, write the policy down with a date, and change it only at a fiscal year boundary.