Flow Agentic Accounting

LiveFlow FP&A

Industries

Resources

Flow Agentic Accounting

LiveFlow FP&A

Industries

Resources

Published

Retainage Accounting in QuickBooks Online: A Guide

SHARE THIS BLOG

Retainage accounting in QuickBooks Online: the complete workaround guide for contractors

Retainage accounting in QuickBooks Online requires manual workarounds because QBO has no native retainage module — no withholding field on invoices, no retainage aging by job, and no automated release workflow. That absence costs controllers visibility: retainage receivables age invisibly inside your standard AR report, your cash-basis P&L overstates income on withheld amounts, and close stretches while your team reconciles retainage schedules by hand against subcontract files.

Key takeaways

Here is what matters most before you set up the workaround.

  • What QBO lacks: QuickBooks Online has no native retainage module, so every controller tracking retainage is running a chart-of-accounts workaround — and that workaround has specific failure points worth knowing before you build it.

  • COA structure: Retainage receivable belongs in Other Current Assets and retention payable belongs in Other Current Liabilities; getting that wrong creates income recognition errors that compound over time.

  • Reporting gap: QBO's built-in reports cannot age retainage by job or customer without a manual export, which is where a live Google Sheets connection to QBO closes the gap for teams staying on the platform.

  • When to move: Multi-entity GCs and specialty trade contractors managing retainage across three or more entities are hitting a ceiling QBO was not built for; Flow ERP handles retainage, WIP, and intercompany natively without a workaround stack.

What is retainage and why does it break your cash forecast?

Retainage is the portion of a contractor's earned contract amount — typically 5–10% — withheld by the project owner until substantial completion or a defined release trigger such as final inspection sign-off. The AICPA recognizes retainage as a standard construction billing practice that requires separate accounting treatment from standard accounts receivable because the cash receipt date is tied to project milestones, not payment terms.

The cash forecasting problem is specific: the revenue is earned and recognized when the work is performed, but the cash arrival date is unknown. Release dates slip when punch lists drag, owners dispute completion status, or bonding requirements delay final closeout. That gap between earned revenue and received cash is invisible in QBO's default reporting.

General contractors face a two-sided version of this problem. On the AR side, the project owner withholds retainage from the GC's draws. On the AP side, the GC withholds retention from subcontractor bills — often matching the owner's retention rate to protect the GC's cash position. Both sides need their own chart of accounts treatment, and neither is handled natively by QBO. For a broader view of how retainage fits into your overall construction cash flow management, the choices you make here in the books affect every downstream forecast.

Why can't QuickBooks Online track retainage natively?

QuickBooks Online has no dedicated retainage field, retainage aging module, or built-in retention workflow — on either the customer invoice side or the vendor bill side. QBO's standard invoice and bill forms have no withholding percentage field, so the withheld dollar amount must be calculated outside the system and entered manually as a negative line item.

The AR aging report in QBO groups retainage receivables with normal trade receivables. There is no way to filter or segment the aging by retainage type without exporting the data and building the segmentation yourself. One controller described this gap directly: "part of the problem with using quickbooks for everything, the way that we are, is that there is no solid way to calculate AR." That's the retainage problem in plain terms.

On cash-basis books, the issue compounds. A standard invoice that includes a retainage line item records the full gross contract amount as income at invoice date — including the portion the owner hasn't paid and won't pay until project completion. That overstates P&L by the withheld amount and distorts your income picture until the retained cash arrives. The COA setup in the next section is the fix.

How do you set up your chart of accounts for retainage in QuickBooks Online?

The correct COA setup for retainage in QBO requires two dedicated accounts — Retainage Receivable as an Other Current Asset and Retention Payable as an Other Current Liability — plus a mapped product/service item that connects those accounts to your invoices and bills. This structure keeps retainage out of your standard AR and AP balances and makes it addressable in reports.

Setting up retainage receivable (Other Current Asset)

Create the asset account first so invoice line items can post correctly.

  1. Navigate to Accounting in the left navigation menu, then select Chart of Accounts.

  2. Select New in the upper right corner of the Chart of Accounts screen.

  3. In the Account Type dropdown, select Other Current Assets.

  4. In the Detail Type dropdown, select Other Current Assets.

  5. In the Name field, enter "Retainage Receivable" or "Retention Receivable." Both are acceptable. Choose one and use it consistently across every job and entity — mixing the two names creates mapping errors in reports.

  6. Leave the Description field optional, but note it is useful for audit trail purposes if you document the purpose of the account here.

  7. Select Save and Close.

Setting up retention payable (Other Current Liability)

