How to Track Retainage in QuickBooks Online (The Workaround That Actually Works)

QuickBooks Online has no native retainage feature. None. You can’t toggle it on, there’s no module to install, and Intuit hasn’t shipped one despite years of contractors asking.

That’s a problem if you’re a contractor whose customers hold back 5–10% on every progress invoice. Without a workaround, your A/R aging report tells you you’ve already collected money you haven’t, your P&L overstates revenue, and your cash flow forecasts are useless.

I’m Erin Andrews, owner of Level Accounting & Advisory. We set up retainage in QuickBooks Online on every construction client we onboard. Same workaround, every time, because it’s the only one that holds up over the life of a job.

This guide walks through the 5-step setup for retainage receivable (what your customers hold back from you), then covers retainage payable (what you hold back from your subs), and shows you how to make A/R aging tell the truth.

What is retainage and why does QBO need a workaround?

Retainage (also called “retention”) is the percentage of each progress payment your customer holds back until the job is complete and accepted. Standard rates run 5–10% on private work and 5% on most public/commercial jobs. The customer keeps the holdback as protection — if punch list items don’t get done, the retainage covers it.

The accounting problem: if you bill $50,000 with 10% retainage, the customer pays you $45,000 today. The other $5,000 sits with them until completion — sometimes 6, 12, or 18 months later.

If you record the full $50,000 as a regular invoice in QBO, two things break:

  • Your A/R aging shows $5,000 as “current” or “overdue” — when in reality it’s not collectible until completion
  • Your revenue, A/R balance, and cash flow projections are all wrong

QBO doesn’t have a button for this. So we build the workaround.

The standard 5-step QBO retainage workaround

This is the setup we use on every client. It works on QBO Plus and Advanced. Skip any step and the workaround breaks.

Step 1 — Create a “Retainage Receivable” account on the balance sheet

In QBO, go to Accounting → Chart of Accounts → New.

  • Account Type: Other Current Assets
  • Detail Type: Other Current Assets
  • Name: Retainage Receivable
  • Description: Amounts withheld by customers pending job completion

This is where retainage will live until it’s released. It’s an asset (the customer owes it to you) but it’s separate from regular A/R, which is the whole point.

Step 2 — Build a negative-rate Product/Service called “Retainage Held”

Go to Sales → Products and Services → New → Service.

  • Name: Retainage Held
  • SKU: RET-HOLD
  • Description: Retainage withheld per contract terms
  • Sales price/rate: Leave blank — you’ll enter the negative amount on each invoice
  • Income account: Retainage Receivable (the balance sheet account from Step 1)

This is the trick that makes everything work. By tying the Product to the Retainage Receivable balance sheet account (instead of a regular income account), every time you use this Product on an invoice, it moves money from regular A/R into Retainage Receivable.

Step 3 — Apply Retainage Held to every progress invoice

When you invoice a customer for a progress draw:

  1. Add the regular line items as you normally would (line item billing or a single project draw line — whatever your contract structure is)
  2. Add a final line: Product = “Retainage Held,” Quantity = 1, Rate = negative 10% of the invoice subtotal
  3. The invoice total is what the customer actually owes today
  4. The retainage amount has moved into your Retainage Receivable balance sheet account

Example: $50,000 progress billing with 10% retainage. Line 1: $50,000 progress draw. Line 2: -$5,000 Retainage Held. Invoice total: $45,000.

The customer pays $45,000. Your A/R aging shows $0 outstanding for that invoice. Retainage Receivable on the balance sheet shows $5,000.

Step 4 — Track release at job completion

When the job hits substantial completion and you’re entitled to bill the retainage:

  1. Create a final invoice for the retainage amount
  2. Use Product = “Retainage Held,” Quantity = 1, Rate = POSITIVE total retainage amount
  3. This pulls the balance OUT of Retainage Receivable and into regular A/R
  4. Customer pays, A/R clears, Retainage Receivable goes back to $0 for that job

