QuickBooks, Xero, FreshBooks, Wave — general accounting systems all share one assumption: an invoice is a one-time bill for something you delivered. A pay application breaks that assumption. It is cumulative: every month it restates the whole job — total completed to date, less retainage, less everything already certified — and asks for the difference. Construction-specific platforms handle this natively. General systems don't, and there is no setting that makes them. What there is instead is a standard, well-worn bookkeeping practice that construction CPAs have used for decades to make ordinary invoices faithfully carry progress billing. This guide is that practice.
Nothing here is exotic. It is the same approach construction accounting handbooks and CPA firms recommend for subcontractors on general-ledger software: bill the period's delta, put retainage in its own asset account, and tie the books to the pay application every month.
The one rule: one invoice per application, for the current payment due
The single most common mistake is entering the pay application's cumulative figures as an invoice. Application #3 says $46,000 completed to date, so a $46,000 invoice goes into the system — on top of the $14,000 and $17,500 invoices already posted for applications #1 and #2. Now the books show $77,500 of billing on a job that has earned $46,000. Receivables are overstated, income is double-counted, and unwinding it after a few months of compounding takes longer than the original bookkeeping did.
The rule that prevents it: each pay application becomes exactly one invoice, and the invoice's total is the application's current payment due — line 8 on a G702-style form. That number is already the period's delta: total earned, less retainage, less previous certificates. The cumulative arithmetic lives on the pay application, where the payer certifies it; the accounting system only ever sees the incremental bill.
- Invoice date: the application's period-end date, so revenue and receivables land in the right month.
- Invoice number: derive it from the project and application number (PA-EASTSIDE-003). If the same application is ever entered twice, the duplicate number collides instead of silently doubling the receivable.
- Customer: the payer on the application — the GC or owner — matching the customer record in your system.
- Line detail: a line per schedule-of-values item billed this period beats one lump line. It costs nothing extra and gives you per-cost-code income visibility that a lump sum throws away.
The retainage decision: net or gross
Retainage is where progress billing and ordinary invoicing genuinely conflict. The payer certifies your full earned value but withholds a slice — typically 5–10% — until completion. The question for your books: does that withheld slice exist in your ledger from the day you earn it, or only on the day it's released? Both answers are legitimate standard practice; they suit different businesses.
Method 1 — Net invoicing: the simple way
Invoice exactly the current payment due and nothing else. Retainage never appears in your books until it's released; when it is, the releasing application's payment due includes it, and that invoice brings it in. Your accounts receivable always equals what is actually collectible right now.
- Work completed this period
- $13,500.00
- Retainage withheld (10%)
- −$1,350.00
- Invoice posted to books
- $12,150.00
- Retainage in your ledger
- $0 until released
One invoice, one number, nothing to set up. The $1,350 lives only on the pay application until the release application bills it.
Net invoicing fits small subcontractors on cash-basis books, where income is recorded when payment arrives anyway. Its trade-off is visibility: the retention you've earned on every open job — often five figures across a season — appears nowhere in your ledger. You track it on the pay applications themselves, or not at all. If retention balances influence your borrowing, bonding, or sleep, that invisibility is a real cost.
Method 2 — Gross invoicing with a retainage receivable: the accrual-proper way
Standard practice in construction accounting is to carry withheld retainage as its own current asset — usually named retainage receivable or retention receivable — separate from trade accounts receivable, because it is money you've earned that is not yet due. On general-ledger software you produce this with one extra invoice line: bill the gross earned amount, then subtract the withheld retainage on a line mapped to the retainage receivable account.
- Construction income (gross earned)
- $13,500.00
- Retainage withheld → Retainage Receivable
- −$1,350.00
- Invoice total → Accounts Receivable
- $12,150.00
- Ledger after posting
- A/R $12,150 · Retainage Receivable $1,350 · Income $13,500
Income reflects the full earned value; the withheld slice sits in its own asset account, growing month by month until release.
When retainage is released, you issue the release invoice with the same retainage line in reverse — a positive line against the retainage receivable account — which moves the balance out of retention and into ordinary A/R, where the payment clears it. Over the life of the job, the retainage receivable account tells you at a glance exactly what is held on every project, and it drains to zero as jobs close out. That ledger visibility is why accrual-basis contractors, and anyone whose lender or bonding agent reads their balance sheet, use this method.
Why an asset account and not deferred income: under accrual accounting the income was earned when the work was certified — only collection is delayed. The tax treatment of billed-but-unreleased retainage has genuine nuance on both cash and accrual methods, and it varies with how your contract conditions release. That one is worth fifteen minutes with your CPA, once, at setup.
Setting it up (QuickBooks shown; every system rhymes)
- Create the account: Chart of Accounts → new Other Current Asset named "Retainage Receivable".
- Create an item that posts to it: a service item named "Retainage Withheld" whose income account is the Retainage Receivable asset account. (Mapping an item to a balance-sheet account is allowed and is exactly what this pattern relies on.)
- On each period's invoice: your work lines post to construction income as usual, then add the Retainage Withheld item as a negative amount for the period's withholding.
- On release: the same item as a positive amount on the release invoice, drawing the account back down.
- In Xero, skip the item and set the retainage line's account code directly to the retainage receivable account. In Sage Intacct, use the GL account column on the invoice line.
Each system's import screens differ enough to deserve their own walkthrough. The step-by-step guides — with screenshots of the actual screens — live here:
- Import pay applications into QuickBooks OnlineSettings → Import data → Invoices, column mapping, and QuickBooks-specific limits.
- Import pay applications into XeroBusiness → Invoices → Import, draft approval, and account codes.
- Import pay applications into Sage IntacctIntacct's AR import template, customer IDs, and GL accounts.
Billings are not revenue: a WIP reality check
Everything above keeps your billing records right. Be careful about reading them as a profit statement. Progress billings follow the schedule of values and the payer's certification — not the actual pace of cost. Front-loaded schedules overbill early; slow certification underbills late. Construction GAAP (percentage-of-completion revenue recognition, now under ASC 606) measures revenue by work performed, and the gap between what you've billed and what you've earned shows up as either billings in excess of costs (a liability — you're ahead) or costs in excess of billings (an asset — you're behind).
A small subcontractor on cash-basis books can usually ignore this until their CPA says otherwise. But the moment financial statements matter — bonding, bank covenants, a GAAP audit — the bridge between invoices and true revenue is a work-in-progress (WIP) schedule, maintained per job outside the invoice ledger. Your invoice history from this workflow becomes one honest input to it, which is exactly what it should be.
The monthly tie-out
The discipline that makes this whole system trustworthy takes about two minutes per job per month. After posting each application's invoice, check three equalities:
| Check | Books figure | Pay application figure |
|---|---|---|
| This period | Invoice total just posted | Line 8 — current payment due |
| Job to date | Sum of all invoices posted for the job | Line 6 — total earned less retainage |
| Retention held (gross method) | Retainage Receivable balance for the job | Line 5 total — retainage withheld to date |
If all three match, your ledger and your certified billing history agree, and either one can answer any question about the job. If they don't, the cause is almost always one of three things: a cumulative amount entered as an invoice, a revised application posted twice, or a retainage line mapped to income instead of the receivable account. Each is a five-minute fix the month it happens and an afternoon the quarter after.
Wrinkles: change orders, stored materials, revisions, tax
- Change orders touch your books only when billed. Approval changes the contract sum on the pay application; the ledger sees nothing until the work flows through a period's invoice like any other line.
- Stored materials are billed when stored, so they ride the same delta into the same invoice. Whether billing stored materials is allowed, and against what documentation, is a contract question — the accounting is unchanged.
- Revised or rejected applications: if the invoice is already posted, void it or issue a credit memo, then post the corrected application as a fresh invoice. Never quietly edit a posted invoice to match a revised application — the numbering discipline that protects you depends on one invoice per certified application.
- Short payments: if the payer certifies less than you applied for, the certified amount is what your next application's math builds on — post the invoice at the certified figure (or correct it to match), not at what you hoped.
- Sales tax on construction billing varies wildly by state — many states treat contractors as the consumers of materials, others tax some services. Set the invoice tax treatment with your CPA once; don't improvise it per invoice.
When you've outgrown this
This workflow scales further than people expect — plenty of subcontractors run years of progress billing through QuickBooks this way. The genuine signals that it's time for construction-specific accounting: you need committed-cost and WIP reporting your bonding agent will rely on, you're juggling enough simultaneous jobs that per-job ledgers get unwieldy, or certified payroll and compliance tracking start eating the time the simple system saved. Until then, one invoice per application and a retainage receivable account are all the structure the accounting actually requires.
Frequently asked questions
- Should I enter the whole contract value when the job starts?
- No. Nothing goes into the ledger when a contract is signed — a contract is not a receivable. The books see the job one certified application at a time, as invoices for each period's current payment due.
- Is retainage income when it's billed or when it's released?
- In your ledger under the gross method, income is recorded at the full earned value when billed, with the withheld slice parked in retainage receivable. For tax, it depends on your accounting method and contract terms — cash-method taxpayers generally recognize it when received, and accrual treatment of conditional retainage has real nuance. Confirm the treatment with your CPA once at setup.
- Do I need a separate accounts-receivable account for retention?
- A separate account, yes — an Other Current Asset commonly named Retainage Receivable — because retention is earned but not yet due, and mixing it into trade A/R makes your receivables aging lie about what's collectible. A separate customer or subledger, no.
- What if my accounting software can't import invoices at all?
- The practice doesn't depend on imports — it's about what you enter, not how. Key the same one-invoice-per-application, net-or-gross structure in manually. Importing clients, items, and the schedule-of-values lines first (most systems support at least that) makes the manual entry a two-minute job.
- How do I handle a job that started before I adopted this system?
- Post one catch-up invoice dated today for the certified-to-date position: total earned less retainage less amounts already recorded, with the retainage receivable line bringing the held balance onto the books. From the next application onward, follow the normal per-period pattern.




