How to see profit by job in Xero (and why it often looks too good)
Tag each job with a tracking category, compare jobs in the Profit and Loss, then add the labour Xero leaves out. Worked example with three jobs.
Updated 23 October 2026
ReportPilot reads your Xero and emails you what your numbers mean every Monday. Try it free (14 days, no card)
Short answer: create a tracking category called Job in Xero, tag every invoice, bill and spend line for a job with that job’s option, then run the Profit and Loss and choose to compare by that tracking category. Each job gets its own column. Before you trust the columns, check one thing: payroll wages are usually not tagged to jobs, so the report shows each job’s profit before the labour that went into it. A job can look like your best and be your worst. Add each job’s labour hours at your full hourly cost (shown below) and the order often changes.
Menu names move between Xero releases and differ slightly by region. If a label below does not match your screen, search Xero Central for the report name.
Two ways to get job profit out of Xero
| Tracking categories | Xero Projects | |
|---|---|---|
| What it is | A tag on each transaction line. Xero has two active tracking categories, each with a list of options | A separate area where each job has an estimate, time entries and costs |
| Where you see profit | Profit and Loss, compared by tracking category | The project’s own summary and profitability views |
| Labour | Only if wages are tagged or journalled to the job | Time entries carry a cost rate, so labour is in |
| Plans | Every plan | Included on some Xero plans and an add-on on others: check yours |
| Best for | A handful of jobs a month, or splitting by job type, site or crew | Quoted jobs where you want estimate against actual |
Many trades and contractors also use a job management app that connects to Xero; those apps do the job costing and send invoices and costs to Xero. Whichever you use, the rule is the same: a cost that is not tied to a job makes every job look better than it is. Job profit also says nothing about when the money arrives: on a building contract with monthly valuations and retention, a construction cash flow projection shows how much cash a profitable job needs before it pays back.
Setting up tracking for jobs
- Create the category. In Xero’s settings, open Tracking categories, add a category called Job, and add an option per job (for example “Smith bathroom”). Archive options when a job is finished so the list stays short.
- Tag the sales. Pick the job on every invoice line.
- Tag the direct costs. Pick the job on supplier bills, receipts and bank transactions for materials, hire and subcontractors. A bank rule can fill it in for regular suppliers, but check bank-fed costs: untagged lines are the usual reason a job looks cheap.
- Leave overheads untagged. Rent, insurance, the van lease and admin wages are not one job’s cost. They show in the Unassigned column.
- Run the report. Accounting › Reports › Profit and Loss, pick the dates, and choose to compare by the Job tracking category. Pick dates that cover the whole job: a job invoiced in March with materials bought in February needs both months.
If you already use your two tracking categories for something else (often region and department), Xero Projects or a job app is the cleaner option. For location or department reports, see Xero tracking category reports.
A worked example: a plumbing business, one quarter
A plumbing business in Australia tags invoices, materials and subcontractors to three jobs. The Profit and Loss compared by job shows:
| From Xero | Smith bathroom | Lee renovation | Café fit-out |
|---|---|---|---|
| Sales (ex GST) | $28,000 | $46,000 | $18,000 |
| Materials | $9,500 | $17,000 | $8,200 |
| Subcontractors | $4,000 | $6,000 | $0 |
| Profit in Xero | $14,500 | $23,000 | $9,800 |
| Margin in Xero | 51.8% | 50.0% | 54.4% |
On this report the café fit-out is the best job. But the plumbers are paid through payroll, and those wages sit in the Unassigned column. The timesheets show 120 hours on the bathroom, 260 on the renovation and 150 on the café. Their full cost is $50 an hour (pay, super, workers’ compensation insurance and leave):
| After labour | Smith bathroom | Lee renovation | Café fit-out |
|---|---|---|---|
| Labour (hours × $50) | $6,000 | $13,000 | $7,500 |
| Profit after labour | $8,500 | $10,000 | $2,300 |
| Margin after labour | 30.4% | 21.7% | 12.8% |
| Profit per labour hour | $70.83 | $38.46 | $15.33 |
Across the three jobs: sales $92,000, profit in Xero $47,300 (51.4%), after labour $20,800 (22.6%).
The business also has $15,900 of overheads in the quarter (van, insurance, phone, office). Spread over the 530 labour hours, that is $30 per hour. After its share of overheads ($3,600, $7,800 and $4,500), the bathroom made $4,900, the renovation $2,200, and the café fit-out lost $2,200. The job with the best margin in Xero was the only one that lost money.
What the owner does with that: quote the next fit-out with the real hours (it took 150 hours against far fewer quoted), or charge more per hour on that kind of work. The free break-even calculator shows the sales the business needs to cover its overheads, and the margin and markup calculator turns a target margin into a price.
Do not simply stop taking fit-outs, though. The $4,500 of overheads given to that job is still paid if you turn it down, so saying no would have left the business $2,300 worse off in the quarter (the job’s profit after labour), not $2,200 better, and worse still if the plumbers would have sat idle on wages instead. Whether to take a kind of job is a question about the cash that changes, which the incremental cash flow guide works through.
Getting labour into the job figures
- Profit per labour hour is the quick check. If you know the hours per job from timesheets, divide each job’s profit in Xero by its hours. A job far below the others is costing you, even before overheads.
- Use the full hourly cost, not the pay rate. Add super or pension, payroll taxes, insurance and paid leave, then divide by the hours actually worked on jobs, not hours paid. The wage percentage calculator shows what labour costs as a share of sales.
- Journal labour to jobs. Your bookkeeper can post a monthly journal that moves wages from the untagged line to each job by hours. The Profit and Loss by job then includes labour without any change to payroll.
- Or use time entries. Xero Projects and job apps cost each hour you log, so labour lands on the job as you go.
Common questions
Can Xero show profit by job? Yes. Tag invoices and costs with a tracking category for each job, then run the Profit and Loss compared by that category, or use Xero Projects, which shows profit per project from its own estimates, time and costs.
Why does my job profit in Xero look too high? Usually because wages are not tagged to jobs, so each job’s figure is before labour. Untagged bills and bank transactions for materials have the same effect. Check the Unassigned column for costs that belong to a job.
What is the difference between tracking categories and Xero Projects? Tracking categories are tags on transactions that let any report split by job. Xero Projects is a separate tool for quoted jobs with estimates and time entries, and is not included on every Xero plan.
How many tracking categories can I have in Xero? Two active tracking categories, each with its own list of options. If both are already in use for something like region or department, use Projects or a job management app for jobs.
Should overheads be split across jobs? Not in Xero’s books: leave them untagged. For pricing, work out overheads per labour hour and add that to each job’s hours, so you can see which jobs pay their share.
What is a good profit margin per job? It depends on your trade and your overheads. Work it backwards: the margin after labour across all jobs has to cover your overheads and leave the profit you want. In the example, 22.6% after labour on $92,000 of sales is $20,800, which covered $15,900 of overheads with $4,900 to spare.
Seeing the whole business every Monday
ReportPilot reads your Xero figures and sends a short plain-English email every Monday. It reports on the whole business, not per job, but it flags when gross margin moves by 3 points or more and when any cost line runs more than 25% above its 6-month average, the places where an underquoted job shows up first. If profit fell and you cannot see why, why did my profit drop walks through the checks, and Xero gross profit margin explains what belongs in cost of sales. ReportPilot asks Xero for read-only access, and there is a 14-day free trial with no card.
No Xero needed
Get a sample Monday email for a business like yours
Pick your kind of business, rough sales and country. We email you the Monday email ReportPilot would write for a business like that: cash, sales and profit against last month, who owes money and one thing to do. Made-up figures, clearly labelled as a sample, from the same engine as the real one.
We email a link to confirm first; nothing else is sent until you press it. Then the sample, a few related emails over three weeks and a monthly cash check. One click to unsubscribe.