The key word is “entitled.” Don’t bill retainage release until the contract terms say you can — usually after punch list signoff and any required lien waivers are in.

Step 5 — Reconcile monthly

Every month-end, run the Retainage Receivable account in QBO and tie it to your job-by-job retainage tracking (a spreadsheet, JobTread, or a custom report).

For every job in the column:

  • Total billed to date
  • Retainage rate
  • Retainage held to date (should match QBO Retainage Receivable per job)
  • Retainage released to date
  • Retainage outstanding

If the spreadsheet and QBO don’t match, fix it that month. Don’t let mismatches compound.

Watch this walkthrough

This video walks through the same workaround visually. Different software demonstrator, same logic — useful if you want to see it in QBO before you build it:

Watch on YouTube: Tracking Retainage Separately in QuickBooks

Retainage Payable — when YOU hold back from your subs

If you’re a GC or a specialty contractor who hires subs, you should be holding retainage from THEIR invoices the same way your customers hold it from yours. Most contractors don’t, then they’re stuck paying out the full amount upfront and praying the sub finishes the punch list.

The mirror-image setup:

  1. Create a “Retainage Payable” account. Account type: Other Current Liabilities. This is what you owe your subs but haven’t paid yet.
  2. Build a “Retainage Held from Sub” Product/Service. Tied to the Retainage Payable balance sheet account (instead of a regular expense account).
  3. On every sub bill, add a negative line using “Retainage Held from Sub” at the negative retainage percentage.
  4. Pay the sub the net amount today. The retainage sits in Retainage Payable until you release it.
  5. Release at completion. Cut a check for the held amount, pulling it out of Retainage Payable.

One contractor we cleaned up had been paying subs in full for years. Three subs walked off jobs with punch list undone. He had no leverage to get them back. Retainage on subs would have given him $40K of holding power across those three jobs alone.

How to make A/R aging show retainage separately

Once retainage is sitting in its own balance sheet account, your standard A/R aging report shows only what’s actually outstanding and collectible. Retainage shows up separately on the balance sheet.

For monthly reporting, build (or have your accountant build) two custom reports:

  • A/R Aging Summary — your normal report, now accurate because retainage isn’t muddying it
  • Retainage Receivable by Customer — a custom report grouped by Customer that shows the Retainage Receivable balance per job

Bonding agents and bankers ask for both. Now you have both.

How retainage shows up on your WIP report

Retainage is a line item on a properly-built WIP schedule. The columns to include:

  • Total billed to date (gross — including retainage)
  • Retainage held to date
  • Net billed (gross billed minus retainage held)
  • Cash collected to date (should match net billed if customer is current)
  • Retainage outstanding

If you don’t have a WIP schedule yet, read our WIP report construction guide. Retainage tracking and WIP go together — you can’t really do one without the other for a serious contractor.

Common retainage mistakes

The mistakes we see on cleanups:

  • Not tracking it at all — billing the full amount, recording the customer’s holdback as “bad debt” or “discount” when it eventually gets released. Wrong answer.
  • Tracking it inconsistently — sometimes invoiced gross with negative line, sometimes invoiced net. Now you can’t tell what’s outstanding.
  • Forgetting to bill release at completion — we’ve found six-figure retainage balances on takeover that should have been collected 18 months earlier
  • Not holding retainage from subs — leaves you with no leverage on punch list
  • Mixing retainage and standard A/R in collections calls — calling a customer about $5K that’s not actually collectible yet damages the relationship
  • Treating retainage as cash for tax purposes — depending on your accounting method, retainage you haven’t collected may not be income yet. Talk to your construction accountant before year-end.

If you have a JobTread + QBO sync running, also check our JobTread to QuickBooks sync errors guide — the default JobTread sync sometimes treats retainage as collected when it isn’t, and the fix is part of getting your books accurate.

When the workaround isn’t enough