Create the liability account next so subcontractor bills stay out of AP aging.

  1. Return to the Chart of Accounts and select New.

  2. In the Account Type dropdown, select Other Current Liabilities.

  3. In the Detail Type dropdown, select Other Current Liabilities.

  4. In the Name field, enter "Retention Payable." This account tracks what you owe subcontractors when their retainage releases. It is not the same as Accounts Payable — do not map it to AP or it will distort your AP aging.

  5. Select Save and Close.

Creating the retainage service item

QBO requires a product or service item mapped to an account for that account to appear on invoices and bills. Without a dedicated retainage item, you cannot code retainage transactions to the correct account from the invoice or bill screen.

  1. Navigate to Sales in the left navigation, then select Products and Services.

  2. Select New, then choose Service as the item type.

  3. In the Name field, enter "Retainage" or "Retention." Pick one name and use it across all jobs.

  4. For AR use: set the Income account to Retainage Receivable. This is the account that will receive the credit when you enter a negative retainage line on a customer invoice.

  5. For AP use: you have two options. You can create a second service item named "Retention — AP" and map it to Retention Payable, or you can edit the same item and map the expense/COGS side to Retention Payable. A separate item is cleaner because it avoids confusion when staff are entering bills.

  6. Select Save and Close.

QBO does not auto-calculate retainage percentages. You must compute the withheld dollar amount outside the system before entering it on the invoice or bill. For job costing reporting in QuickBooks Online, item-level tracking follows the same products/services structure — the retainage item you just created fits into that same framework.

What invoice and bill workarounds do controllers actually use for retainage in QBO?

The standard QBO retainage workflow uses a negative line item on the customer invoice to record the withheld amount and credit the Retainage Receivable account, reducing the net billable total the owner owes in the current period.

Recording retainage on the AR side (customer invoices)

For this example: $100,000 contract draw, 10% retainage = $10,000 withheld, $90,000 net billed.

  1. Create a new invoice for the customer in QBO.

  2. Enter the contract line items at their full billed value. In this example, the draw line item is $100,000.

  3. Add a second line item. In the Product/Service field, select the Retainage service item you created. Enter the amount as a negative number: -$10,000.

  4. Confirm the invoice total shows $90,000. This is the net amount the owner owes now.

  5. Confirm the Retainage Receivable account balance has increased by $10,000. You can verify this by running a Quick Report on the Retainage Receivable account from the Chart of Accounts screen.

On accrual-basis books, this structure is correct: $90,000 of revenue hits your P&L, and $10,000 sits in Retainage Receivable as a deferred receivable. On cash-basis books, QBO records the full $100,000 as income at invoice date, which overstates revenue until the retained $10,000 is collected. Cash-basis construction books should run a monthly retainage receivable reconciliation to understand the gap between reported income and actual cash received.

Recording retention on the AP side (subcontractor bills)

