KPI Library
Construction and trades KPIs built from job-level books
Gross profit per job, work in progress, backlog coverage and cash on hand: how contractors build each number and what healthy looks like.
The short answer
- A contractor's core number is gross profit per job, and it only exists if labor, burden, materials and subs are coded to the job as they happen.
- Labor burden — payroll taxes, workers compensation, liability insurance and paid time off — usually adds 18 to 35 percent to a wage. Estimating with bare wages guarantees a shortfall.
- Deposits and progress billings are liabilities until the work is earned. Treating them as revenue is the single most common reason a contractor thinks the year was great and then cannot make payroll.
- Work in progress tells you whether you are overbilled or underbilled. Underbilled jobs are a loan you are giving your customer.
- Backlog coverage — signed work divided by monthly overhead — is the early warning system for a slow quarter.
Why the profit and loss lies to contractors
A construction profit and loss reads month by month, but jobs do not. A remodel started in March, billed in April and finished in June will show a fake loss, a fake profit and a fake loss again unless revenue and cost are recognized as the work is earned. That is why so many contractors describe their books as accurate but useless. The fix is job costing plus a monthly work in progress schedule, not a better looking report.
- Customer deposits sit in a liability account until work is performed
- Every hour, material receipt and sub invoice is coded to a job
- Retainage held by a general contractor is a receivable, tracked separately
- Change orders get their own line so scope creep is visible
Labor burden is where estimates quietly break
A $32 an hour crew member costs somewhere between $38 and $43 once employer taxes, workers compensation, general liability and non-billable time are included. Trades with high workers compensation rates, like roofing and framing, sit at the top of that range. We calculate a burden rate per crew type each quarter and apply it in job cost, so estimated gross profit and actual gross profit are measured the same way.
Work in progress in plain language
For each open job we compare cost to date against total estimated cost to get percent complete, then multiply by the contract value to get earned revenue. Bill more than you earned and you are overbilled, which means you are holding customer money. Bill less and you are underbilled, which means you are funding the job yourself. Both are normal; not knowing which one you are is not.
Estimate versus actual is the feedback loop
The point of tracking job profit is not the report, it is the next estimate. When we close a job we compare estimated to actual by cost category — labor, material, subs, equipment — and hand back the variance. Contractors who read that for six months usually tighten estimating accuracy by ten points or more, which is worth more than any expense cut.
What LedgerDude produces for a contractor each month
A job cost report with gross profit per job, a work in progress schedule, an over and under billing summary, an aging report with retainage separated, and a cash runway read against backlog. Plus a short list of jobs that need your attention because they crossed a variance threshold.
Numbers worth watching
Each one is plain math you can check yourself.
| Number | How to figure it | Good range | Why it matters |
|---|---|---|---|
| Gross profit per job | Contract revenue earned − (job labor with burden + materials + subs + equipment) | 35–45% remodel, 18–28% new construction, 45–55% service calls | It is the truth serum for estimating. Averages hide the two jobs that lost money. |
| Labor burden rate | (Employer taxes + workers comp + liability + benefits + non-billable time) ÷ base wages | 18–35% depending on trade | Estimating with bare wages builds a loss into every bid. |
| Percent complete | Job cost to date ÷ total estimated job cost | Compared to percent billed, within 10 points | The gap between percent complete and percent billed is the cash story of the job. |
| Net over or under billing | Total billed to date − total earned revenue | Slightly overbilled across the portfolio | Persistently underbilled means you are financing your customers at zero interest. |
| Backlog coverage | Signed, unstarted contract value ÷ monthly overhead | 3–6 months | Under three months, the slow quarter is already scheduled and you cannot see it yet. |
| Overhead recovery rate | Total overhead ÷ total direct job cost | Whatever your markup actually needs to cover | Markup is a guess until it is measured against real overhead. |
| Cash on hand in weeks | (Cash + collectible receivables) ÷ average weekly outflow | 8–12 weeks | Construction failures are almost always cash timing, not profit. |
Typical results we see
Jobs found losing money in first review
1 in 6
Usually change orders never billed.
Typical burden left out of estimates
22%
Taxes, comp and non-billable time.
Unbilled change orders recovered
$9k–$40k
Per year for a $2M contractor.
A $128,000 kitchen and addition remodel, closed out
- Original contract
- $128,000
- Approved change orders
- $14,500
- Total contract value
- $142,500
- Job labor at burdened cost
- ($41,300)
- Materials
- ($33,800)
- Subcontractors
- ($22,900)
- Equipment and dump fees
- ($3,100)
- Total job cost
- ($101,100)
- Gross profit
- $41,400 (29.1%)
- Estimated gross profit at bid
- $52,200 (40.8%)
What this tells you: The job made money, but it missed the bid by 11.7 points. The variance was almost entirely burdened labor: the estimate used $34 an hour when the true burdened cost was $41.60. Fixing the burden rate improved every bid that followed.
What you see inside LedgerDude
We put gross profit per job and the rest of these numbers on one page, refreshed as your books are closed each month.

