A per-project P&L that finds the estimate by direct link, estimate_link_id or SmartBuild job id, pulls estimated material and labour from the snapshot, then prices actual labour from approved time entries by the crew's pay model and adds approved expenses and supplier POs.
Also called: did we make money on this job · job costing · margin per job · actual vs estimate
Estimate against actual while the job is still open
The quoted price and the estimated material and labour come off the estimate; the actuals come off approved time, approved expenses and supplier orders for that project; the margin is computed from both. You find out the framing is running hot in week two, not from your accountant in March when the only thing left to do is remember it next time.
Each crew is priced the way that crew is actually paid
Per-unit crews price units times rate. Hourly and cost-plus crews price hours times rate. A lump-sum crew contributes its agreed lump once, not once per timesheet row. Multiplying a fixed bid by the number of entries somebody submitted is how a job cost report quietly becomes fiction.
Only approved hours and receipts reach the actuals
Everything the portals submit lands as submitted and waits in one approvals screen, with a pending count in the nav so you know what is outstanding. Approving or rejecting flips the same rows the P&L reads. Nothing a crew types can move your job cost until a manager has looked at it.
Spend carries a job, a stage, a category and a receipt
Amount, category, vendor, company card or reimbursable, and a photo of the receipt, filed against the project and the stage it was incurred on. Receipts in a glovebox and a card statement in a different system are not a cost code, and reconstructing one from the other in January is not job costing.
It finds the estimate the customer actually agreed to
The P&L links to the estimate by direct project link, then by the project's estimate link, then by its SmartBuild job id. The revenue line is the number on the document the customer signed, not a figure re-typed into a costing sheet where it can drift.
- 1Revenue comes from the estimate's total_amount or the snapshot's grand total.
- 2Actual labour: per_unit crews price units x rate, hourly and cost-plus price hours x rate, lump-sum crews contribute their agreed lump once each rather than per entry.
- 3Actual expenses are approved labor_expenses; actual materials are supplier_orders totals for the project.
- 4margin = revenue - (labour + expenses + materials), with a percentage when revenue is positive.
Builders find out whether a job made money once the job is over, which is far too late to do anything about the one running now. Every job shows estimated against actual for labour and expenses as the work happens, so a stage running over surfaces while there are still stages left to adjust. Only approved entries count toward actuals, and a fixed-bid crew is counted once at their bid rather than multiplied by however many entries they happened to file.
- Job margin only knowable in hindsight from accounting.
- Actual labour cost not derivable from time data.
- Fixed-bid crews double-counted per time entry.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →