Skip to content

← Blog

Free Construction Job Costing Spreadsheet (Excel + Google Sheets)

Chris Sibley ·

Here's a free construction job costing spreadsheet that actually works the way contractors do. No email gate, no "starter version" that upsells you at row ten. Download the Excel template here — it opens in Excel and Numbers, and uploads straight into Google Sheets (File → Import in Sheets, formulas included).

What's in it

Three tabs, and the whole system is the discipline of using the second one:

  • Job Summary tab — your job name, contract price, and a budget-vs-actual table by category with a Variance column per line. Below it: Total cost, Profit (contract minus actual), and a live Margin % cell.
  • Cost Log tab — one row per cost: Date, Vendor / who, Category, Amount, Job, Notes, and a Reimbursable? flag. The Summary tab pulls its Actual column from here with SUMIF — you never write a formula.
  • "How to use" tab — the five rules that make it work, starting with the only one that really matters: log every cost the day it happens.

The columns, line by line

The Job Summary budget table uses six cost categories:

  • Labor— your crew's hours at the loaded rate (wage plus payroll taxes and comp), not the bare wage. Underestimating the loaded rate is the most common way a "profitable" job goes sideways on paper.
  • Materials — everything from the lumber package to the $60 fitting run. The small runs are the ones that get away.
  • Subcontractors — each sub invoice as it lands, not the quote from three weeks ago.
  • Permits & fees— permits, inspections, dump fees, the stuff that never makes it into the bid math the first year you're in business.
  • Equipment & rental — the scissor lift weekend, the concrete saw day rate.
  • Overhead allocation— a slice of the truck, insurance, and office that this job should carry. If you don't know your number yet, pick a conservative one and refine it as your books get better.

In the Cost Log, the Categorycolumn must match those names exactly — the SUMIF that feeds the Summary depends on it (that's rule 4 on the How-to tab). The Reimbursable? flag is for costs someone paid out of pocket that the job — or the client — owes back; flag them when they happen or they quietly become your donation to the project.

How to use it without hating it

Make one copy per job. Enter your bid numbers in the Budget column before the job starts — that's your line in the sand. Then the discipline part: every receipt, every sub payment, every dump fee goes in the Cost Log the day it happens. The margin cell updates itself. If it drops under what you bid, you'll know while there's still time to do something about it — that's the entire point of job costing.

A habit that helps: pick a fixed moment — tailgate down, end of day — and log then. Ten rows a week beats a shoebox in January, and the Variance column starts talking to you around week two of any job that's drifting.

Reading the Variance column (the part most people skip)

The Variance column is Budget minus Actual, per category, and it's the whole reason this template earns its keep. A negative number isn't a scolding — it's an early answer to "why?" while the answer still matters. Materials running $900 over in week two of a six-week job means one of three things: you under-bid the category, prices moved on you, or something walked off the site. All three have different fixes, and all three are cheaper to fix in week two than at closeout.

Two habits make the column honest. First, don't "fix" a bad variance by editing the Budget cell mid-job — the bid you wrote before the job started is the measurement stick, and moving the stick teaches you nothing about your next bid. Second, watch Labor closest: it's usually the biggest line, it drifts a day at a time instead of a receipt at a time, and it's the category contractors most consistently under-log. If you only reconcile one line weekly, make it that one.

Payroll days and sub draws — log them like receipts

The template treats every cost the same: one row in the Cost Log. That includes the costs that don't come with paper. When you run payroll, add one row per job those hours went to (Category: Labor). When a sub takes a draw, that's a row the day the check is written — not when the invoice finally shows up. If the client owes it back on a cost-plus arrangement, flag Reimbursable? so it lands on their side of the ledger, not yours. The jobs that blow up on paper are almost never missing the lumber package — they're missing four payroll Fridays and a forgotten draw.

A worked example

If you want to see the stakes with real numbers, I wrote up the $42,000 bathroom remodel that taught me this lesson — I thought I'd hit 30% margin and my accountant found 12%, because $7,500 of receipts never got logged. Every number in that post would have fit in this template's Cost Log. The template exists because it didn't.

Where spreadsheets stop working

I'll be straight with you, because I lived it: the spreadsheet works exactly as long as the entering happens. One job, maybe two — fine. At three-plus active jobs the receipts start winning. The failure isn't the template; it's that data entry competes with your evenings, and your evenings eventually win. The longer version of that trade-off is in job cost tracking apps vs. spreadsheets.

When you hit that point, the fix is capture that doesn't depend on your energy at 7pm: snap the receipt and AI files it to the job, categories and all, in about four seconds. That's what JobCost Prois — this same budget-vs-actual system, with the Cost Log filling itself. It's free on the App Store for 3 projects and 50 receipts a month, no credit card. Get it here.

Template FAQ

Does it work in Google Sheets? Yes — upload the .xlsx to Google Drive and open with Sheets, or use File → Import inside Sheets. The SUMIF formulas carry over.

Can I add my own categories?Yes — add the row on Job Summary and use the identical name in the Cost Log's Category column so the SUMIF picks it up.

One file for all jobs, or one per job? One copy per job. Mixing jobs in one Cost Log is how numbers stop being trusted — and an untrusted spreadsheet stops getting filled in.

What counts as Overhead allocation on one job? A fair slice of the costs that exist whether or not this job does: insurance, the truck, storage, software, your office time. A simple starting method is your last twelve months of overhead divided by twelve, split across the jobs you typically run in a month. Refine it as your books get better — a rough overhead number beats a zero every time, because zero is the one value you know is wrong.

Do change orders get their own rows?The cost side does — log change-order costs like any other cost, in the categories they hit. The revenue side is the Contract price cell: update it when a change order is signed, and note it in the row's Notes so closeout-you remembers why the number moved.

Is there a catch? No email, no watermark, no locked cells. If the template gets your jobs costed, good — that habit is the product. If you outgrow it, you already know where the app is.