Construction Retainage Accounting: How to Track the 10% Everyone Forgets
Every construction contract has a clause that quietly holds back a slice of every invoice you send. You do the work, you bill the work, and 5 or 10 percent of the money sits on the other side of the fence until the job is finished and everyone agrees it is finished.
That slice is retainage, and construction retainage accounting is where a lot of contractor books quietly fall apart. Not because the idea is complicated, but because QuickBooks Online does not track it for you. If nobody sets it up, the withheld money either clogs your receivables or disappears from your books entirely.
Both versions end the same way: you cannot answer the only question that matters, which is who owes you retainage, on which jobs, and when you can go collect it. Here is what goes wrong, and how to set it up right:
- Retainage buried in regular receivables, aging like unpaid debt
- Invoices recorded at the net amount, so the withheld money never exists
- Release invoices that never get sent after the job wraps
- Retainage you hold from subs with no payable on the books
- Profit reports that look great while the cash is somewhere else
What retainage is, and why it eats your margin
Retainage (your contract might call it retention) is the percentage an owner or general contractor withholds from each progress payment until substantial completion or final acceptance. Five or ten percent is typical. In Texas, ten percent is the standard number on most private jobs; the Property Code tells owners to hold it.
Now the uncomfortable math. If your net margin on a job is 8 percent and the customer is holding 10 percent, your entire profit is sitting inside the retainage. Everything you have collected so far went to labor, materials, subs, and overhead. The profit arrives at the end, after the punch list, and only if you actually go get it.
So retainage is not a rounding error. On a $500,000 contract at ten percent, it is $50,000 of your money living in someone else’s bank account for months. Your books should be able to point directly at it.
The classic mistake: retainage buried in your receivables
The default failure mode looks responsible. You invoice the full draw, the customer pays 90 percent, and the withheld piece just stays in accounts receivable. Multiply that by every draw on every job, and your A/R aging slowly fills with amounts that are 90, 120, 180 days old.
Except none of it is late. It is retainage doing exactly what the contract says it would. Your aging report cannot tell the difference, though, so your collections list fills up with money you cannot collect yet, sitting right next to money you urgently should. Eventually everyone stops trusting the report, which is how the genuinely overdue invoices start getting ignored too. Your banker, reading that aging at renewal time, does not love it either.
The other version is worse. Some contractors invoice at the net amount, or write the withheld piece off as a discount to keep A/R tidy. Now the retainage does not exist anywhere in your books. Nobody is watching it, because as far as QuickBooks Online knows, there is nothing to watch.
How to set up retainage receivable in QuickBooks Online
The fix is one account and one item. Create an Other Current Asset account called Retainage Receivable. Then create a service item, call it Retainage Withheld, and point it at that account instead of an income account.
On each progress invoice, bill the full amount you earned, then add the retainage item as a negative line for the withheld percentage. A $100,000 draw at 10 percent shows $100,000 of billing, minus $10,000 of retainage, invoice total $90,000. The customer sees exactly what the contract says. Your books record the full revenue, keep the collectible $90,000 in A/R, and park the $10,000 in Retainage Receivable where you can see it.
Turn on Projects and do this on every job, and Retainage Receivable stops being a mystery balance. It becomes a list: this job, this much, releasable on this date. That is the entire point.
The release invoice nobody remembers to send
Here is where real money gets lost. The job wraps, the crew moves to the next site, and the final retainage billing never happens. The progress draws had a rhythm to them. The release does not. It is one last invoice with nothing and no one pushing it out the door.
When the job hits its finish line, bill it: a new invoice using the Retainage Withheld item as a positive line, which moves the balance out of Retainage Receivable and into regular A/R, where it can age like a normal invoice, get chased like a normal invoice, and get paid. Attach the close-out paperwork the contract calls for, because the owner will ask, and every week it slides is another week you are financing their project for free.
If you have been at this a few years, do the archaeology once. List every completed job, check whether final retainage was billed and collected, and prepare to be annoyed. Finding a forgotten five-figure receivable is a good day that should never have been possible.
You hold retainage too: the payable side
If you use subs and withhold from their payments, the same structure runs in reverse. Enter each sub’s bill in full so your job costs are honest, and post the withheld piece to an Other Current Liability account called Retainage Payable.
Skip this and one of two things happens. Either you pay subs in full out of habit and give away the protection your contract built in, or your job cost reports understate the real cost of the work because the tail-end payments are floating in nobody’s forecast. Retainage Payable is also simply money you owe. Your balance sheet should admit that.
Retainage and the question of whether the job made money
On accrual books, retainage you have billed is still revenue. That means the P&L can show a finished, profitable job while your bank account strongly disagrees, because the profit is parked in Retainage Receivable waiting on a punch list. That is not a contradiction. It is timing, and books set up right let you see it instead of making you feel crazy.
This is also where retainage plugs into work-in-progress reporting. Your WIP schedule compares what you have earned to what you have billed. Retainage decides how much of what you billed has actually turned into cash. If your WIP setup is shaky too, we wrote about that here: Contractor WIP Tracking: 5 Critical Setup Mistakes to Avoid.
The ten-minute retainage audit
- Open your balance sheet. Is there a Retainage Receivable account, and can you break its balance down by job without guessing?
- Run your A/R aging. Is anything in the 90-plus column actually retainage wearing a disguise?
- List the jobs you finished in the last two years. Was final retainage billed and collected on every single one?
- If you withhold from subs, does Retainage Payable match what you actually owe, job by job?
Four questions. If any answer is a shrug, your retainage is being tracked by vibes, and vibes do not collect receivables.
None of this needs special software. QuickBooks Online handles retainage fine once the account and the item exist and someone uses them on every draw. It just never sets itself up, and it is much easier to start clean than to reconstruct three years of half-tracked retainage after the fact. We have done that reconstruction. Bring coffee.
Retainage scattered all over your books?
We set up retainage tracking that ties to every job, dig up the release invoices nobody sent, and hand you books you can actually trust. The call is free and takes 15 minutes.
Book a Free Call