Photo by Alexey Demidov on Unsplash
What this calculator does and what it excludes
This guide builds a quantity-based construction budget calculator that estimates total project cost from five input categories: materials, labour, equipment, overhead, and contingency. The result sheet also shows a simple variance when you enter actual spending, so you can compare your building cost estimate against real figures.
What is excluded: financing costs, land acquisition, professional fees (architects, surveyors), taxes, insurance premiums, permit fees, and site-specific abnormal ground conditions. All unit rates must be sourced locally — the guide does not supply prices. Currency, local labour laws, procurement markups, and exchange-rate risk are outside the model's scope.
Assumptions you must verify locally: unit rates change with market conditions; contingency percentage norms vary by project type (refurbishment carries higher risk than new build); equipment hire periods depend on programme; overhead as a percentage of direct cost varies by contractor size.
Key terms explained
- Quantity: The measured amount of a resource needed — for example, cubic metres of concrete or hours of skilled labour.
- Unit rate: The cost of one unit of a resource — for example, cost per cubic metre or cost per hour.
- Line cost: Quantity multiplied by unit rate, giving the total cost for one resource item.
- Direct costs: Costs directly tied to physical construction work: materials, labour, and equipment.
- Overhead: Indirect project costs such as site management, temporary facilities, and head-office allocation, usually expressed as a percentage of direct costs.
- Contingency: A financial reserve added to cover unforeseen risks, also expressed as a percentage of a subtotal. It is not profit margin.
- Contingency vs markup: Contingency covers risk; markup (or margin) is the contractor's profit. This calculator includes contingency only. If you are a contractor pricing a job you will add your margin separately after the contingency line.
- Actual vs budget variance: The difference between what you estimated (budget) and what you actually spent (actual). A positive variance means you spent less than budgeted.
- GS2Web SaaS: The GSheetPress browser add-on that converts a specially structured Google Sheet into a shareable web calculator.
- Input row: A row in the GS2Web calculator template that captures one value from the user at runtime.
- Result field: A cell in the calculator sheet that holds a formula driven by the input rows and displays its value on the published web page.
Prerequisites
- A Google account with access to Google Sheets.
- The GSheetPress GS2Web add-on installed from the Google Workspace Marketplace. Open any Sheet, click Extensions → Add-ons → Get add-ons, search for GS2Web SaaS, and install it. See the GSheetPress support page for installation help.
- An active Calculator entitlement on your GSheetPress account. Log in at gsheetpress.com, confirm your plan includes the Calculator feature, and make sure the Google account used in Sheets matches the email registered with GSheetPress. A mismatched account is the most common reason the Calculator menu item is unavailable.
- A dedicated sample workbook created specifically for this exercise. Do not use a file containing private or sensitive data. The publishing step later makes the spreadsheet accessible to anyone with the link.
Plan the cost model before opening Sheets
The calculator will accept seven runtime inputs from the user:
- Materials quantity (e.g. tonnes of aggregate, m² of flooring — user defines their own unit)
- Materials unit rate
- Labour hours
- Labour hourly rate
- Equipment hire days
- Equipment daily rate
- Contingency percentage
Overhead will be calculated inside the sheet as a fixed percentage of direct costs rather than as a user input, because it is typically a business constant rather than something the end user knows. You can convert it to an input later by following the same pattern used for the other rows.
Source your unit rates from published price books such as BCIS (Building Cost Information Service), local supplier quotations, or historical project data. Never use a single source uncritically — cross-check at least two references.
Set up the helper data in a separate sheet tab
Before building the calculator tab, create a plain data tab to hold your overhead rate. This keeps assumptions visible and easy to update.
- In your sample workbook, click the + icon at the bottom to add a new sheet. Name it
Settings. - In cell A1 type
Overhead rate (% of direct costs). - In cell B1 type
0.12(representing 12 %). Adjust this to match your project type. Residential refurbishment typically runs 10–15 %; large commercial projects may be lower. This is an assumption — verify it.
Build the GS2Web calculator tab
Create the calculator structure
- Click Extensions → GS2Web SaaS → Calculator → New Calculator.
- When prompted, enter the calculator name:
Construction Budget Calculator. - When asked for the number of inputs, enter 7. Do not count the Calculate button.
- When asked whether to include graphs, choose No for this model (you can add charts later manually if needed).
- GS2Web generates a new sheet tab with headers in row 1: Labels, Input Type, Required, Data, Default, ToolTips, Inputs, Rules across columns A–H. Do not edit row 1.
With 7 inputs the layout is: input rows 2–8, button row 9, merged separator row 10, result headings row 11, and results starting from row 12.
Row 2 — Materials quantity
- A2 — Label: Materials Quantity
- B2 — Input Type: Number
- C2 — Required: Check the checkbox (tick it)
- D2 — Data: Leave blank
- E2 — Default: 100
- F2 — ToolTips: Enter the total quantity of materials (e.g. m², tonnes, units)
- G2 — Inputs: Leave blank (GS2Web writes here at runtime)
- H2 — Rules: Leave blank
Row 3 — Materials unit rate
- A3 — Label: Materials Unit Rate
- B3 — Input Type: Number
- C3 — Required: Check the checkbox
- D3 — Data: Leave blank
- E3 — Default: 50
- F3 — ToolTips: Cost per unit of material (e.g. cost per m² or per tonne). Source from supplier quotes.
- G3 — Inputs: Leave blank
- H3 — Rules: Leave blank
Row 4 — Labour hours
- A4 — Label: Labour Hours
- B4 — Input Type: Number
- C4 — Required: Check the checkbox
- D4 — Data: Leave blank
- E4 — Default: 200
- F4 — ToolTips: Total hours of labour required for the project or phase.
- G4 — Inputs: Leave blank
- H4 — Rules: Leave blank
Row 5 — Labour hourly rate
- A5 — Label: Labour Hourly Rate
- B5 — Input Type: Number
- C5 — Required: Check the checkbox
- D5 — Data: Leave blank
- E5 — Default: 35
- F5 — ToolTips: All-in hourly cost per worker including employer taxes and insurance where applicable.
- G5 — Inputs: Leave blank
- H5 — Rules: Leave blank
Row 6 — Equipment hire days
- A6 — Label: Equipment Hire Days
- B6 — Input Type: Number
- C6 — Required: Check the checkbox
- D6 — Data: Leave blank
- E6 — Default: 10
- F6 — ToolTips: Number of calendar days plant or equipment is on hire.
- G6 — Inputs: Leave blank
- H6 — Rules: Leave blank
Row 7 — Equipment daily rate
- A7 — Label: Equipment Daily Rate
- B7 — Input Type: Number
- C7 — Required: Check the checkbox
- D7 — Data: Leave blank
- E7 — Default: 250
- F7 — ToolTips: Daily hire cost for equipment including fuel and operator if applicable.
- G7 — Inputs: Leave blank
- H7 — Rules: Leave blank
Row 8 — Contingency percentage
- A8 — Label: Contingency %
- B8 — Input Type: Number
- C8 — Required: Check the checkbox
- D8 — Data: Leave blank
- E8 — Default: 10
- F8 — ToolTips: Enter a whole number, e.g. 10 means 10%. Typical range: 5–20% depending on project risk.
- G8 — Inputs: Leave blank
- H8 — Rules: Leave blank
Important — entering contingency as a whole number: The user types 10 to mean 10 %. The formula in the result section divides by 100 to convert it. Do not ask users to type 0.10; it creates confusion on a construction site.
Row 9 — The Calculate button (generated, do not delete)
GS2Web places the button in row 9 automatically. Confirm the following values are present and do not overwrite them:
- A9 — Label: Calculate (the button text shown on the web form)
- B9 — Input Type: Button
- D9 — Data: main
- E9: Reset (this is the reset button label — do not confuse it with the Calculate label in A9)
Rows 10–11 — Separator and result headings (generated)
Row 10 is a merged separator cell. Row 11 contains generated result-column headings. Leave both rows exactly as generated.
Enter the result formulas
All formulas reference the G column (G2–G8), which holds the values submitted by the user at runtime. Column E holds form defaults only — never write result formulas pointing to E cells. To test formulas before publishing, copy E2:E8, then use Paste special → Values only into G2:G8 so the defaults flow through your formulas.
Result labels go in column A starting at row 12; result values go in column B starting at row 12. Click the target cell, type the formula beginning with =, and press Enter.
Result labels (column A)
- Click A12 and type:
Materials Cost - Click A13 and type:
Labour Cost - Click A14 and type:
Equipment Cost - Click A15 and type:
Direct Cost Subtotal - Click A16 and type:
Overhead (12% of Direct) - Click A17 and type:
Total Before Contingency - Click A18 and type:
Contingency - Click A19 and type:
Total Project Budget
Result formulas (column B)
B12 — Materials Cost (quantity × unit rate):
=IF(G2="","",G2*G3)B13 — Labour Cost (hours × hourly rate):
=IF(G4="","",G4*G5)B14 — Equipment Cost (days × daily rate):
=IF(G6="","",G6*G7)B15 — Direct Cost Subtotal:
=IF(OR(B12="",B13="",B14=""),"",B12+B13+B14)B16 — Overhead (pulls the rate from the Settings tab):
=IF(B15="","",B15*Settings!B1)B17 — Total Before Contingency:
=IF(OR(B15="",B16=""),"",B15+B16)B18 — Contingency (G8 is a whole-number percentage, so divide by 100):
=IF(OR(B17="",G8=""),"",B17*(G8/100))B19 — Total Project Budget:
=IF(OR(B17="",B18=""),"",B17+B18)These formulas return an empty string when any required input is missing rather than propagating zeros or errors. This keeps the published result clean.
Format the result cells
- Select B12:B19.
- Click Format → Number → Currency (choose your local currency symbol).
- Optionally bold B19 to highlight the total.
Worked example with the default inputs
Using the defaults loaded into E2:E8 (copied to G2:G8 for testing), the model produces:
| Cost category | Calculation | Amount |
|---|---|---|
| Materials Cost | 100 × 50 | 5,000 |
| Labour Cost | 200 × 35 | 7,000 |
| Equipment Cost | 10 × 250 | 2,500 |
| Direct Cost Subtotal | 5,000 + 7,000 + 2,500 | 14,500 |
| Overhead (12%) | 14,500 × 0.12 | 1,740 |
| Total Before Contingency | 14,500 + 1,740 | 16,240 |
| Contingency (10%) | 16,240 × 0.10 | 1,624 |
| Total Project Budget | 16,240 + 1,624 | 17,864 |
Alternative scenario — higher risk project
Change contingency to 20 % (G8 = 20) and equipment hire to 20 days (G6 = 20):
| Cost category | Amount |
|---|---|
| Equipment Cost | 5,000 |
| Direct Cost Subtotal | 17,000 |
| Overhead (12%) | 2,040 |
| Total Before Contingency | 19,040 |
| Contingency (20%) | 3,808 |
| Total Project Budget | 22,848 |
Add a budget-vs-actual comparison section
Once the project is under way, you can compare estimated budget against actual spending. Add this section below the result rows in the same calculator tab (rows 20 onward are outside the GS2Web result range unless you explicitly add more result rows — add labels in A and formulas in B continuing the same pattern).
For a simple post-project comparison, add a plain table in a separate Actuals sheet tab:
| Category | Budget | Actual Spent | Variance |
|---|---|---|---|
| Materials | 5,000 | Enter actual | = Budget − Actual |
| Labour | 7,000 | Enter actual | = Budget − Actual |
| Equipment | 2,500 | Enter actual | = Budget − Actual |
| Overhead | 1,740 | Enter actual | = Budget − Actual |
| Contingency used | 1,624 | Enter actual | = Budget − Actual |
In the Actuals sheet, the variance formula for materials in D2 would be:
=B2-C2A positive variance means you came in under budget. A negative variance means overspend. This tracking approach is explained further in the GSheetPress calculator guide.
Result checks
- If B15 shows zero when inputs are populated, check that G2:G8 contain values (copy E2:E8, paste special → values only into G2:G8).
- If B16 shows a #REF! error, confirm the Settings tab is named exactly
Settingswith a capital S and that B1 contains a decimal (0.12, not 12). - If B19 is empty but B17 is populated, check that G8 contains a value and is not blank.
- Verify: B15 = B12 + B13 + B14. Any discrepancy means a formula references the wrong G cell.
- Verify: B19 = B17 + (B17 × G8/100). Do this arithmetic manually with the defaults to confirm.
Frequently asked questions
Can I add more cost categories, such as subcontractor costs?
Yes. When creating the calculator, increase the input count to match the additional inputs you need. For example, to add subcontractor cost as quantity × rate, increase the input count by two (one for quantity, one for rate), which shifts the button, separator, and result rows down accordingly. Update all result formula row references to match the new layout. See the GSheetPress table and data guide for guidance on structuring multi-category models.
How do I update the overhead rate without breaking the published calculator?
Change cell B1 in the Settings tab to your new decimal rate (e.g. 0.15 for 15 %). The result formula in B16 reads Settings!B1 dynamically, so it updates immediately. You do not need to republish the calculator for formula changes — the published web calculator always reads the current sheet values. Only structural changes to inputs or labels require republishing.
What if a user enters zero for one of the quantities?
A zero is a valid number, so the Required checkbox will be satisfied and the formula will proceed normally, producing a zero line cost for that category. If your project genuinely has no equipment, the user enters 0 for equipment hire days and the equipment cost line returns zero. This is intentional. The IF checks guard against blank cells, not zero values, because zero is a legitimate project input.
Troubleshooting
The Calculator menu does not appear under Extensions
Confirm the add-on is installed under Extensions → Add-ons → Manage add-ons. If it appears but the Calculator option is missing, your GSheetPress account may not have an active Calculator entitlement. Check your plan at gsheetpress.com/pricing and ensure the Google account in Sheets matches the account registered with GSheetPress.
Formulas return #NAME? errors
This usually means a function name is misspelled or a sheet reference contains a typo. Double-check the sheet tab is named Settings exactly and that Settings!B1 in B16 is spelled identically. Function names like IF, OR, and SUM must not contain accidental spaces.
The published calculator shows blank results
The most common cause is that the web submission overwrites G2:G8 with the submitted values but the formulas reference different cells. Open the live sheet after a test submission and check whether G2:G8 contain the values you entered. If they do but results are still blank, trace each formula — a silent empty-string condition in an IF check is likely being triggered.
Contingency result is much larger than expected
Check that the user entered a whole number (e.g. 10 for 10 %) and not a decimal (0.10). If G8 = 0.10, the formula G8/100 produces 0.001, giving a near-zero result. If G8 = 10, the formula gives 0.10 as intended. Update the tooltip in F8 to make this expectation explicit if users are confused.
Settings!B1 returns an error after sharing
When you publish the spreadsheet as described below, the Settings tab is part of the same workbook and is accessible to the add-on. Errors here are almost always a tab name mismatch. Click the Settings tab at the bottom of the sheet and confirm it is not named settings (lowercase) or Setting (missing s).
For further help, visit the GSheetPress support page.
Publish and test your web calculator
- Share the workbook: Click the blue Share button in the top-right corner of Sheets. Under General access, change the setting from Restricted to Anyone with the link. Set the role to Editor, then click Done. Important: this means anyone who obtains the spreadsheet link can edit the file. Only use your dedicated sample workbook for this — never your live project data.
- Select the calculator tab: Click the tab at the bottom of the workbook that GS2Web generated (it will be named after your calculator or labelled with the calculator structure).
- Open the publish menu: Click Extensions → GS2Web SaaS → Calculator → Publish Calculator.
- Wait for confirmation: GS2Web will display a confirmation message when publishing is complete.
- Open the Calculator Link sheet: GS2Web creates or updates a sheet tab called Calculator Link (or similar). Find the row that matches your Sheet Name (Construction Budget Calculator).
- Open the public link: Use the URL in column C (the public Link column), not column B (the Edit Link). Click Get Links if the row appears empty or outdated — this refreshes the published URLs.
- Test with the worked example: On the public calculator page, enter the default values: Materials Quantity = 100, Materials Unit Rate = 50, Labour Hours = 200, Labour Hourly Rate = 35, Equipment Hire Days = 10, Equipment Daily Rate = 250, Contingency % = 10. Click Calculate. Confirm the Total Project Budget displays 17,864 (in your chosen currency format). If the figure differs, return to the sheet, recheck the formulas in B12:B19, and republish.
- Optional — embed on a website: Copy the iframe code from column D of the Calculator Link sheet and paste it into an HTML block on your website.
- Republishing: If you later update labels, defaults, or add result rows and republish, the existing public link is retained. You do not receive a new URL.
For more detail on calculator configuration options, see the GSheetPress calculator documentation and the GSheetPress add-on page.