Construction budgeting for a general contractor starts when the approved estimate is frozen as the baseline, then tracks approved changes, the revised budget, committed subcontracts and purchase orders, and the buyout variance between them, cost code by cost code. Below: a buyout variance calculator for your cost codes, what each budget column means and does not mean, a buyout log template to download, and what controllers get wrong.
| Row | Original | Approved | Revised | Committed | Buyout var. |
|---|---|---|---|---|---|
| Drywall09 20 00 | 200,000 | 0 | 200,000 | 212,000 | +12,000 |
| Resilient flooring09 65 00 | 84,000 | +6,500 | 90,500 | 88,900 | -1,600 |
| Doors and frames08 11 00 | 61,000 | 0 | 61,000 | not bought | n/a |
Baseline frozen at handoff, USD. Doors not yet bought: variance is disclosed as unavailable, not counted as zero.
Drywall was carried at 200,000 and awarded at 212,000. The 12,000 overrun shows as buyout variance before any approved change, with the commercial reason captured beside it. Doors are not yet bought, so their variance is disclosed as unavailable rather than counted as zero.
Part of Ruh for general contractors · stage 06 of 12
The whole GC lifecycle →Enter the original budget, approved changes and the committed value for each cost code. The calculator writes the revised budget, the variance on bought lines and what is still to buy. No forecast and no percent complete, only the five columns the budget screen carries.
Original is the as-sold estimate at award. Approved changes are owner change orders after approval, negative allowed. Committed is the executed subcontract or purchase order, including approved sub changes. Leave committed blank for a line not yet bought.
| Code | Description | Original | Approved changes | Committed |
|---|---|---|---|---|
| Code | Revised | Committed | Variance |
|---|---|---|---|
| 03 30 00Cast-in-place concrete | $412,000 | $398,500 | +$13,500 |
| 05 12 00Structural steel | $300,200 | $305,900 | -$5,700 |
| 09 29 00Gypsum board assemblies | $210,000 | $212,000 | -$2,000 |
| 23 00 00HVAC | $364,000 | not bought | none yet |
| 26 00 00Electrical | $393,500 | not bought | none yet |
| Total | $1,679,700 | $916,400 | +$5,800 |
Original $1,662,000, approved changes +$17,700, revised $1,679,700. Still to buy: $757,500 on 2 lines, with no variance yet.
05 12 00, 09 29 00 bought above the revised budget. That is a buyout overrun on the day of award, not a forecast of the final cost.
Five columns of arithmetic, nothing more. Pending changes, spending and a forecast to complete are not on this screen, by design. Ruh freezes the as-sold estimate as the baseline and reads commitments through your Procore connection, so these columns fill themselves.
The view of the Ruh estimating team, from budget baselines and buyout logs on general contractor jobs. An opinion, not a measured result.
A saving at buyout is a saving on the day of award. Subcontractor change orders, backcharges and scope never bought all sit outside it. The variance says where the job stands, not where it ends.
A change order the owner has not approved is a request, not budget. The revised column moves on approval, and the pending list is kept where everyone can see that it is pending.
When the estimate was wrong, the temptation is to correct the original. Leave it. The gap between what was sold and what it costs is the most useful number the company has for the next bid.
The committed value moves with every approved subcontractor change order. A committed column that still shows the award value understates the job.
If the estimate was built on trades and the budget on a different code list, buyout cannot be compared line by line. The mapping is decided at handoff, once, and written down.
The five columns on the budget screen, where each number comes from, what moves it, and the question it cannot answer. The same columns the calculator above writes.
| Column | Where the number comes from | What moves it | What it cannot tell you |
|---|---|---|---|
| Original budget | The approved estimate at award, frozen as the as-sold baseline by cost code | Nothing after the baseline. Corrections are recorded as changes, not as edits | Whether the estimate was right |
| Approved changes | Owner change orders after approval, mapped to the cost codes they touch | Each approved change order, positive or negative | What is still pending with the owner |
| Revised budget | Original plus approved changes | Arithmetic only | Anything its two inputs do not |
| Committed | Executed subcontracts and purchase orders, plus approved subcontractor change orders | Every award and every approved subcontractor change | What has been invoiced or paid |
| Buyout variance | Revised minus committed, on bought lines | Either side moving | The final cost. Unbought lines have no variance yet |
| Not on this screen | Pending changes, forecast to complete, spending and payments | Kept in the change log and in accounting | This screen is budget versus commitment, on purpose |
Matches the September 2026 product handbook: the Budget screen shows original, approved changes, revised, committed and buyout variance. Payments and reconciliation stay in accounting.
One row per cost code with the five budget columns, a bought flag and a source column for each commitment. Five example rows show a saving, an overrun and two lines not yet bought, with the totals row that only counts bought lines.
No email, no gate. If you want the register written for you from a real set, the walkthrough is at the bottom of the page.










