Jobs & Job Cost

Prefer to watch? This guide has 4 step-by-step videos. Watch the videos

Job Cost is the financial heart of CortexPM. A job (also called a project) is one build, and almost everything else in the platform — estimates, contracts, purchase orders, invoices, the program — hangs off it. This guide covers creating and managing jobs, setting up cost codes, building a budget, tracking where the money’s going, and forecasting the cost to complete.


Jobs vs. budgets vs. costs — the picture

  • A job is the project record: its name, client, address, status and headline numbers.
  • A budget is what you planned to spend, broken down by cost code. It’s created from your approved estimate.
  • Committed costs are money you’ve locked in but not yet paid — purchase orders and subcontracts.
  • Actual costs are money actually spent — supplier invoices.
  • Cost to complete is what’s still left to spend. CortexPM fills it in from the budget, commitments and actuals, and you override it wherever you know better.
  • Forecast at completion is where the job will finish: actual + cost to complete. Budget less forecast is your gain or loss.

Committed isn’t added on top of the forecast. The part of a commitment that hasn’t been invoiced yet is still to be spent, so it already sits inside cost to complete.

Those six columns — budget, committed, actual, cost to complete, forecast, gain/loss — are the language of the whole module.


Set up your cost codes first

Do this before anything else. Set up your cost codes before you create jobs, build budgets or raise a single purchase order. Cost codes are the backbone of CortexPM: budgets, commitments, invoices, cost-to-complete forecasts, progress claims and reporting all organise themselves around them. If they aren’t in place early, those features can’t work properly — budget lines have nowhere to land, costs can’t be matched to the right line, and you’ll be forced to patch the structure mid-job. Get them right once, up front, and everything downstream falls into place.

Cost codes are the line items your budget and costs are organised under — for example 2.01 Site Establishment, 5.03 Concrete. CortexPM uses a standard, hierarchical list:

  • Codes follow the format X or X.XX (e.g. 5, 5.03).
  • Headings group codes into sections (the trade or stage) for subtotalling.
  • A code can be flagged as builder’s margin or management fee so it’s treated correctly on cost-plus / construction-management progress claims and in reporting.
  • Each code can carry a default type (Material, Labour, Subcontractor…) and unit of measure.

Headings never carry cost

A cost code marked as a heading is a structural row — “2.00 Demolition” sitting above “2.01 Remove Metal Roof Sheeting” and “2.02 Remove Concrete Driveway”. Headings subtotal; they don’t hold money.

CortexPM enforces that everywhere it matters — budget lines, supplier invoice lines, purchase order lines, estimating and takeoff. Try to post to one and you’ll get:

‘2.00 - Demolition’ is a heading, not a cost code. Choose one of its sub-codes.

Lump-sum invoices against a trade. A subcontractor invoices one lump figure against a trade your estimate broke into forty elements. The answer isn’t the heading — it’s a real sub-code for the purpose, like 2.99 Demolition Costs. Add one to each trade where this comes up regularly and coding gets quick.

This rule can’t be switched off. Costs have to be coded at the same level as the budget — a cost posted against a heading would have no budget line to report against.

Code format

Codes are numbers separated by . or - — 1, 2.01, 12.34, 10-45. Letters and spaces aren’t allowed.

Codes must match exactly — 005 and 5 are two different codes.

Cost code sets

A cost code set is a named collection of cost codes you reuse as a template for new jobs — so every project starts from a consistent structure.

  • Open Cost code sets to see your sets.
  • Create a set, give it a name, and add the codes it should contain.
  • Mark one set as the default — it’s the set a new estimate’s cost code dropdown starts with (you can switch sets on the estimate sheet), and where codes created by an estimate upload land. Only one default per company.
  • Edit a set to add or remove codes, export a set, or delete one you no longer use.

Importing cost codes

To load codes in bulk, download the cost code template, fill it in, and upload it. This is the fast way to bring an existing code structure into CortexPM rather than adding codes one at a time.

Tip: make this your day-one setup task — import your standard code list, save it as your default set, and you’re ready to run jobs properly from the first one.


Creating a job

  1. Open Jobs and choose Add new job.
  2. Fill in the details: - Name — the project name. - Client — pick an existing client, or add one first (see CRM & Client Selections). You can also start a job with New job on a client’s record, which fills in the client and their budget. - Address — the site address. Entering it lets CortexPM automatically create a site geofence for mobile site sign-in (see Site Management). - Client budget — the budget figure the client is working to. This is for sales and expectation tracking, separate from your real cost budget. - Status — where the job sits in its life (see below).
  3. Save. You’re taken straight to the job detail page.

