Contractors and trades
What a contractor's books have to track that other businesses do not
Last reviewed: August 2026
How job costing, labour burden and work in progress should be set up in an Ontario contractor's books, and what a good monthly close produces.
A contractor's books have to answer a question no other small business asks: which of the jobs you are running right now is making money, and how much of what you have already collected is for work you have not done yet. A retailer knows by looking at the till. A contractor with $600,000 in the bank can be having a bad year and not find out until the accountant closes the file in April.
The reason is timing. You buy material in March, pay the crew in March and April, invoice at the end of April, get paid in June, and wait until November for the holdback. Meanwhile a $24,000 deposit for a job that starts in August landed in the same account, and 10% of everything you have billed this year is sitting in someone else's bank as a holdback. The balance you are looking at is a blend of four jobs at four different stages plus money that is not yours, and it tells you almost nothing about profit.
Job costing that people actually use
Every cost has to carry a job number and a cost code from the moment it enters the system, because nobody can allocate a $4,800 lumber invoice correctly in July from a receipt dated in April.
Keep the code structure short enough that a foreman will use it. Four or five categories per job covers most trades:
| Cost code | What lands in it | Where it comes from |
|---|---|---|
| Direct labour | Field hours at fully burdened cost | Timesheets coded to the job daily |
| Materials | Everything consumed on that job | Supplier invoices with the job on the PO |
| Subcontractors | Trades you hired for that job | Sub invoices, tracked by supplier record |
| Equipment | Rentals, and an internal rate for owned gear | Rental invoices and equipment hours |
| Other job cost | Permits, disposal, hoarding, temporary power | Coded when entered |
Sixty cost codes on a residential renovation job produces sixty ways for the crew to code something wrong. Start narrow and add detail only where you are going to use it for pricing.
Owned equipment needs an internal rate, being roughly what the machine costs you per hour in financing, fuel, maintenance and eventual replacement, charged to the job that used it. Otherwise the excavator looks free on every job and expensive only in the month the transmission goes.
Subcontractor cost belongs in its own accounts rather than folded into materials, both so a mixed invoice gets split at entry and so the year's subcontractor total is a report rather than a reconstruction when the T5018 falls due in June.
Labour burden is not the hourly rate
The number a contractor prices with is usually the wage. The number that leaves the bank is considerably larger, and the gap is called burden.
Take an hourly electrician at $38, working a 50-week year, using 2026 figures. This is an illustration, and the WSIB rate in it is the 2026 rate for one construction rate class, not yours.
| Line | Amount |
|---|---|
| Hours worked, 50 weeks less nine public holidays | 1,928 |
| Wages at $38 an hour | $73,264 |
| Public holiday pay, nine days at eight hours | $2,736 |
| Vacation pay at 4% under the Ontario ESA | $3,040 |
| Gross earnings | $79,040 |
| Employer CPP at 5.95% to the 2026 maximum, plus CPP2 at 4% | $4,408 |
| Employer EI at 1.4 times 1.63%, capped at $68,900 | $1,572 |
| WSIB at $2.15 per $100, rate class G5 | $1,699 |
| Total cost to the company | $86,719 |
| Hours actually charged to jobs, after shop time, loading, training and weather | 1,750 |
| Cost per productive hour | $49.55 |
The figures behind that table are CRA's CPP rates and EI rates for 2026, the vacation pay and public holiday entitlements in the Employment Standards Act guide, and WSIB's 2026 premium rates, where construction rate classes run from $1.54 to $3.55 per $100 of insurable earnings. Your own rate, the reconciliation and the executive officer treatment are covered in our post on WSIB for Ontario trades.
$49.55 against a $38 wage is 30% on top, and that is before a truck, a phone, a shop or any supervision. A contractor pricing labour at $38 plus a markup for overhead has already given away the burden without noticing.
Billing ahead of the work, and working ahead of the billing
This is the part that makes a contractor's balance sheet different, and it is the part most often missing.
On any job you are either over-billed or under-billed. Take two jobs open at month end.
| Job A | Job B | |
|---|---|---|
| Contract value | $180,000 | $150,000 |
| Estimated cost at completion | $144,000 | $120,000 |
| Cost incurred to date | $86,400 | $60,000 |
| Percentage complete on cost | 60% | 50% |
| Revenue earned | $108,000 | $75,000 |
| Billed to date | $126,000 | $54,000 |
| Position | Over-billed $18,000 | Under-billed $21,000 |
Job A has billed $18,000 more than it has earned, so it is holding money for work not yet performed. That is a liability, usually called billings in excess of costs and estimated earnings. Job B has performed $21,000 of work not yet billed, which is an asset. Neither belongs in revenue for the month.
Now the reason it matters at year end. A contractor who books revenue as it is invoiced and finishes the year $62,000 net over-billed across all open jobs has recorded $62,000 of revenue for work still to be done, with the cost of doing it landing next year. The year looks like it made money and the following spring does not, and nothing in the bank statement explains why. Run it the other way, with a business that is habitually under-billed because nobody chases change orders, and a genuinely good year gets reported as a mediocre one.
Your financial statements and your tax return can differ here, and where they do the difference is a reconciling item rather than a reason to change the bookkeeping. Holdbacks have their own timing rules for both revenue and HST, which we set out in construction holdbacks and HST timing.
The chart of accounts a contractor needs
An off-the-shelf small business chart of accounts is missing about eight accounts a construction business cannot do without.
| Account | Why it is separate |
|---|---|
| Holdback receivable | Not collectible yet, so it distorts the AR aging |
| Holdback payable | Owed to subs, not due in 30 days |
| Costs in excess of billings | Under-billed work, an asset |
| Billings in excess of costs | Over-billed work, a liability |
| Customer deposits | Money taken before work starts, not revenue |
| Job costs, by category | Labour, materials, subcontractors, equipment |
| Equipment and vehicle costs | Charged to jobs at an internal rate |
| HST payable and HST recoverable | Reconciled to the billing schedule, not the bank |
One bucket called "materials" is the most common version of this problem. It makes every job margin an estimate and it makes the bookkeeping unusable for pricing.
Estimate against actual, by job
Once cost codes and burden are in place, the report that changes decisions is the one comparing the estimate to the actual for every completed job. A year of it usually looks something like this.
| Work type | Jobs | Revenue | Estimated margin | Actual margin |
|---|---|---|---|---|
| Service calls and small repairs | 214 | $310,000 | 35% | 38% |
| Residential renovation | 9 | $980,000 | 22% | 12% |
| Commercial fit-out | 3 | $640,000 | 18% | 19% |
The renovation work is the work the owner talks about, and it is carrying a tenth of the margin it was priced at, usually because change orders were done on a handshake and the extra site time was never billed. The service calls nobody wants to send a truck for are funding the company. That conclusion is only available to a business that codes its costs, and it is the sort of thing our advisory work is built on.
What a good month looks like
- Reconcile everything. Bank, credit cards, the supplier accounts and the loan balances. Job cost reports built on unreconciled data are worse than no report, because people act on them.
- Update the WIP schedule. Every open job listed with contract value, approved change orders, cost to date, estimated cost to complete, revenue earned and amount billed. This is the schedule your banker and your bonding company will ask for, and it is the one that tells you which jobs are slipping while there is still time to do something.
- Run job margins. Completed jobs against their estimates, open jobs against their budgets.
- Build the HST working. Tax collected from the billing schedule, input tax credits from the cost ledger, holdbacks excluded until they are released.
- Check the payroll and sub file. Timesheets coded, WSIB clearances current for every sub you paid, subcontractor business numbers on the supplier record.
That takes a bookkeeper who understands construction rather than one who codes bank feed transactions, which is most of what our work with contractors involves in the first few months of a file.
Software helps, once the structure exists
Job costing works far better in software that was built for it than in a spreadsheet kept beside the accounting file. We use QuickBooks Online with projects and classes for most contractor clients, and it handles job-level cost and revenue tracking well enough for a business running a handful of jobs at a time. Contractors running large volumes of change orders, progress billing schedules and detailed WIP reporting often outgrow it and move to a construction-specific package. Either way the software is not the thing that makes job costing work. Coding time and material to the right job on the day it happens is, and no product fixes a timesheet that says "Tuesday, site".
All of our contractors and trades work
General information only, current at August 2026. Tax rules change and GST/HST status is fact-specific. Confirm your own position before relying on anything here.