Three things have to hold for a budget conversation to be short. Everyone agrees what was sold, every commitment lands on a recognizable row, and a change to the money is a different fact from a change the owner approved.
The baseline captures the budget at handoff so execution can be compared with what the GC originally carried. It keeps the frozen rows, subtotal, markup lines, total, timestamp and estimate version. A change to an estimating input afterwards does not silently replace that history.
One vocabulary for estimating and execution: the catalog is read from Procore, grouped by division, with the age of the last read shown. Add cost code writes to Procore and re-reads the catalog, and only after your controller confirms an existing code cannot serve.
A cost code names where money belongs. The Cost codes page mirrors the company catalog from your Procore, grouped by division with the code and its description, and shows how old the last read is. Adding a code writes to Procore and re-reads the catalog, after your controller confirms no existing code can serve.
A change event records potential scope, cost, revenue or time impact and where it came from. From there the chain runs through the subcontractor's RFQ, the potential change order and the owner change package, prepared through your Procore. The subcontractor's cost and the owner's approval are never the same number in the same cell.
Four steps, and the budget stays comparable to what was sold at each one. Nothing about the money happens in a place your controller cannot look at.
At handoff the approved estimate becomes the baseline, with its version referenced. Confirm every major purchased scope has a recognizable row.
Codes mirrored from your Procore catalog, grouped by division. Your controller approves any addition before it is written.
Subcontracts and purchase orders prepared through Procore land on their rows. Buyout variance shows the moment an award differs from what was carried.
Change event, RFQ, PCO, owner package. Approved amounts revise the budget; unapproved ones stay visibly pending.
A budget rarely agrees with the estimate for long. Here is what gets recorded so the difference has a reason instead of an argument.
What gets recorded
Frozen rows, subtotal, markup lines, total, timestamp and estimate version at handoff. The comparison point for everything that follows, never overwritten by a later estimating change.
What gets recorded
The company catalog mirrored from Procore, grouped by division, with the age of the last read and controlled additions.
What gets recorded
Draft subcontracts and purchase orders prepared in Procore from the buyout package, with external IDs and statuses visible.
What gets recorded
Committed against original, per row, with the commercial reason captured outside the total. A row not yet bought shows its variance as unavailable, not as zero.
What gets recorded
Change event, RFQ, PCO and owner package as separate records, so a subcontractor's cost is never mistaken for an owner's approval.

A connected screen does not make every system an accounting ledger. Ruh coordinates the selling budget, the buyout records and your Procore, and it is explicit about which numbers it shows and which stay with the systems that own them.
The fear in budgeting is not the spreadsheet. It is a review meeting where the number moved and nobody can say whether the estimate changed, the buyout changed, or the owner approved something.
The as-sold baseline is frozen with its estimate version. Every later figure is compared to it, and none of them can quietly rewrite it.
Cost codes are read from Procore, so estimating, buyout and execution talk about the same row.
A buyout overrun appears the moment an award differs from what was carried. The reason is captured by a person, beside the number, not inside it.
A subcontractor's changed cost, a potential change order and an owner's approval are three records. The budget revises only on the third.
Our estimators spent more time retyping quantities than thinking about scope. Ruh reads our drawings like a senior estimator and hands back a priced estimate we want to review, not rebuild.

ADF GroupThe execution Budget page compares original, approved changes, revised, committed and buyout variance. Spending, forecasts and projected completion figures are not on that page, and the invoice and amendment entry forms were removed from it. This page describes the screen as it is, not as a roadmap.
Cost codes, commitments, schedules of values, RFQs and owner change packages work through your Procore connection, which needs credentials, project mapping and permissions configured. Payments, payroll and reconciliation stay in your accounting system.
Try Ruh on a real bid. 100% money-back guarantee if you are not satisfied.*
*Scoped delivery, terms apply. Read the guarantee terms
Per coded row: original, approved changes, revised, committed and buyout variance, compared against the as-sold baseline frozen at handoff, with a link to open the job in Procore. Spending, forecasts and projected completion are not on this screen; they stay with the systems that own them.
It is the approved estimate frozen at handoff: rows, subtotal, markup lines, total, timestamp and the estimate version. Later commitments and approved changes move against it. A later change to an estimating input does not replace it, so execution is always compared with what was actually sold.
From your company catalog in Procore, mirrored and grouped by division with each code and description. The page shows how old the last read is and can refresh. Adding a code writes to Procore and re-reads the catalog, and is done only after your controller confirms an existing code cannot serve.
The moment a subcontract or purchase order is committed above the row it lands on, the variance appears against the baseline, before any approved budget change. The commercial reason, such as revised scope, market movement or a deliberate upgrade, is captured beside the number rather than folded into it.
A change event is captured with its cause, scope, evidence and origin. An RFQ obtains the subcontractor's price and time impact, a potential change order attributes the priced change to a trade, and an owner change package assembles the eligible PCOs, all prepared through Procore. The budget revises on owner approval, and the subcontractor's cost stays a separate recorded fact.
The current budget screen does not show forecasts or projected completion, and Ruh does not post payments, payroll or reconciliation to your ledger. A direct QuickBooks posting workflow is not something this page claims. Your accounting process keeps those responsibilities.
A job still in preconstruction says plainly that its execution budget begins at handoff. An older job with no baseline is identified explicitly, with its commitments, change events and invoices shown without a row to land on, so it is never read as a zero-dollar job.
A 30 minute walkthrough on a real job. Bring the approved estimate, the commitments so far and your Procore cost codes, and we show the baseline, the variance and the change chain live. Your controller decides whether the numbers tie out.
No card to start100% money-back guarantee*