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 your estimate of what’s still left to spend.
- Forecast at completion is where the job will finish: actual + committed + cost to complete. Compared against the budget, that’s your gain or loss.
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
XorX.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 starting point for new projects. 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
- Open Jobs and choose Add new job.
- Fill in the details: - Name — the project name. - Client — pick an existing client, or add one (see the CRM guide). You can also start a job straight from a client’s record, which pre-fills this. - 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).
- 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 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:
- Build and approve your estimate (see the Estimating guide).
- From the estimate, choose Create budget from estimate.
- 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 is where you forecast how the job will finish.
- Open Cost to complete for the job.
- For each cost code, review the actual and committed to date, then enter your cost to complete — what you expect is still to be spent on that line.
- Save. CortexPM works out the forecast at completion (actual + committed + cost to complete) and the gain or loss against budget for each line and the whole job.
You can also add a forecast against a cost code that isn’t in the estimate (an ad-hoc line) for costs that have emerged since.
Recalculate clears your manual forecasts and rebuilds them from current data — handy when commitments and actuals have moved a lot and you want a clean starting point.
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.
- Approve a snapshot to mark it as the agreed position for that period.
- Compare two snapshots to see exactly what changed between them — line by line.
- 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.