On this page
Somewhere right now a bookkeeper at a construction company has two windows open. One is QuickBooks, showing a balance in an account called Retainage Receivable. The other is a spreadsheet with a row per job and a retainage column. The two numbers do not match, and the next hour is about finding out why.
This happens every month, at a lot of companies, and almost nobody talks about it because it does not feel like a software problem. It feels like the job. I want to make the case that it is a software problem, and that the reason it never gets treated as one is that the workaround is genuinely good enough to survive for years.
Related case study
An AIA pay application engine that matches the contractor's own file to the cent
Pearl Street Systems bills progress on multi-million dollar electrical jobs using AIA forms, where every invoice depends on the last one and the spreadsheet holding the chain lives with one person. We built the engine that produces those invoices, and proved it at 0.0000% drift against their real file.
See our workWhat retainage actually is
Retainage is the 5 to 10 percent held back from every progress payment until the job is finished and accepted. It is money you have already earned, sitting with somebody else, and on a long job it can quietly become the largest single thing you are owed.
Retainage, or retention depending on who you ask, is money held back from every progress payment until the job is finished and accepted. Usually 5 to 10 percent. It protects the owner against work that never gets completed properly, and it has been standard in construction for a very long time.
Here is the part that matters for accounting. Retainage is not a discount and it is not money you failed to earn. You did the work. Somebody else is holding your money until the end of the job. On a long commercial job it can quietly become the single largest thing your company is owed, which is a strange position for a number that lives in a spreadsheet.
Why there is no retainage field
QuickBooks is general accounting software and retainage is a construction convention, so there is no field for it in QuickBooks Online or Desktop. That is not an oversight. It is a general tool meeting a specific trade, which is the same shape as most software complaints in this industry.
There is no retainage field in QuickBooks Online. There is not one in Desktop either. People assume they have missed a setting, and they have not.
This is not really a knock on QuickBooks. It is general accounting software, and retainage is a construction convention that most of its users will never encounter. The mismatch is the same shape as most software complaints in this trade: a general tool meeting a specific practice, and the practice losing. What is worth noticing is what happens next, because that is where the actual cost is.
The workaround everyone actually uses
Create a Retainage Receivable account on the balance sheet, create a service item mapped to it, and put that item on every progress invoice as a negative line. The invoice total drops to what is due now and the held-back money lands on the balance sheet instead of vanishing. It works, and it is the right setup.
Every accountant who works with contractors lands on the same setup, which is a good sign that it is the right one. Three steps.
- Create the account. An Other Current Asset account on the balance sheet, called Retainage Receivable. This is where the held-back money lives so that it stops being invisible.
- Create the item. A service item mapped to that account, so it can be used on an invoice.
- Put it on every progress invoice as a negative line. Bill $10,000, add the retainage item at negative $1,000, and the invoice total becomes $9,000. The customer owes $9,000 now. The other $1,000 moves onto your balance sheet as something you are owed later.
Do this and your books are correct. It is worth saying plainly, because the rest of this article is about limits and I do not want the setup itself to sound optional. If you are not doing this, do it before you do anything else on this page. The most common version of getting it wrong is subtracting retainage from income instead of moving it to an asset account, which understates the job on your profit and loss while your balance sheet says nothing about what you are owed.
Where the workaround quietly breaks
QuickBooks knows the total sitting in Retainage Receivable. It does not know which job that total belongs to. So a spreadsheet appears next to it holding the job-by-job breakdown, and somebody reconciles the two by hand every month. The problem is not the workaround. It is that it needs a person, forever.
QuickBooks now knows one thing: the total sitting in Retainage Receivable. It does not know which job that total belongs to. It does not know which portion is releasable because a job hit substantial completion, and which is stuck behind a punch list.
So a spreadsheet appears next to it. Job by job, what was retained, what has been released, what is still out. And once two systems hold versions of the same number, somebody has to make them agree. Every accountant who writes about this gives the same instruction, which is to reconcile the account against your job-level tracking every single month and fix any difference that month, because the errors compound if you let them ride.
That instruction is correct. It is also the whole problem. A workaround that needs a person to reconcile it every month is not a solved problem, it is a recurring appointment, and it lands on the one person who understands the billing chain well enough to do it. Which means your ability to know what you are owed is bounded by that person's availability.
The question almost nobody can answer quickly
How much retainage have you earned that you have never invoiced anyone for? Accounts receivable cannot tell you, because no invoice exists. The retainage account cannot tell you, because nothing was posted. Only a reconciliation of the contract against everything actually billed will surface it, and that is exactly the job that gets skipped in a busy month.
Try this one on your own books. How much retainage have you earned that you have never invoiced anyone for?
Not what is in the retainage account. That is money you billed and held back correctly. I mean work that is complete, that carries retainage, where nobody ever cut the invoice. Accounts receivable cannot tell you, because there is no invoice. The retainage account cannot tell you, because nothing was posted. It exists only in the gap between the contract and everything actually billed against it.
This is why the specialist construction billing platforms all advertise an unbilled retainage report, and it is the sharpest thing they do. It is not a clever feature. It is a number your accounting system structurally cannot produce, describing money that is already yours. In a busy month, reconciling for it is the first job that gets skipped, and skipping it has no immediate consequence, which is exactly what makes it expensive.
What we did about it on a real billing chain
We treated the document as the thing to prove, not just the totals. An automated gate checks 1,290 printed cells for value and 2,816 for style against the contractor's own file on every build, and it reported 0.0000% drift on a $4.1 million contract. The reconciliation that used to be a monthly appointment became a test that runs by itself.
We built the billing engine for Pearl Street Systems, an electrical contractor running multi-building commercial jobs. Same starting position as this article describes: the chain lived in a maintained-by-hand workbook, and the reconciliation lived with one person.
The move that mattered was deciding to prove the document rather than the totals. Their general contractor had accepted their billing file for years, so a correct-but-different document would have made the software the conversation instead of the invoice. An automated gate now checks 1,290 printed cells for value and 2,816 for style against their own file on every build, reconciles 33 of 33 schedule-of-values lines to the cent, and reported 0.0000% drift on a $4,104,700 contract.
The point is not the parity gate. The point is what it replaced. The reconciliation that used to be a monthly appointment for one person became a test that runs by itself and fails loudly. Every dollar is still computed in tested code rather than by a model, and a person still signs the pay application before it goes anywhere. The full breakdown is in the AIA billing explainer.
What to do if this is you
Set up the account and the item properly today, because the workaround is correct and you need it either way. Then ask the harder question: how many hours a month go into keeping the spreadsheet and QuickBooks agreeing, and how long since anyone checked for unbilled retainage. Those two answers decide whether this is worth automating yet.
Set up the account and the item properly today if you have not. That is not the part to automate around, that is the foundation, and the workaround is the right answer at every company size.
Then ask two questions that actually decide whether anything more is worth doing. How many hours a month go into keeping the spreadsheet and QuickBooks agreeing? And when did anyone last check for retainage that was earned and never billed? If the first answer is small and the second is recent, you are fine, and anyone selling you software should hear that and leave. If the first answer is a real chunk of somebody's month, and the second one makes you go quiet, the reconciliation has stopped being a task and become a risk, and that is the signal worth acting on. Not a tool being available.
Next step
Reconciling retainage by hand every month?
Bring one job's billing chain and the spreadsheet next to it. We will show you where the two disagree, what unbilled retainage is sitting in the gap, and whether automating it is honestly worth it yet. If it is not, we will say so.

Written by
Christopher J. Moreno
Chris is a solo AI consultant with five documented systems across construction, roofing, and Medicare insurance, every number on them measured before it was published. He builds operating systems for real businesses that need cleaner intake, clearer follow-up, and less invisible admin drag.
Our methodology
The Flo OS in practice
The approach behind this work follows the four phases of Flo OS, our operating methodology for turning messy business workflows into systems that run cleanly and compound over time.
See how we work →Related reading
Keep reading.
Operations · 7 min
How to Reduce Admin Overhead Without Adding Staff
Admin overhead in most small businesses is not visible as a line item. It shows up as hours that disappear into coordination, re-entry, and manual follow-through.
Research · 8 min
AI Automation Statistics for Construction: The Numbers You Can Verify (2026)
Most AI-in-construction statistics are unsourced. This page keeps only the numbers you can check: named public reports, plus results measured on our own construction builds.
Explainer · 6 min
AIA Progress Billing: Why It Has to Be Penny-Perfect, and How We Proved 0.0000% Drift
G702, G703, schedule of values, retainage: progress billing in plain English, and how we proved a generated pay application matches the contractor's own file across 1,290 cells.