The Mechanics
How retainage actually flows through Procore, and where it lands in QuickBooks
Procore handles retainage in two independent places, and both have to be configured deliberately. Neither one posts to a general ledger, because Procore does not have one. That handoff is where most of the damage happens.
The prime contract side, what the owner holds from you
Retainage on the money coming in is set on the prime contract and applied on the owner invoice, the progress billing that maps to your schedule of values. You set a default retainage percentage, typically 5 or 10 percent, and Procore applies it line by line as you bill work completed. Two configuration details matter more than people realize. First, whether retainage is withheld on stored materials as well as on work in place, because the contract may treat them differently. Second, whether your contract steps the percentage down at a milestone, for example from 10 percent to 5 percent at 50 percent completion, which is common and which Procore will not do for you automatically. Your invoice then carries the classic AIA structure: total earned, less retainage, equals current payment due.
The commitment side, what you hold from your subs
Retainage on the money going out is set on each subcontract or purchase order and applied to the subcontractor invoice as it comes in. The sub bills for work completed, you withhold the contractual percentage, and the net is what you approve for payment. Release happens by entering a release on a later invoice, which reduces the amount held and increases what the sub is paid. Procore gives you the running held-to-date figure per commitment. What it does not give you is a general ledger entry.
Where the trip to QuickBooks fails
Here is the failure mode we see most, and it is nearly universal. The invoice syncs to QuickBooks net of retainage. Not gross with a retainage entry, just net. The result is that the retainage never enters your books at all: not as an asset, not as a receivable, not as anything. The invoice shows as paid in full, because the net amount was in fact paid in full, so there is no open balance for anyone to chase and no line item anywhere reminding you that the owner is holding five percent of the contract. The money does not appear as uncollected because, as far as your general ledger is concerned, it was never billed.
The second failure mode is the opposite and almost as bad. The gross invoice syncs and the retainage sits inside ordinary accounts receivable, where it ages forever, poisons your AR aging report, and sends your collections process chasing a customer who is not late and does not owe you anything yet. The correct treatment is that the gross amount is billed, the net is a normal receivable, and the withheld portion is journaled into a separate retainage receivable asset account where it can be aged on its own schedule. The mirror image applies on the payable side. How your particular connector behaves is a setup question, and we cover the mechanics of what the ERP integration posts and where it stops on the QuickBooks and Procore integration page.