How to set up contractor KPIs that hold up
- 1
Create a job for every contract
Even small service work. If cost cannot be coded to a job, it cannot be measured.
- 2
Calculate your burden rate per crew type
Add employer taxes, workers compensation, liability insurance, benefits and non-billable hours to base wages. Recalculate quarterly.
- 3
Route deposits to a liability account
Customer deposits become revenue only as work is earned.
- 4
Code every cost at entry
Material receipts, sub invoices and time entries carry a job and a cost category from the start.
- 5
Run a work in progress schedule monthly
Percent complete times contract value gives earned revenue; compare it to billings.
- 6
Bill change orders within a week
Approved scope that sits unbilled becomes scope you eat.
- 7
Close out every job with estimate versus actual
Compare by cost category and feed the variance straight back into estimating.
Real example
A remodeler doing $2.4M with no idea which jobs paid
Where they started: A six-crew remodeling company invoiced on milestones, deposited everything to income, and coded material receipts to one big Materials expense. Year-end profit looked fine, but they needed a line of credit twice a year to cover payroll and could not explain why.
What we did: We rebuilt eighteen months with job costing, moved deposits into a customer deposits liability, calculated burden rates per crew type, and started a monthly work in progress schedule with an over and under billing summary. Change orders got their own billing checklist.
How it ended up: Four of twenty-three jobs had lost money, all of them from unbilled change orders and understated burden. Bids were repriced using true burden, and change orders were billed within seven days of approval. The line of credit has not been drawn since.
29% → 40%
Average job gross margin
$31,400
Unbilled change orders recovered
2/yr → 0
Line of credit draws
“I always thought my problem was pricing. It was that I never billed for the extra work I already did.”
Questions people ask
Do small contractors really need work in progress reporting?
If jobs regularly cross a month boundary, yes. Without it, monthly profit is an accident of billing timing. If every job starts and finishes inside a month, job costing alone is enough.
Should retainage be counted as revenue?
It is earned revenue and a receivable, but it should sit in its own account so it never gets mistaken for collectible cash. Retainage often sits for months after completion.
What margin should I bid at?
Enough that gross profit across the year covers overhead plus your target net. That is why the overhead recovery rate matters — it turns markup from a rule of thumb into arithmetic.
How do I handle an employee who is part field and part office?
Split the time. Field hours carry burden and hit job cost; office hours are overhead. Putting the whole wage in overhead makes every job look more profitable than it is.
Can you do this in QuickBooks Online?
Yes. We use projects, cost categories and a burden allocation, plus a monthly work in progress schedule kept alongside the file. No separate construction system is required at this size.
Keep reading
Ecommerce KPIs that come straight out of your books
Start with contribution margin per order — for shopify, amazon and etsy sellers doing $200k to $5m a year.
Agency and professional services KPIs from the books up
Start with gross margin per client — for marketing agencies, design studios, consultancies and law or engineering firms.
Short-term rental KPIs measured per unit, per month
Start with net operating income per unit — for airbnb and vrbo hosts and small property managers with 1 to 30 units.
All KPI Library pages
Every industry we have written numbers for, in one list.
Outsourced bookkeeping services
Who does the work behind these numbers each month.
Pricing
Flat monthly plans based on your revenue, with catch-up quoted separately.
Want your books handled for you?
We read your receipts, match your bank activity, and close your books every month. You get one short list of questions and a dashboard that always tells the truth.