Job numbers

Every job gets a unique number automatically, in the form PREFIXYY-XXX — for example CTX25-001. The prefix is your company’s job number prefix (set in Company settings) and YY is the year. You don’t type these; CortexPM assigns the next number in sequence.

Job statuses

A job moves through a lifecycle: Lead → Contract → Pre-Construction → Construction → Handover → Warranty. Status updates as the job progresses and helps filter your job list. You can set it manually when editing a job if you need to override the automatic flow. The client follows: their pipeline status in CRM moves forward to match their most advanced job.


The job detail page

The job detail page is your single view of one project. At the top you’ll find the job’s key details and status; below, the project cost summary — the budget / committed / actual / cost-to-complete / forecast / gain-loss breakdown by cost code. From here you can jump to the job’s estimate, budget, cost-to-complete forecast, cashflow and the other modules tied to this project.

Use the project selector to switch quickly between jobs without going back to the list.


Editing, archiving and deleting jobs

Edit a job at any time to change its name, client, address, budget or status. If you change the address, the site geofence is updated to match.

Archive a job to hide it from your active list once it’s finished or isn’t going ahead. Archiving is fully reversible — archived jobs move to the Archived tab and keep all their history. Restore brings a job back to active.

Delete permanently removes a job, but only when it’s safe to do so:

  • The job must be archived first.
  • It must have no financial activity (no budget lines, commitments, invoices, etc.). If it does, CortexPM blocks the delete and tells you why.
  • You must type the job’s project number to confirm.

Watch out: deletion is permanent and can’t be undone. For finished jobs you want out of the way, archive rather than delete so the records are retained.


Building the budget

Your budget is created from your approved estimate — you don’t type budget figures by hand. The flow is:

  1. Build and approve your estimate (see the Estimating guide).
  2. From the estimate, choose Create budget from estimate.
  3. CortexPM aggregates the estimate’s costs by cost code and writes them as budget lines on the job.

A few things worth knowing:

  • The budget is the cost to build — it uses the builder cost from the estimate and excludes your markup. Markup is the difference between budget and contract price, tracked separately.
  • Every included or allowance line in the estimate needs a cost code before it can be budgeted. If any are missing one, CortexPM lists them and stops, so nothing slips through uncoded.
  • Re-running Create budget from estimate updates the budget while preserving any approved variations already recorded against those lines.

Approved variations add to a budget line’s current budget, so your budget keeps pace with approved scope changes without losing the original figure.


Where committed and actual costs come from

You don’t enter these on the job directly — they flow in from elsewhere and land against the matching cost code:

  • Committed costs appear when you raise purchase orders and subcontract orders (see Purchasing).
  • Actual costs appear when supplier invoices are recorded (see Accounting), including invoices captured by OCR and matched to a PO.

This is how the project cost summary fills in automatically as the job runs.


Cost to complete and forecasting

The Cost to complete screen (headed Update Cost Forecast) is where you forecast how the job will finish. It works from the job’s current estimate (the approved one, or the latest version if none is approved yet) and shows one row per cost code, grouped by stage if the estimate uses separable portions. All figures are ex GST.

Column What it is
Budget The cost code’s current budget: original budget plus approved variations. Falls back to the estimate’s builder cost if there’s no budget line yet
Committed Purchase orders and subcontracts against the code
Actual Costs posted to the code, such as supplier invoices. Payments aren’t counted a second time
Cost to complete What’s still to be spent. Editable
Forecast at completion Actual + cost to complete
Gain / loss Budget − forecast. Green is a gain, red is a loss

How cost to complete fills itself in

Until you enter your own figure, each row’s cost to complete follows where that line is up to:

  • Committed (a PO or subcontract is in place): committed − actual, whatever is still to be invoiced on the commitment. The forecast then equals the commitment, not the budget.
  • Invoiced but nothing committed: budget − actual. The rest of the budget is assumed still to come.
  • Nothing yet: the full budget. The forecast is the budget.

These defaults are a starting point, not a forecast. A line that’s fully committed and invoiced defaults to nothing left to spend, even when you know variations are coming. A line committed under budget shows the saving straight away, even when you expect it to be eaten up.

Updating the forecast

  1. Open Cost to complete for the job. From the Job Cost dashboard, switch to Projects and choose Forecast on the job’s card.
  2. Work down the rows. Wherever you know better than the default, type the cost to complete. For example, enter $2,000 still to come on a skip bin line that’s been invoiced in full, or $0 on a line you won’t need. Forecast and gain/loss update as you type.
  3. Click Save forecast. The project cost summary, the Job Cost dashboard and the cost reports all use the saved figures.