The 5-step QBO workaround handles 95% of specialty trade contractors doing $1M–$15M. You’ve outgrown it when:

  • You’re running 20+ active jobs with retainage at any given time
  • You have multiple retainage rates (different customers, different rates) that get confusing fast
  • You need automated lien waiver tracking tied to retainage release
  • You’re regularly bonded and your bonding agent is asking for reporting QBO can’t easily produce

At that point, you’re typically a $10M+ contractor and the conversation shifts to whether you upgrade to Foundation Software, Sage 100 Contractor, or stay on QBO with custom reporting layered on. We help clients work through that decision based on their specific situation, not based on what software the vendor wants to sell.

Frequently asked questions

Does QuickBooks Online have a built-in retainage feature?

No. QuickBooks Online has no native retainage feature. The standard solution is a workaround using a Retainage Receivable balance sheet account paired with a negative-rate Product/Service. It works reliably once it’s set up correctly and reconciled monthly.

What’s the difference between retainage receivable and retainage payable?

Retainage receivable is what your customers hold back from your invoices — it’s an asset because they owe it to you. Retainage payable is what YOU hold back from your subcontractors’ invoices — it’s a liability because you owe it to them. Both should be tracked in QBO using the same workaround logic, just mirrored.

Should retainage be recognized as revenue when invoiced or when collected?

Under accrual accounting, retainage is typically recognized as revenue when it’s earned (when the work is done), not when it’s collected. Under cash basis, it’s revenue when the cash hits. Most $1M–$15M specialty trades report cash basis for taxes but use accrual for management reporting — meaning retainage shows up at different times depending on which report you’re looking at. Talk to your construction accountant about the right treatment for your specific situation.

How long does retainage typically take to release?

Standard release timelines run 30 days after substantial completion for residential work, 30–90 days for commercial work, and longer for public projects (some bonded jobs hold retainage 6–18 months). Read your contract — the release terms are spelled out and they’re not all the same.

Can I bill retainage release before the job is fully complete?

Only if your contract allows it. Some contracts allow partial retainage release at milestones (e.g., 50% release at substantial completion, 50% at final acceptance). Most don’t. Billing retainage early when the contract doesn’t allow it gets your invoice rejected and damages the customer relationship.

What happens if I forget to track retainage and it’s been months?

It’s fixable. We do this on every cleanup. The work involves identifying every job with retainage, building the Retainage Receivable account, and reclassifying historical entries via journal entries. Doable in a few days for a typical specialty trade file. The longer you wait, the more entries to reclassify — but it’s never too late.

The bottom line

QBO doesn’t have native retainage tracking. The 5-step workaround does. Build the Retainage Receivable account, build the negative-rate Product, apply it to every progress invoice, track release at completion, reconcile monthly. Mirror the whole thing for sub retainage payable.

Once it’s set up, your A/R aging stops lying to you, your collections calls don’t burn customer relationships, and your WIP schedule reflects reality. It takes about an hour to set up and 15 minutes a month to maintain.

If you want this built into your QBO file by someone who has done it 100+ times for construction clients — or if you have months of mistracked retainage to clean up — that’s what we do.

Ready to talk?

Book a Discovery Call

Or read the full job costing for contractors guide for the bigger picture.


Erin Andrews is the owner of Level Accounting & Advisory, a construction-only accounting firm based in Vero Beach, FL serving contractors nationwide. Level has 20 years of experience in construction accounting and serves specialty trades doing $1M–$15M in annual revenue.

subcontractor packet for contractors. collect W9s, workman's comp insurance, general liability insurance

FREE RESOURCE

The Subcontractor Packet That Protects You From a $30K Audit Surprise

-> The complete done-for-you packet — setup form, W-9, and sample subcontractor agreement ready to hand to every sub before their first check

-> The one missing document that lets your insurance company add a sub’s entire payment to YOUR workers comp premium — and how this packet prevents it

-> The insurance minimums, COI requirements, and indemnification language most contractors don’t have in writing until it’s too late

Free Resource

Our “Subcontractor Checklist Packet” makes it easy. Inside, you’ll find exactly what you need for 1099s, workers’ comp, and liability audits.