Xero doesn't have a built-in way to hold back retentions on an invoice, and it doesn't keep a progress claim schedule against a contract. Most builders and subcontractors handle it one of three ways: a retention line and a separate balance sheet account in Xero, a construction app that does the claims and sends invoices to Xero, or a spreadsheet beside Xero that tracks what has been claimed, held and released. Each works up to a point. This guide explains how each one works, when it is enough, and the signs that you need something more joined up.
Why Xero struggles with construction billing
Xero is built for "send an invoice, get paid in full". Construction contracts don't work like that. A typical job has:
- a contract value, often changed by variations along the way,
- progress claims made each month against a schedule of works (a percentage of each stage, not a fixed amount),
- retention money held back from each claim, usually released in stages at practical completion and at the end of the defects period,
- and, on the subcontractor side, retentions held against you by the head contractor.
Xero can record the money side of all of this, but it doesn't keep the contract picture: how much of the contract has been claimed, how much retention is held on each job, and when each amount falls due for release. Xero Projects (on the Ultimate plan) can invoice deposits and progress payments on a project, and Xero has said it is working on fuller progress payments. On retentions, Xero said in May 2024 that it wasn't planned, and suggested the workaround below. So for now, plan around what Xero does today.
Option 1: Handle it inside Xero with a retention account
The simplest workaround is to do it all in Xero:
- Set up a balance sheet account called something like "Retentions receivable" (and "Retentions payable" if you hold retentions from your subcontractors).
- Raise each progress claim as an invoice for the full claim amount, with a second line deducting the retention and coding it to the retentions account.
- When retention is released, raise an invoice for the released amount coded to the same account.
- Track the claim schedule itself (contract value, variations, claimed to date, percentage complete) in a spreadsheet.
When this is enough: a handful of jobs at a time, simple contracts and one person doing the billing. It costs nothing extra.
Where it breaks down: the retentions account shows one total, not what is held on each job or when it is due back. The claim schedule lives in a spreadsheet that has to agree with Xero by hand. Variations, partial releases and jobs that run across financial years are where the numbers drift, and retention money is easy to forget about once a job is finished.
Option 2: Use a construction app that does the claims
Several construction platforms handle progress claims and retentions properly and send the resulting invoices to Xero. Payapps focuses on payment claims, and job management systems such as simPRO and Buildxact include claim features for different sizes of business. Check each one against how your contracts actually work before you commit.
When this is enough: if the app handles your contract types, your claims are mostly standard, and the invoices flow cleanly into Xero, this is usually the right answer. Use the app; you don't need custom work.
Where it breaks down:
- The app knows the claims, but your costs (purchases, subcontractor bills, timesheets) are in Xero or another system, so profit and WIP by job still need a spreadsheet.
- The sync only goes one way, or only sends invoices, so retention releases, credit notes and variations have to be fixed by hand in Xero.
- You run several entities, or claims in one system and estimating in another, and nothing shows the whole position in one place.
Option 3: The spreadsheet beside Xero
Many builders end up here even after trying options 1 and 2: a claims and retentions register in Excel, updated from Xero each month. It works when one careful person owns it. The risk is that it depends on that person, it is always a little out of date, and it is the last place anyone looks when cash gets tight.
Signs it is bigger than a workaround
It is worth fixing properly when:
- you can't say, within a few minutes, how much retention you are owed across all jobs and when each amount is due back,
- claims, variations and retentions are typed into more than one system,
- month-end WIP and cash flow depend on a spreadsheet only one person understands,
- or you run more than one company, or more than a few jobs at a time.
At that point the job is usually to connect the systems you already have rather than replace them: the claims system, Xero, and the place where costs are recorded, feeding one register and one report showing claimed, held, released and due by job. For example, if your claims are in a construction app and your costs are in Xero, a connected report can show retention held and due dates for every job, updated automatically, without anyone retyping it.
That is the kind of work we do. See job costing and WIP for builders, construction cash flow forecasting and builder accounting software integration.
Frequently asked questions
Can Xero hold back retentions on an invoice?
Not as a built-in feature. The usual workaround is a negative line on the invoice coded to a retentions receivable account, then a separate invoice when the retention is released. It works, but Xero won't show retention held per job or when it is due.
Does Xero do progress claims?
Partly. Xero Projects (on the Ultimate plan) can invoice deposits and progress payments on a project, and Xero says fuller progress payments are in development. What it doesn't keep is a claim schedule against the contract value, with variations and retentions. Builders usually keep that in a construction app or a spreadsheet and send the invoices to Xero.
Do I need custom software for retentions?
Usually not. If a construction app handles your contracts and syncs cleanly with Xero, use it. Custom work only makes sense when the information is split across several systems or entities and you need one accurate view of claims, retentions and cash.
How do I track retentions owed to me across all jobs?
You need a register with the job, contract, retention percentage, amount held, release dates and conditions, and what has been released so far. Whether it is a spreadsheet, an app or a connected report, it should be updated from the same source as your invoices, not by retyping.
If retentions, claims and job costs are spread across Xero, a construction app and spreadsheets, book a free initial chat. We'll tell you honestly whether an app will do the job, or what it would take to connect what you already have.