Skip to main content

Entering a Job Budget

Open a new job, type a dollar estimate for each of nine categories, save. That's a budget.

The whole flow takes less than a minute. The rest of this page is for the optional moves you'll reach for later — cost-code drill-down, contract value, CSV import, and saving discipline.


When this happens

Once per job, at the start. Some teams enter the budget the day the contract is signed; others wait until the kickoff meeting. Either is fine.

The dashboard treats a job with no saved budget as "no budget entered" everywhere downstream — vs Actual is empty, the Job Health Gauge stays neutral, and the Budget vs Actual widget on Spend Analytics has nothing to draw — until you save at least one category.


The 60-second flow

1. Open the job and switch to the Budget tab

It opens on the Entry sub-tab by default. The full Budget tab tour is at Budget Tab; the canonical Entry reference is at Budget Entry.

JCI Dashboard Job Detail Budget tab Entry sub-tab on a brand-new job showing the four Contract Info scorecards across the top all reading zero, and the nine-row category table below with all Estimate and Notes cells empty

2. Set the Contract Value

Click the Contract Value scorecard at the top. It becomes editable. Type the dollar amount, press Enter. The Gross Profit Est. scorecard next to it updates as a function of (Contract − Cost Estimate).

You can skip this if you don't have the contract number yet — come back and add it later.

Gross Profit goes red when negative

If your nine-category estimates sum to more than the contract value, the Gross Profit scorecard goes red. That's a real signal, not a styling glitch — the bid is upside-down. Use it as the "did I break the bid" check before you save.

3. Type an estimate into each of the nine category rows

The rows are fixed and always in this order:

  1. Concrete
  2. Rebar
  3. Materials
  4. Pumps
  5. Equip/Rental
  6. Fuel
  7. Subs
  8. Labor
  9. Other Costs

Click an Estimate cell, type the dollar amount (no $ sign needed, decimals OK), press Enter or Tab to commit. The Grand Total at the bottom updates as you go. The category definitions live at Categories.

Type and Tab

The whole flow is keyboard-only if you want — Tab moves cell to cell, Enter commits.

4. (Optional) Add Notes per category

The Notes column is click-to-edit. Use it for assumptions ("excludes premium time"), scope notes, or vendor splits.

5. Click Save Budget

The button is disabled until you've changed something. Once you click it, the page persists and the four scorecards refresh against the saved values. That's it — the budget is in.


Optional: per-category cost-code breakdown

For categories where you want sub-line detail (commonly Labor and Subs), toggle "Break down by cost code" on the row. The Estimate cell becomes read-only — its value is now the SUM of the cost-code estimates you add below.

Add cost codes one at a time, each with its own dollar estimate. The subtotal at the bottom of the breakdown panel shows the running total.

Subtotal must equal category estimate to the cent

The dashboard compares the cost-code subtotal and the category estimate as integer cents. 100.00 and 100.001 are treated the same (the inputs round to two decimals), but 100.00 and 100.01 are not — the warning fires and the Save Budget button is disabled. Fix the breakdown to match the category total, or change the category total to match the breakdown subtotal. You cannot save until they match.

JCI Dashboard Budget Entry showing the Labor category row expanded to reveal the Cost Code Breakdown Panel with three cost code rows each with a dollar estimate and a subtotal at the bottom of the panel matching the category estimate cell to the cent

The full breakdown panel reference, including how the per-cost-code rows interact with vs Actual downstream, is at Budget Entry. Cost codes themselves are at Cost Codes Overview.


CSV import — the "I have a spreadsheet" flow

If you've got a budget already in a spreadsheet (a separate estimate, a hand-built worksheet), use the CSV import instead of typing it in.

Click Import from CSV on the Entry tab. A modal opens with three steps:

  1. Download the template. The CSV has the right column headers and the correct cost-code names. Don't hand-craft a CSV — start from the template.
  2. Fill it in and upload. The modal previews what will import.
  3. Click Import. The valid rows import; the invalid rows come back in a downloadable error report.
Use the template, don't hand-craft

Cost-code names must match the reference list exactly. The template ships with the right names already in place — start there.

Partial-success is the norm

A 1,000-row upload with 50 invalid rows imports the 950 valid rows and returns the 50 invalid ones in an error report. An import with errors is not a "nothing happened" signal — it's a normal "950 in, 50 to fix" outcome.

The full import reference is at Budget Entry.


Saving discipline — what to know

  • The Save Budget button is disabled until you've made a change.
  • "Unsaved changes" appears in amber in the footer when you have edits.
  • Leaving the page (clicking another tab in the sidebar, navigating away) while you have unsaved edits triggers a browser confirm so you don't lose work.
  • Switching between Entry, vs Actual, and Billing sub-tabs is safe — Entry stays mounted and your in-progress edits survive the swap.
Sub-tab swaps are safe; page navigation isn't

Moving between Entry, vs Actual, and Billing keeps your in-progress edits. Clicking out to All Jobs or Action Queue with unsaved edits triggers a browser confirm — don't promise auto-save, because there isn't any.


What happens once the budget is saved

The variance picture lights up:

None of this happens before you save.

Budget edits save immediately; cost data lags up to four hours

The budget you save right now appears on vs Actual immediately. The Actual numbers next to it lag the four-hour cycle. So the variance you see on a brand-new job's vs Actual right after saving may be misleading — there isn't much actual cost to compare against yet. See Data Refresh Rates.


A few things to know

  • The nine categories are fixed. You can't add or remove them. Pump estimates are still allowed even though pump actuals are always $0 — most jobs leave Pumps at $0 too.
  • Notes are not searchable across jobs. Each Notes value lives on the job. There's no global "find all jobs with Notes containing 'premium time'" feature.
  • Contract Value is owned here. The Billing sub-tab's Contract Value scorecard is read-only. To change the contract value, come back to Entry.
  • Closed jobs allow budget edits — that's intentional, not a bug. True-ups happen after a job closes; the dashboard supports them.

What's next