Xero on its own won't tell you whether a job made money: it caps you at two tracking categories and its Projects module is built for time and expenses. Trades do job costing in their job software instead. Tradify and Fergus build it into the core plan, ServiceM8 sells it as an add-on, and all three compare quoted cost to actual cost and sync to Xero. The catch is timing: the actual figure only moves once a bill is logged and matched to the job. Buy materials on a running account, invoice the job in stages, and you find out a job lost money three months after you quoted the next one the same way.
Before you write Xero's own Projects module off, check what it actually costs: Xero Projects pricing in NZ covers which plan you need and what it doesn't tell you about job margin.
If a partner has suggested moving off Xero to Dynamics 365 to get job costing, read Business Central, or a Power App on top of Xero first.
The report that joins the job system to Xero is a Power BI page; Power BI on Dataverse for a 10-person firm prices it and lists the three reports worth building.
If the plan is "put Xero in Power BI", read connecting Xero to Power BI first; there is no native connector, and the route that gives job costing is the one that joins Xero to your jobs in a table you own.
The pattern: quote here, costs there, Xero as the only thing everyone trusts
Usually it's three half-good systems. The quote gets built in whatever job management tool you run. The invoice, once the job's won, flows through to Xero the way it should. And off to the side sits a spreadsheet, updated by hand, tracking whether the job made money and what to put aside for GST. Nobody keeps that spreadsheet because they like spreadsheets. They keep it because the job costing report in the tool almost answers the question and then doesn't, so the real number ends up in a tab that one person maintains.
The tell is which system people trust. Ask a tradie where the real numbers live and they'll point at Xero, because that's what has been paid and billed. Everything upstream of that, the quote, the job cost, the margin, gets treated as an estimate until Xero confirms it. That's backwards. By the time Xero confirms it, the job's finished and the next one's already quoted.
What Tradify, Fergus and ServiceM8 give you
All three do real job costing on top of the invoicing. Know what each version covers before you decide the gap needs building around.
Tradify has a Costs & Profitability view and a job financial report built into the core plan. It sets quoted cost against actual cost and calculates gross profit as invoiced amount minus actual cost. Materials ordered against a job flow through as purchase orders or supplier bills, so the cost lands against the right job as those get entered, and the Xero sync runs close to real time in both directions.
Fergus is NZ-built and job costing is closer to the point of the product than a feature bolted on. Supplier invoices can be imported automatically, by drag and drop or email, and matched to the right job. You can split a single supplier invoice across several jobs and job phases, which most tools don't bother with. There's a dedicated "back costing" status that holds a job before it's finally invoiced until the supplier costs have landed and been matched, specifically so you're not invoicing on a guess. Of the three, it's the one built around getting job-level margin right.
ServiceM8 handles job costing differently: it's a separate paid add-on, not part of the base plan. Once switched on, it gives an estimated profit figure per job worked out from material purchase cost, labour, and a loaded cost for admin time, plus a further add-on for setting percentage margins line by line. It's a useful number for a business running a high volume of service jobs, and it's easy to miss that you're paying extra for it, or to run the tool for months without ever turning it on.
| Tool | Job costing | Handles staged jobs |
|---|---|---|
| Tradify | Built in: quoted vs actual, cost from POs and bills | Assumes one job, one invoice |
| Fergus | Built in: back costing, invoices split across jobs and phases | Strongest of the three for staged or phased work |
| ServiceM8 | Paid add-on: estimated profit from cost, labour, admin loading | Built around single jobs, not progress claims |
The specific gap: material bought on account against a job invoiced in stages
All three, Fergus included, run into the same wall here. Job costing works by comparing quoted cost to actual cost, and the actual figure only moves when a bill gets logged and matched to a job. If you buy materials on a running trade account, the kind where you draw stock through the month against a supplier and get billed on a statement, that bill doesn't land the day the materials go into the job. It lands weeks later, often covering several jobs at once, and someone has to split it back out and match each line to the right job before the job's actual cost is true.
Add a job that's invoiced in stages, a renovation with a deposit and progress claims, a commercial fit-out billed at milestones, and the timing gap gets worse. You invoice stage one while the materials for stage two are already sitting on the account, drawn but not yet costed against the job. The job's live profit figure looks fine, because half its true material cost hasn't hit the ledger yet. By the time the account gets reconciled and the real number lands, the invoice for that stage is long gone, and the margin call for it was made on incomplete information.
The vendors know about this. Fergus built back costing specifically to hold a job until costs are matched, and lets you split a supplier invoice across jobs and phases for exactly this reason. That matching is still a step someone has to do, whether it's drag and drop, email ingestion, or a bookkeeper doing the monthly reconcile. If the step lags a week or a month behind the work, so does the number, and the report ends up accurate about last month.
When a lightweight bridge beats another subscription
This is a narrow case and worth being precise about, because for most trades the answer is to buy the built-in job costing and use it. The case for a bridge looks like this: you're already running Tradify, Fergus or ServiceM8, your jobs get invoiced in stages, and you buy materials on a running account across one or more suppliers that gets reconciled to jobs by hand, monthly or less often. By the time that reconciliation happens, you've already quoted the next few jobs the same way, on a margin assumption that hadn't been checked against reality yet.
The fix there is a small, specific automation rather than another job management product: pull the account transactions or bills as they land in Xero and tag or split them against the right job and phase as they arrive, instead of waiting for the account to be reconciled at month end. That closes the gap from weeks to days without replacing Fergus or rebuilding job costing from scratch, and it leaves two working systems in place. If you don't run material on a trade account, or your jobs aren't staged, this case doesn't apply to you and buying it would solve a problem you don't have. I go through how to weigh a build like this against another subscription on the services page.
What good looks like: margin known before the next quote
Fix this so the margin on the job you're finishing this week is known before you quote the next one that looks like it, rather than three months later when the account catches up and you realise you underpriced the last four. The cost of the gap is the pricing decisions made on old information, and that's a much bigger number than the admin time. For one trade where the quote is six jobs pretending to be one, kitchen joinery quoting: where the hours actually go breaks that process down.
Most trades get most of the way there by picking the tool that matches how they invoice, Fergus if jobs run in stages, Tradify if they don't and ease of use matters more, ServiceM8 if it's high-volume service work, and then turning the job costing reporting on. I go through the full comparison, including where each one is priced and what to watch for, in the four job management tools guide. If the double entry into Xero is still the bigger daily pain than job costing itself, that's a separate, more common problem, covered in how to stop retyping invoices into Xero every night. And if the margin problem starts one step earlier, at the quote rather than the job costing after it, that's a different fix again.
If you've done all that and the number still lands weeks late because of how materials get bought and jobs get staged, that's a scoping conversation rather than a subscription. Book a free 30-minute call and I'll tell you whether it's a setting you haven't turned on, a different tool, or the narrow bridge case above. It's often none of those, and I'll say so.
Common questions
Does Xero do job costing for trade businesses?
Not deeply on its own. Xero caps you at two active tracking categories, and its Projects module is built for tracking time and expenses on a handful of jobs, closer to what a consultant needs than what a multi-stage trade job needs. Most trades pair Xero with a job management tool like Tradify, Fergus or ServiceM8 for the costing itself.
Which is better for job costing: Tradify, Fergus or ServiceM8?
Fergus is NZ-built specifically around job costing, with a back-costing step that holds a job before invoicing until supplier costs are matched, and the ability to split one supplier invoice across several jobs and phases. Tradify's job costing is built into the core plan and easier to learn. ServiceM8's job costing is a separate paid add-on, strongest for high-volume service trades once it's switched on.
Why does a job look profitable right up until the material bill lands?
Because job costing reports show actual cost as of the last bill matched to that job. Materials bought on a running trade account often aren't matched and split against the right job until the account is reconciled, weeks after the work happened. If the job was invoiced in stages, the invoice for that stage can already be out the door before its real material cost has hit the ledger.

Still finding out a job lost money after the fact?
Free 30-minute call. Show me how you buy materials and how you invoice, and I'll work out where the number goes missing.