Save forecast only stores the rows you changed. Those rows are outlined, with a reset arrow beside the box, and keep your figure until you change it again. Rows you haven’t touched keep following new POs and invoices. To put a row back on its default, click its reset arrow (or empty the box) and save.

If a PO, invoice or budget line lands on a cost code that isn’t in the estimate, it shows up as its own row automatically. Forecast it the same way.

Recalculate throws away every saved cost to complete on the job, including rows outside the estimate, and puts every row back on the defaults above. You’ll be asked to confirm. Use it when you want a clean start on the whole job, then put your own figures back where you know better and save. For a single row, use its reset arrow instead.

Tip: updating cost-to-complete regularly keeps the forecast and gain/loss honest. It’s the number that tells you early whether a job is heading over.


Forecast snapshots

A snapshot freezes the job’s forecast at a point in time — typically once a month — so you can track how the forecast has moved over the life of the job.

  • From the cost-to-complete screen, create a snapshot: give it a name (e.g. “June 2025 Forecast”), a date and any notes. It records the budget, committed, actual, cost-to-complete, forecast and gain/loss for every line as they stand. Save the forecast first. A snapshot records the saved figures, not unsaved edits on screen.
  • Open a snapshot from Forecast History and Approve it to mark it as the agreed position for that period. A pending snapshot can be deleted; an approved one can’t.
  • Compare two snapshots to see exactly what changed between them, line by line. The button shows once the job has two or more.
  • Export a snapshot or a comparison to PDF or Excel for reporting and meetings.

Watch out: a job needs an estimate before you can snapshot it — the snapshot is built from the estimate’s lines.


Cashflow

Each job has a cashflow view that projects money in and out over time. When the program is linked, these projections tie to the construction schedule rather than being a generic forecast — so the timing reflects how the job is actually planned to run (see the Program guide).


The Job Cost dashboard

The Job Cost Dashboard lifts you above any single job to your whole portfolio — the owner’s at-a-glance view of how the business is tracking, not just one build. It opens on six tiles across the top — Total Projects (with how many are over budget or at risk), Total Budget, Committed Cost, Total Actual Cost, Forecast at Completion, and Net Gain or Net Loss depending on which way it’s running.

Below that, two views.

Analytics is the default — the whole business at a glance:

Card What it shows
Budget vs Committed vs Actual Where the budget has gone
Monthly Cash Flow Trend Actual vs committed vs forecast spend
Spend Tracker Spend to date against the budget plan and the forecast
Cost Variance by Trade Forecast against budget, by trade
Margin Tracker Forecast margin against the margin in your original budget
Cost-to-Complete Exposure Split into actual paid, committed but not paid, remaining budget and forecast overrun
Trade Package Performance Red/amber/green by trade — click a row to drill in
Cash Position Billed against spent, flagging any job spending ahead of billing

Projects lists the jobs themselves, as cards or a table, filtered by status and searchable by client or job. The table gives you Job #, Client, Status, Budget, Actual, Forecast, Margin %, Variance and Billing %, all sortable, with badges for Over Budget, At Risk, On Track, Under Budget and Complete. Click through to that job’s cost report or its cost-to-complete page.

Tip: the Margin Tracker is the one to watch weekly. Budget overruns show up in the variance columns eventually, but margin erosion shows there first.


When an invoice has no job

A bill that arrives from Xero without enough information to place it on a job is held as unallocated and appears in the Invoice Inbox for someone to deal with.

It doesn’t land on a job until you put it there, so a job’s costs only ever include what you’ve allocated to it. You’ll see a banner on the Job Cost dashboard — “N invoices need allocating” — with a link straight to the inbox.

See Accounting for working the inbox.


Job cost reports

From the Reports hub:

Report What it gives you
Work In Progress Financial status across all active projects — contract values, costs, claims, margins
Job Cost Forecast Budget vs committed, actual and forecast by cost code — the cost report as a document
Budget vs Actuals Budgeted against actual
Committed Costs vs Budget What POs and subcontracts have locked in
Cost Code Overrun / Risk The codes over budget or heading that way
Cost Movement / Budget Changes Budget changes and variations over time
Job Cost Snapshot One page per job, for a board pack or a bank
Subcontractor Cost Performance Subcontractors against their contracts and allowances

Where to next

The budget that drives all of this comes from your estimate — see Estimating for building and approving estimates, and Takeoff for measuring quantities off your drawings.