Mirror the same negative-line pattern on vendor bills for retention payable.

  1. Open a new bill for the subcontractor.

  2. Enter the subcontractor's full billed amount as the first line item. Example: $60,000.

  3. Add a second line item using the Retention — AP service item. Enter the withheld amount as a negative number: -$6,000 (10% of the sub's bill).

  4. Confirm the bill total shows $54,000. This is the net amount you pay the sub now.

  5. Confirm the Retention Payable account balance has increased by $6,000. The Retention Payable account grows as sub bills accumulate and shrinks when retention is released.

QBO has no native sub-level retainage aging report. Reconciling the Retention Payable balance against your subcontract schedule requires a manual export and a separate spreadsheet. There is no built-in workflow that tells you which sub's retention is past due for release.

Releasing retainage — separate invoice vs. credit memo

Controllers use two methods to release retainage at project close. The separate invoice method creates a new invoice for the retainage amount only, applying it to the Retainage Receivable account. The credit memo method issues a credit memo against the original invoice. The table below compares them across five decision criteria.

Retainage release method comparison: separate invoice vs. credit memo

Attribute

Separate invoice

Credit memo

Effect on Retainage Receivable balance

Clears the balance; creates a new open receivable the owner pays separately

Credits the original invoice; can create ambiguity if partial amounts remain

Aging report visibility

Retainage appears as an independent, dateable receivable in the AR aging

Credit memo nets against original invoice; retainage becomes invisible in aging

Audit trail clarity

Clean: new document, new date, traceable payment

Acceptable, but requires reviewer to trace the credit memo back to original invoice

Complexity of partial release

Straightforward: invoice for the partial amount; leave remainder in Retainage Receivable

More complex: partial credit memo requires careful amount management to avoid clearing more than intended

Recommended for

Any contractor who needs aging visibility by job or customer

Simple single-invoice projects where the full retainage releases at once

The separate invoice method preserves retainage aging visibility in QBO's AR reports. The credit memo method creates ambiguity — auditors and bonding underwriters who need to age retainage by project will not get a clean picture from the credit memo approach.

Handling partial retainage releases

Partial retainage releases — where the owner releases 50% of retained funds at substantial completion and the remainder at final punch-list sign-off — are standard in multi-phase projects and are not handled by a native QBO workflow.

  1. Using the separate invoice method, create a new invoice for the partial release amount only. Example: $5,000 of a $10,000 total retainage.

  2. On the invoice, use the Retainage service item and enter $5,000 as a positive amount, coded to Retainage Receivable.

  3. Confirm the invoice total shows $5,000 and the Retainage Receivable account balance decreases by $5,000.

  4. The remaining $5,000 stays in Retainage Receivable until the final release. Tracking the remaining unreleased balance requires a custom report or a manual reconciliation schedule outside QBO — there is no native partial-release tracking dashboard in QBO.

How do you build a retainage aging report in Google Sheets using live QBO data?

QBO's built-in AR Aging Summary does not isolate retainage receivables from regular receivables, so a separate retainage aging report must be built outside the system using exported transaction data. According to LiveFlow's Finance in the AI Era report (March 2026), 78% of finance teams still move data primarily via manual spreadsheet exports — the retainage aging workflow is a textbook example of where that export loop creates the most risk.

What data to pull and how to structure the aging report

The correct QBO report to use as your data source is the Transaction Detail by Account report, filtered to the Retainage Receivable account. From Reports, search for "Transaction Detail by Account," set the date range to all dates or your project inception-to-date range, and filter the Account field to Retainage Receivable only. Export this to Google Sheets or Excel.

Your retainage aging report should include the following columns:

  • Customer/Job name

  • Invoice date

  • Invoice amount (gross)

  • Retainage amount withheld

  • Expected release date (this is a manual entry field — QBO does not store milestone dates)

  • Days outstanding (calculated from invoice date to report date)

  • Aging bucket: 0–30, 31–60, 61–90, 90+ days

The expected release date column is the most operationally important field and the one that takes the most maintenance. It must be keyed manually to contract milestone dates, which live in your project management system or subcontract files — not in QBO.

Keeping the retainage aging report current without re-exporting every month

The manual re-export problem is the ceiling of the QBO retainage aging workflow. Every month-end, the controller has to re-pull the Transaction Detail by Account report from QBO, paste it into the Sheets model, and rebuild the aging logic — a process that breaks formulas when account names change and introduces version-control risk when multiple team members touch the file.

LiveFlow FP&A connects QBO directly to Google Sheets, so the Retainage Receivable transaction data refreshes automatically without a manual export. The same live data connection used for WIP schedules in QuickBooks Online applies here: you build the aging structure once in Sheets, and LiveFlow FP&A keeps the source data current. You still maintain the expected release date column manually, but the transaction data underneath it never goes stale. For teams staying on QBO, this is the direct fix for the re-export loop described in this section.

How does retainage connect to WIP, draws, and bonding working capital?

Retainage receivable is a component of working capital that bonding underwriters evaluate alongside WIP overbilling, underbilling, and cash-on-hand — and keeping these figures accurate in QBO requires the retainage COA to be set up correctly before any of them can be trusted. Construction-specific accounting standards treat retainage as a distinct receivable category precisely because its collectability timeline differs from standard trade AR.

Retainage receivable sitting in Other Current Assets inflates working capital on paper but represents cash that cannot be deployed until project milestones are met. A bonding underwriter reviewing your financials understands this distinction and expects it to be reflected cleanly in the balance sheet — a lump sum "Other Receivables" line that mixes retainage with regular AR is a red flag, not a clean answer. Your surety needs to see retainage broken out, aged by project, and reconciled against your WIP schedule.

The connection to draws is direct: your AIA draw applications (the G702/G703 billing format used on most commercial projects) include a stored materials line and a retainage line that must agree to your books. If the Retainage Receivable account in QBO doesn't match the cumulative retainage column on your draw schedule, your draws won't reconcile and your surety will flag it. Understanding over- and under-billing in construction is a prerequisite to reading that schedule correctly.

For teams managing this across multiple QBO instances, the manual reconciliation of retainage, WIP, and draws by entity is where close timelines break. That's the signal that the workaround stack has hit its ceiling. For a broader view of where QBO fits in your growth trajectory, the construction accounting software options by growth stage guide covers when to stay and when to move.

Should you stay on QBO with LiveFlow FP&A or move to Flow ERP?

The decision between staying on QuickBooks Online with a LiveFlow FP&A reporting layer versus migrating to Flow ERP depends on entity count, intercompany complexity, and how much of your retainage workflow is currently held together by manual workarounds. Here is how to evaluate your situation using the five criteria that matter most:

  • Number of QBO files in use: One or two entities managing retainage through the COA workaround described in this article — QBO plus LiveFlow FP&A is workable. Three or more separate QBO instances where you're stitching together retainage schedules across files — that points to Flow ERP, where all entities live in a single workspace with no file-switching required.

  • Intercompany retainage activity: If your GC entity retains from a sub-entity you also own, you have intercompany retainage that requires eliminations at consolidation. QBO has no native intercompany elimination workflow. Flow ERP automates intercompany eliminations on both sides for all entities involved — this is a core architectural difference, not a feature comparison.

  • Manual export dependency: If your controller is re-exporting QBO data every month to build retainage aging or WIP reports, LiveFlow FP&A removes that step by keeping QBO data live in Google Sheets. That's the right fix if the system of record is staying as QBO. If the manual work has grown beyond reports into the close itself — journal entries, eliminations, allocations — Flow ERP addresses the source, not the symptom.

  • Bonding underwriter requests: Sureties typically ask for retainage aged by job, a WIP schedule that reconciles to your books, working capital with retainage broken out from trade AR, and draw schedules whose cumulative retainage matches the G702 column. If assembling that package means a multi-day export scramble every review cycle, you have outgrown the QBO workaround stack — Flow ERP keeps retainage, WIP, and working capital in one system. If LiveFlow FP&A already keeps those schedules live from QBO, staying is the right call.

  • Month-end close drag from retainage recon: If retainage receivable and retention payable reconciliations routinely delay close — especially across multiple QBO files — Flow ERP removes the file-stitching work. If close is clean and retainage is your only spreadsheet dependency, LiveFlow FP&A on QBO is enough.

If three or more of these criteria point to Flow ERP, schedule a migration conversation. If most still land on QBO plus LiveFlow FP&A, harden the retainage COA and aging workflow in this guide first — then revisit when entity count or bonding-package prep becomes the bottleneck.

Frequently asked questions

Quick answers to the questions contractors ask most about retainage accounting in QuickBooks Online.

Does QuickBooks Online have native retainage tracking?

No. QuickBooks Online has no retainage field on invoices or bills, no retainage aging by job, and no built-in release workflow. Controllers use a chart-of-accounts workaround with Retainage Receivable (Other Current Asset), Retention Payable (Other Current Liability), and negative line items on invoices and bills.

What account type should retainage receivable use in QBO?

Map Retainage Receivable to Other Current Assets and Retention Payable to Other Current Liabilities. Keeping retainage out of standard AR and AP preserves aging clarity and matches how bonding underwriters expect working capital to be presented.

How do you release retainage in QuickBooks Online?

Use a separate invoice coded to the Retainage Receivable item for the release amount. That method keeps retainage visible in AR aging by job. A credit memo against the original invoice can work for simple single-invoice jobs, but it often hides retainage from aging reports auditors and sureties want to see.

How does retainage affect WIP and bonding working capital?

Retainage receivable is earned but not yet collectible, so it inflates working capital on paper until release milestones hit. Bonding underwriters expect retainage broken out, aged by project, and reconciled to your WIP and AIA draw schedules — not buried inside a mixed "Other Receivables" balance.

When should a contractor move from QBO retainage workarounds to Flow ERP?

Stay on QBO with LiveFlow FP&A when you have one or two entities and the main pain is re-exporting retainage aging or WIP into Sheets. Move to Flow ERP when you are stitching retainage across three or more QBO files, need intercompany retainage eliminations, or cannot produce a surety package without a multi-day manual scramble.

In the Articles

Supercharge your finance operations

LiveFlow is an agent of Plaid Financial Ltd. (Company Number: 11103959, Firm Reference Number: 804718), an authorized payment institution regulated by the Financial Conduct Authority under the Payment Services Regulations 2017. Plaid provides you with regulated account information services through LiveFlow as its agent.

© LiveFlow. All rights reserved.

LiveFlow is an agent of Plaid Financial Ltd. (Company Number: 11103959, Firm Reference Number: 804718), an authorized payment institution regulated by the Financial Conduct Authority under the Payment Services Regulations 2017. Plaid provides you with regulated account information services through LiveFlow as its agent.

© LiveFlow. All rights reserved.

LiveFlow is an agent of Plaid Financial Ltd. (Company Number: 11103959, Firm Reference Number: 804718), an authorized payment institution regulated by the Financial Conduct Authority under the Payment Services Regulations 2017. Plaid provides you with regulated account information services through LiveFlow as its agent.

© LiveFlow. All rights reserved.

LiveFlow is an agent of Plaid Financial Ltd. (Company Number: 11103959, Firm Reference Number: 804718), an authorized payment institution regulated by the Financial Conduct Authority under the Payment Services Regulations 2017. Plaid provides you with regulated account information services through LiveFlow as its agent.

© LiveFlow. All rights reserved.