Jump to…
- The variance card
- How "predicted" is calculated
- How "actual" is calculated
- Open a line and it shows its work
- Change the base rate without losing the adjustment
- Logging actual crew days doesn't touch your estimate
- Type what labor actually cost
- Subbed out a line? Say so
- Your time clock fills in the day count for you
- Pending receipts
- Jumping back to receipts
- Next steps
Predicted vs actual cost analysis
You bid the job at $18,400. The proposal expected $4,200 in materials and seven crew days at your day rate. Now the work's wrapping up — did you actually hit those numbers, or did you bleed money on a $900 plumbing surprise nobody planned for? The variance card on every project answers that question without you having to open a spreadsheet.
Roles: The variance card with predicted, actual, and margin is visible to owners, admins, and sales. Crew members see the receipt list and can upload new receipts, but the variance and margin numbers stay private to the people setting prices.
The variance card
Open any project, go to Money, and the receipts card shows a row per category — materials, labor, permit, dump, tools, other — with three numbers:
- Predicted — what your proposal expected to spend
- Actual — what your receipts add up to
- Variance — the gap, shown as both a dollar amount and a percent
Variance is colored so you can read the whole job at a glance:
- Sage green — you're under budget for that category
- Warm coral — you're over
A small footnote under each metric shows leftover spend when receipt allocation kicks in (you bought more than the job used — see the next article).
How "predicted" is calculated
The predicted column is built from your proposal, not from your gut:
- Materials predicted — the total contractor cost on your internal materials list (the same number that drives the per-line totals in Costs & Materials). If a project doesn't have a materials list yet, it falls back to the per-line materials estimate on each proposal line item.
- Labor predicted — the crew-wage portion of each line's cost. Since your day rate is all-in (it already includes overhead and profit), BidCraft backs those out to estimate what the crew days actually cost you, so it lines up with the wages on your labor receipts rather than the marked-up rate you charge the client.
- Permit / Dump / Tools / Other predicted — any pass-through line items in the proposal, grouped by keyword. "City permit" lands in permit; "dump fee" lands in dump; "equipment rental" lands in tools; everything else falls into other.
Most jobs won't have anything predicted against tools — you rarely quote a client for a saw. That's expected: the tools row usually starts at $0 predicted and fills in on the actual side as real purchases land. It's there to make that spend visible, not to hold you to a budget you never set.
If a category has zero predicted spend (say, you didn't quote a permit line on this job), the variance shows "—" instead of an infinite-percent jump.
How "actual" is calculated
The actual column adds up your logged receipts — photo, voice, and memo — for each category. With one twist: BidCraft uses the allocated total, not the raw receipt total.
If you bought 10 sheets of waterproofing and only used 4 on this project, only 4 sheets' worth of cost shows up in the materials variance. The leftover 6 sheets are inventory you'll burn through on the next job. Buying extra for stock doesn't show up as a project overrun.
[!note] Labor, permit, dump, tools, and other receipts always allocate 100% to the project. You can't reuse labor on the next job. Allocation only applies to material receipts.
Open a line and it shows its work
Below the variance card is the line-by-line breakdown of the proposal. Click any line to expand it and you get the full story behind that number instead of just a total.
Tile complexity. On tile work, you'll see the plain answer first — "Priced for the finishes on this line's surfaces" — then the math behind it:
$54.00 base × 1.395 = $75.33/sqft
Underneath, a row of chips names exactly which finish on which wall did it (Herringbone ×1.5 (Back wall) · 24x48 ×1.55), and if the line covers more than one surface it says so — weighted across 2 surfaces. When crew days were stretched by the same multiplier, that shows too: 3.0 base days × 1.5 = 4.5 days.
The price chain. Right under it, what the line actually bills: 103 sqft × $75.33/sqft = $7,758.99, or on a day-priced line, 6.0 days × $850/day + $75 materials. No more staring at a total wondering how it got there.
Why these numbers. Short plain-English notes about anything unusual the AI factored in — "Client supplies the tile, so materials cover setting supplies only." If there was nothing worth saying, the section doesn't show up at all.
If a line has finishes on the job but no multiplier landed on it, you'll see a quiet "No finish multipliers applied to this line" instead of silence — that's your cue to check the line's surfaces or add a row in the Tile difficulty panel on Pricing templates.
Change the base rate without losing the adjustment
The $54.00 base in that trail is click-to-edit. Tap it, type your real number, save — your finish multiplier stays applied on top of it, so the line re-prices and the margin updates on the spot. Nothing gets thrown away.
That's the difference between the two editing doors: the base rate here keeps the adjustment, while typing a final price in the proposal editor replaces the whole calculation with your number. Both are valid — see Editing line items.
[!warning] If the proposal is already signed, you'll see a caution before you change a base rate — that number is what your client agreed to. Changing it is sometimes exactly right (you're pricing a change order), but it should never happen by accident.
Logging actual crew days doesn't touch your estimate
Once a job's running, you can record what each line actually took. Expand the line and type the real day count in Actual crew days.
That's all it does — it records. Your estimate keeps showing right beside it (Estimated 4.0 days · you logged 5.5 days), the complexity trail stays intact, and your pricing doesn't move. Logging days tracks how the job went; it doesn't rewrite the bid.
When you do want the actual to count:
[!steps]
- Use actual for pricing — an explicit button that appears once your logged days differ from the estimate. On a day-priced line it reprices the line off your real days. On a per-square-foot line the client price comes from the quantity, so it moves your cost and margin only — and the button says so.
- Reset to estimate — puts the original estimate back exactly as it was, any time. Your logged days stay either way; they're a record, not a setting.
[!note] Lines you repriced before this change don't have a saved estimate to go back to, so the Reset button won't show on them. Everything from here forward is reversible.
Type what labor actually cost
The Labor column on every line is a number you can click. Type what the labor really came to, press Enter, and the line's cost and margin move with it — the totals at the top of the tab follow. The cell shows a small edited tag so you can tell a number you typed from one BidCraft computed; hover it to see what the computed figure was. Clear the box and press Enter to go back to the computed number.
This is the same number as the Labor cost field in the override panel further down the line — two ways in, one figure. Either one survives a regenerate, so you won't lose it if you rebuild the proposal.
The computed figure you're replacing is the line's crew days at your crew cost per day — what a day of your crew costs you, set on the Day rate tile in Pricing templates, or estimated from your day rate until you set it. That's the same basis as the Labor Cost tile, the Labor — Predicted vs Actual card, and whatever a sub invoices you, so the numbers add up. (Your day rate — what you charge — prices the job and never appears on a cost page.)
The same controls live on the Bid page's Costs & materials step: open a line and the strip at the top of it has the labor cost box, the subbed-out checkbox, and Remove all.
Typing a labor cost never changes the client's price. It changes what the job cost you.
Subbed out a line? Say so
Hired a demo crew, a plumber, a glass installer? A subbed-out line has no crew days of its own, and pretending otherwise skews everything — the day count, the labor total, the materials you never bought.
Expand the line and tick This line was subbed out. Then:
- The Actual days field goes away and reads Subbed out instead. There's nothing to log.
- The Labor cell becomes the sub's invoice. Type what they charged you — in the Labor column or the Subcontractor cost field in the panel. Until you do, the line counts $0 labor and wears an enter sub cost tag so you can't forget.
- Materials still linked to the line get offered up. If the sub supplied everything, tap Remove all and they come off the line — its materials cost drops to $0 and the tag reads sub supplied. Keep any you actually bought; they still count.
- Name the sub if you like. Optional, shows on the line as Subbed out · Mike's Demo.
On the Labor — Predicted vs Actual card, subbed lines count in dollars, not days: what you estimated for that work stays on the predicted side, what you paid the sub lands on the actual side, and a note under the tiles says how many lines that covers. Untick the box and the line goes back to being a crew line; the cost you typed stays until you clear it.
Remove all materials on any line. Two or more materials linked to a line, subbed or not, and the materials header shows Remove all. One confirm, they're gone, and you can add any back.
Your time clock fills in the day count for you
If your crew clocks in and out on tasks, you don't have to remember what a line took. Any line whose tasks have clocked time shows a small grey note under the Actual field:
⏱ 2.5d clocked
That's the clock's answer, converted to crew-days. Next to it is a Use button — one tap logs that number as the line's actual, exactly as if you'd typed it. Once the two match, the Use button disappears and the note stays as a quiet receipt of where the number came from.
Nothing happens on its own. The clock never writes your actuals for you, because how you book a line and how a crew punches a timecard aren't always the same story. You stay the one who decides.
A few things worth knowing about that number:
- They're crew-days, not calendar days. Two people working four hours each is one crew-day, not two half-days — the same unit your estimate is in. It's added up across everyone who clocked time on the task.
- It rounds to the quarter day. 2.4 days reads as 2.5. Same granularity you'd type by hand.
- A shift still clocked in isn't fully counted yet. The number settles when the crew clocks out. If someone's on the job right now, wait for the punch-out before you trust it.
- Only tasks tied to a proposal line get a chip. Time clocked on general project tasks has no line to attach to, so it shows up as a separate footnote on the labor card (+6.0h clocked on project-level tasks) rather than being quietly folded into a line it might not belong to.
The labor card also totals it up: ⏱ Clocked on this job shows the crew-days and what they cost at your day rate, so you can compare the clock against what you logged before you commit to anything.
[!note] Regenerating a project's tasks clears the clocked time along with them, so the chips vanish. Any actual days you'd already saved stay put — those live on the proposal line, not on the tasks.
Pending receipts
Just snapped a photo and the AI is still chewing on it? That receipt's total isn't in the actual column yet — but the variance card shows a "N receipts processing" badge so you know the actual number is about to move. Once OCR finishes (usually within a minute), the badge clears and the totals refresh.
If a receipt scan fails (bad lighting, smeared ink), the row gets flagged and you can either re-scan or fill the fields in by hand. Failed receipts also stay out of the actual count until you resolve them.
Jumping back to receipts
There's a one-line link at the top of the Costs & Materials section that jumps straight to Receipts. Use it whenever a variance number looks weird and you want to dig into which receipt drove it.
Next steps
To understand the math behind allocation — why your receipt for $1,200 of waterproofing only shows $480 against the project — read How receipt allocation works.
If receipt entry feels slow, Logging receipts on a project walks through the three input methods so you can pick the fastest one for your workflow.
This card answers "am I on budget?". When you want the whole money picture of the job on one page — contract, change orders, what's been collected, what you actually kept — that's the Financials tile: Your job P&L and financial exports.
Email andy@businessupai.com and a real person on the BidCraft Tile team will get back to you. If you're signed in, you can also ask Biddy from any page in the app.