1. Home
  2. Help
  3. Workspace
  4. Cost tracking and profitability
Workspace

Cost tracking and profitability

How costs get tied to a project and roll up into margin. Cost-coded budget lines are the spine: purchase orders and T&M tickets attach to a cost code, a nightly rollup posts them as committed and actual, and margin falls out of budget vs forecast vs actual.

The short answer

You do not enter costs into a profitability report. You give the project a cost-coded budget, then make sure every commitment carries a cost code. Trueleveler rolls the commitments onto the budget lines for you, and every margin number on the platform is derived from that one table.

Three steps, in order. Skipping step 2 is the usual reason a margin number looks wrong.

1. Build the budget

Project → Financials → Budget. Add a line per cost code — this is your Schedule of Values. Each line carries a cost code, description, division, and budgeted amount. Import a CSV if you already have an SOV.

2. Cost-code every commitment

A purchase order or T&M ticket with no cost code cannot be attributed to a budget line. It is not dropped — it lands in an __UNMAPPED__ bucket so the money is still visible — but it will not appear against the line you expect.

3. Read the margin

Command Center shows the project-level verdict. Compliance & WIP shows the accounting view. The Budget tracker shows it line by line.

What actually rolls up

The job-cost rollup aggregates purchase orders and T&M tickets onto project budget lines, matching on cost code. It writes two numbers per line: committed_amount (money you are on the hook for) and actual_amount (money recognised as spent).

It runs automatically every night at 02:00 UTC for every active project. You do not have to wait for it — the Budget tracker has a Refresh job costs control that runs it for the current project on demand. Use that after a batch of POs, otherwise the numbers are correct as of last night.

Purchase orders

The PO's cost code drives the match. On procurement items the cost code is derived from the CSI code — set the CSI code and the cost code follows.

T&M tickets

Extra work priced as time & materials. Once a ticket carries a cost code it rolls into that line like any other commitment.

__UNMAPPED__

The bucket for source rows with no cost code. If your budget looks under-spent, look here first — the money is almost always sitting in it rather than missing.

Budget vs committed vs actual vs forecast

Four columns that are routinely confused, and the confusion is what makes a margin number look wrong:

Budgeted

What you planned to spend on this cost code. You enter this.

Committed

What you have contractually promised — issued POs and T&M. Rolled up, not typed.

Actual

What has been recognised as spent. Rolled up, not typed.

Forecast (EAC)

Estimate at completion. Defaults to committed, and you can override it per line when you know a line will land somewhere else. Forecast — not actual — is what makes margin forward-looking.

Margin is reported three ways off these: budget margin (from budgeted), forecast margin (from EAC), and actual margin (from actual to date). A project that looks profitable on actuals and thin on forecast has commitments that have not been invoiced yet — that is the number to trust.

Where profitability is reported

Command Center

Project-level headline: contract value, forecast margin, and a cash-flow verdict. Start here.

Budget tracker

Line-by-line budget / committed / actual / forecast / variance, plus a buyout view of which codes are still to buy.

Compliance & WIP

The accounting view — work in progress, over/under billing, earned revenue.

Analytics

Portfolio roll-up across projects, and the financial lens.

Bid vs Actual engine

Compares what you bid against what it actually cost, so the next estimate is better than the last one.

If the numbers look wrong

Costs missing from a line

Almost always a missing cost code on the PO or T&M ticket. Check the __UNMAPPED__ bucket — the money is there, just unattributed.

Numbers look stale

The rollup is nightly. Hit Refresh job costs in the Budget tracker to recompute this project now.

Margin looks too good

You are probably reading actual margin on a project with un-invoiced commitments. Read forecast margin instead.

Change orders not counted

Only approved COs move contract value. Pending COs are shown separately on purpose — a margin that counted unapproved COs as revenue would be a fiction.