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.

NumberHow to figure itGood rangeWhy it matters
Gross profit per jobContract revenue earned − (job labor with burden + materials + subs + equipment)35–45% remodel, 18–28% new construction, 45–55% service callsIt 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 wages18–35% depending on tradeEstimating with bare wages builds a loss into every bid.
Percent completeJob cost to date ÷ total estimated job costCompared to percent billed, within 10 pointsThe gap between percent complete and percent billed is the cash story of the job.
Net over or under billingTotal billed to date − total earned revenueSlightly overbilled across the portfolioPersistently underbilled means you are financing your customers at zero interest.
Backlog coverageSigned, unstarted contract value ÷ monthly overhead3–6 monthsUnder three months, the slow quarter is already scheduled and you cannot see it yet.
Overhead recovery rateTotal overhead ÷ total direct job costWhatever your markup actually needs to coverMarkup is a guess until it is measured against real overhead.
Cash on hand in weeks(Cash + collectible receivables) ÷ average weekly outflow8–12 weeksConstruction 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.

LedgerDude client dashboard showing monthly income, expenses, cash on hand and open questions
The client dashboard, updated as your books are closed each month.

How to set up contractor KPIs that hold up

  1. 1

    Create a job for every contract

    Even small service work. If cost cannot be coded to a job, it cannot be measured.

  2. 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. 3

    Route deposits to a liability account

    Customer deposits become revenue only as work is earned.

  4. 4

    Code every cost at entry

    Material receipts, sub invoices and time entries carry a job and a cost category from the start.

  5. 5

    Run a work in progress schedule monthly

    Percent complete times contract value gives earned revenue; compare it to billings.

  6. 6

    Bill change orders within a week

    Approved scope that sits unbilled becomes scope you eat.

  7. 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.
Owner, residential remodeling company

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

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.