CONSTRUCTION / BILL PAY
Retainage for Bill Pay
Native withholding for construction subcontracts
The Bill Pay gap in construction
39%
Non-construction
Bill Pay attach
24%
Construction
Bill Pay attach
Construction processes $2T+ in AP invoices every year. We have the right to win —
but construction-specific workflows are blocking adoption.
What we're hearing from the field
-
Accordant (5,000 construction clients) — retainage support is a non-starter for referring customers to Ramp
-
Concrete Placement ($12K CP/mo) — "Ramp has everything we need, but without retainage we won't be able to move forward"
-
Wipfli — retainage would let us replace Textura, GCPay, and legacy construction bill pay tools
9 customers in the Construction Alpha actively eager to use this if we build it.
What is retainage?
Example: GC hires an electrical sub for a $100K contract at 10% retainage
| Invoice |
Billed |
Retained (10%) |
Paid |
| #1 |
$25,000 |
$2,500 |
$22,500 |
| #2 |
$25,000 |
$2,500 |
$22,500 |
| #3 |
$25,000 |
$2,500 |
$22,500 |
| #4 |
$25,000 |
$2,500 |
$22,500 |
| Release |
— |
— |
$10,000 |
5-10% of every invoice is withheld until the work is done, then released in bulk.
Problem statement
Customers need to withhold a percentage of an invoice payment, then release that percentage at a later date.
What we know
✓
Retainage is scoped to the subcontract (PO)
Retainage terms live on the subcontract. Companies have standard rates per vendor, but rates can differ by project or scope. The PO is the right anchor.
✓
Flat rate covers 90%+ of contracts
Fixed 5% or 10% withheld from every progress payment until release. Variable/step-down rates exist but are rare.
✓
Rate can vary per line item on the SOV
Most common: uniform rate across all lines (10%). But specific lines can be 0% (e.g., stored materials). Users need to see and edit per-line rates.
✓
Mid-contract rate changes exist but are rare
Sometimes retainage % changes mid-contract (e.g., reduced after substantial completion). For V1: apply current PO rate to each new bill. Previously retained amounts stay as-is.
Scope
In scope
Data models
Flat retainage rate on the PO + tracking retainage on bill line items. Forward-looking support for per-line rates and more complex withholding.
Retainage in the product
Front-end display of retainage on bills, PO summaries, and release bills.
Sage Intacct sync
Extends our existing PO import and AP sync for Intacct — adding retainage fields to paths that already work.
Out of scope
Variable / step-down rates
Data model supports per-line rates; step-down adds completion % thresholds
Invoices without matched PO
Schema is source-agnostic; V2: auto-create PO from G702
Release workflow UX
Release sync is in scope; creating release bills from UI is deferred
Multi-PO bills
V1: one PO per bill. Many-to-many mapping exists but adds rate complexity
Other ERPs
Data model is ERP-agnostic; priority after Sage: QBO, NetSuite, Acumatica
Vendor compliance automation
AI collection and validation of lien waivers, COIs, and other documents — separate workstream
REAL EXAMPLE — HUFFINES / WATERTON
The subcontract
Proposal — $81,043.55, 35 EA fence columns
Contract clause — 10% retainage, NET 15
This specific purchase order has one line item with 10% retainage. Total contract value is $81K.
ASPIRATIONAL UX
Purchase Order with withholding
Details
Bills (0)
Activity
Contract Amount
$81,043.55
Vendor
Waterton Construction
Withholding Configuration
GL Account
2100 · Retainage Payable
Schedule of Values
Description
Qty
Unit Price
Amount
Rate
Fencing Column (Private)
35 EA
$2,315.53
$81,043.55
10%
Total
$81,043.55
New fields: withholding_enabled, withholding_default_rate, per-line withholding_rate
APP 1 — SEP 24, 2025 — 35% COMPLETE
First invoice
Application #1
Work this period
$28,186.10
Retainage (10%)
-$2,818.61
Net payment due
$25,367.49
Running Totals
Cumulative billed
$28,186.10
Cumulative retained
$2,818.61
ASPIRATIONAL UX — APP 1
Bill with withholding
Matched Purchase Order
PO-2025-1687 — Private Fence Columns
10% withholding
Line Items
Description
Gross
Rate
Withheld
Net (amount)
Fencing Column (Private)
$28,186.10
10%
$2,818.61
$25,367.49
Gross $28,186.10 − 10% retainage = $25,367.49 net payment.
APP 2 — OCT 22, 2025 — 94% COMPLETE
Second invoice
Application #2
Work this period
$48,152.31
Retainage (10%)
-$4,815.23
Net payment due
$43,337.08
Running Totals
Cumulative billed
$76,338.41
Cumulative retained
$7,633.84
ASPIRATIONAL UX — APP 2
Retainage accumulates
Line Items
Description
Gross
Rate
Withheld
Net (amount)
Fencing Column (Private)
$48,152.31
10%
$4,815.23
$43,337.08
PO retainage summary is computed from matched bills (R7) — not stored on the PO.
APP 3 — NOV 24, 2025 — 100% COMPLETE
Third invoice
Application #3 (final work)
Work this period
$4,705.14
Retainage (10%)
-$470.52
Net payment due
$4,234.62
Running Totals
Cumulative billed
$81,043.55
Cumulative retained
$8,104.36
% Complete
100%
ASPIRATIONAL UX — APP 3
Third invoice in Ramp
Line Items
Description
Gross
Rate
Withheld
Net (amount)
Fencing Column (Private)
$4,705.14
10%
$470.52
$4,234.62
100% complete. $8,104.36 retained across all 3 invoices, awaiting release.
APP 4 — RETAINAGE RELEASE
Fourth invoice — request for retainage release
Release Application
Retainage released
$8,104.36
New retainage rate
0%
Contract Final
Total billed
$81,043.55
Total retained
$0.00
Total paid
$81,043.55
GL SUMMARY
Across all 4 bills
| Event |
Land Improvements (DR) |
Retainage Payable (CR) |
Cash (CR) |
| Invoice 1 |
+$28,186.10 |
+$2,818.61 |
-$25,367.49 |
| Invoice 2 |
+$48,152.31 |
+$4,815.23 |
-$43,337.08 |
| Invoice 3 |
+$4,705.14 |
+$470.52 |
-$4,234.62 |
| Invoice 4 (release) |
— |
-$8,104.36 |
-$8,104.36 |
| Net |
$81,043.55 |
$0.00 |
-$81,043.55 |
Retainage Payable nets to $0. The full contract value flows through — retainage just controls when.
Next steps
Follow along and share feedback in #project-retainage
1 / 17
← → or click to navigate