Blog / Jobs
Job costing for roofing companies: how to know which jobs made money

Ask a roofing owner which job made the most money last year, and most will guess. Revenue is easy to see. Profit per job is not, because costs land in the bank account in a pile, not next to the job they belong to.
Job costing fixes that. It is not complicated, and it is the single most useful number in a contracting business.
What job costing means
For every job you track two things:
- What the customer pays: the contract amount plus approved change orders.
- What the job costs you directly: materials, crew labor, subcontractors, dumpsters, permits, equipment rental.
The difference is the job's gross profit. Divide it by the contract amount and you get the margin. Do it for planned costs before the job starts, and for actual costs as they come in.
An example: one reroof, planned vs actual
| 32-square reroof | Planned | Actual |
|---|---|---|
| Contract | $28,000 | $28,000 |
| Materials | $9,800 | $10,900 |
| Crew labor | $6,200 | $7,100 |
| Gutters (sub) | $1,500 | $1,500 |
| Dumpster and permit | $900 | $900 |
| Gross profit | $9,600 | $7,600 |
| Margin | 34% | 27% |
Example data for a fictional company.
The job still made money. But $2,000 disappeared into extra materials and an extra crew day. If that happens on every third job, it is the difference between a good year and a tight one. And nobody sees it in the bank balance.
Why QuickBooks and the bank don't show this by default
A bank statement shows a supplier payment of $10,900. It does not say which roof it was for. A standard Profit and Loss report adds up all materials for the month. Unless every cost is tagged to a job, the per-job picture never appears.
How to set it up
- Give every job a name or number the whole team uses: on the estimate, the supplier order and the crew schedule.
- Write down the planned costs when you sign the contract. Your estimate already has them.
- Tag every cost to a job as it happens: supplier invoices, sub invoices, crew hours. Costs that don't belong to one job (office, trucks, insurance, marketing) are overhead and stay separate.
- Compare planned vs actual every week while the job is running, not after the season.
- Close the job when the last payment comes in, and look at the final margin.
Where roofing margin usually leaks
- Change orders done but not billed. Extra decking or flashing gets installed, and the paperwork never happens.
- Material returns not credited. Leftover bundles go back to the supplier, but the credit never lands on the job.
- Materials moved between jobs. Leftovers from one roof get used on another, and one job looks better than it was.
- Warranty callbacks. Crew time on an old job is a real cost. Track it, or it hides inside a new one.
- Underestimated tear-off. Two layers instead of one, rotten decking. If it isn't in the contract, it comes out of the margin.
What to do with the numbers
After a few months you will see patterns: which job types pay best, which crews run over, which suppliers creep up in price, which salesperson discounts too much. That is where pricing and hiring decisions come from.
Trinity does this from your bank and card transactions: every cost is sorted to a job, and you see planned vs actual margin for every roof while it is still running. Our team checks the sorting every week, so you don't have to.
This article is general information, not tax, legal or accounting advice. Trinity CEO is not a CPA firm. Talk to your CPA about your situation.