All guides

Guide

Retainage accounting, on both sides of the contract

Retainage is the slice of every progress billing the owner holds back until the work is accepted, usually 5–10%. Contractors hold the same slice back from subcontractors. It is money you have earned but cannot collect yet, and money you owe but do not have to pay yet, and most accounting mistakes on a job show up here first.

Updated October 2026

What retainage is and why it exists

An owner paying 100% of each pay application has no leverage left if the contractor walks before punch list. Retainage keeps a portion of the contract value unpaid until substantial completion, final completion or a negotiated milestone. The contractor passes the same terms down to subcontractors so that the cash held from them roughly matches the cash held from the contractor.

  • Typical rate: 5–10% of each billing, sometimes stepping down to zero after 50% completion
  • Public work: many states cap the rate or require release at a defined point; private contracts follow the agreement
  • Release triggers: substantial completion, final completion, lien waivers in hand, or a line-by-line release as scopes finish
  • Subcontract retainage usually mirrors the prime contract, but the contractor can hold more than the owner holds from them

Retainage receivable: the entries

A pay application for $100,000 of work with 10% retainage bills the owner $90,000 now and $10,000 later. The $10,000 is not revenue you have not earned; it is revenue you have earned that the owner has not paid. It belongs on the balance sheet, separate from ordinary receivables, because it ages differently and lenders and sureties look at it separately.

EventDebitCredit
Pay application certified ($100,000 at 10%)Accounts receivable 90,000; Retainage receivable 10,000Billings (contract billings or billings in excess, per your method) 100,000
Owner pays the applicationCash 90,000Accounts receivable 90,000
Retainage released at completionAccounts receivable 10,000Retainage receivable 10,000
Owner pays the releaseCash 10,000Accounts receivable 10,000

Under percentage-of-completion, the billing side does not touch contract revenue at all; earned revenue comes from the WIP calculation, and the gap between billed and earned is over/under billing. Retainage changes none of that arithmetic, but it must be included in billed-to-date or the WIP schedule will show every job as underbilled.

Retainage payable: the subcontractor side

When a subcontractor submits a $50,000 pay application and you hold 10%, the full $50,000 is job cost today. Only $45,000 is a current payable; $5,000 is retainage payable. The most common error is to book only the $45,000 to the job and pick up the rest at release, which understates cost to date, overstates percent complete and overstates earned revenue on every open job.

EventDebitCredit
Subcontractor pay application approved ($50,000 at 10%)Job cost (subcontract) 50,000Accounts payable 45,000; Retainage payable 5,000
Subcontractor paidAccounts payable 45,000Cash 45,000
Retainage released to subcontractorRetainage payable 5,000Accounts payable 5,000

Tie the release to the paperwork: final lien waiver, closeout documents, and usually the owner’s release of the corresponding scope. A release workflow that requires those items before the payable becomes current is the control; a memo field is not.

Where retainage accounting goes wrong

  • Retainage held from subcontractors left out of job cost until it is released
  • Retainage receivable mixed into ordinary AR, so aging reports show 90-day-old balances that are not actually past due
  • Releases billed as a new pay application line, which double-counts the work in billed-to-date
  • Rate changes mid-contract (a step-down at 50%) applied to the whole contract instead of to billings from that point
  • Opening balances at cutover entered as one lump per job, so the first release cannot be traced to the pay applications it came from
  • Retainage on stored materials handled differently from retainage on work in place, without the contract saying so

How Forge ERP handles retainage

On the receivable side, certifying an AIA pay application in Forge accrues only the incremental retainage since the prior certificate, debiting retainage receivable through a balanced journal. The invoice that follows equals the net current payment due, so what the owner sees matches the books. A release is a separate document: created against the schedule of values, approved, and converted into its own customer invoice coded to retainage receivable. It never creates new contract revenue, and a certified application cannot be quietly voided after the fact.

On the payable side, converting a subcontractor pay application to a vendor invoice splits the amount between accounts payable and retainage payable, and the retained portion carries the job and cost code the day it is withheld, so job cost, the project ledger and WIP percent complete all see the full cost. Open retainage balances appear with bills, invoices, credits and deposits as open items, and cutover can bring in retainage balances by job so the first release after go-live ties back to history.

Forge ERP covers projects, purchasing, accounts payable, billing and receivables, job cost and WIP, reporting and close. Payroll runs in your payroll provider and lands in Forge as job-costed labor with burden. Forge is in beta with a 14-day free trial.

Frequently asked

Is retainage receivable a current asset?
Usually, when it is expected to be collected within the operating cycle of the contract, which for most contractors means within a year. Retainage on multi-year jobs is often split between current and long-term. Your CPA decides the presentation; the system’s job is to keep it separate from ordinary receivables so the split can be made.
Does retainage count as revenue under percentage-of-completion?
Retainage is a billing and collection concept, not a revenue concept. Earned revenue comes from percent complete times contract value. Retainage affects how much of that earned revenue has been billed and collected, which is why it must be included in billed-to-date on the WIP schedule.
Can I release retainage on part of a job?
Yes, if the contract allows it. Partial releases are common when a trade’s scope is accepted early. The release should reference the schedule-of-values lines it covers so the remaining retainage per line stays correct.

Related guides

See it on your own cost codes.

Start a 14-day trial, or send us your chart of accounts and cost-code list and we will walk you through Forge on them.

Request Early Access