GUIDE

Progress Billing and Retainage, Explained for Small Contractors

Deposits, progress draws, and retainage in plain English, and how ServCTRL bills a bigger install against the contract, not the clock.

Updated June 2026 · 7 min read

A service call is one invoice. The tech finishes, you collect, you move on. A panel upgrade, a full HVAC changeout, or a water-treatment install is different: a few days, a few thousand dollars, and a material bill you'd rather not float on your own card until the last screw is in.

ServCTRL bills those bigger jobs the way contractors already do: a deposit up front, progress draws as the work advances, and retainage held until it's buttoned up. This guide explains what each of those three is in plain trade terms, then shows how the software bills it, walked through a simple HVAC install with round numbers, including the part that trips shops up: doing it all without a single time sheet, because you bill the contract, not logged hours.

Why bigger jobs need more than one invoice

On a same-day repair, one invoice is the whole story. On an install, a single invoice creates two problems: you carry the material cost out of your own pocket for days or weeks, and the customer hands over a large sum all at once at the end, which feels risky to them and gives you no leverage if they drag their feet.

Splitting the bill solves both. You collect something up front to cover materials and prove the customer is serious, bill more as visible milestones get hit, and on the jobs where it matters, let the customer hold a small slice until everything is finished. The customer always knows what they've paid and what's left, and ServCTRL is built to bill in exactly these pieces.

This is contract install work, flat-rate, scoped, signed. It is not recurring or subscription billing. If you run monthly service plans or maintenance routes, that's a different model, and it's not what ServCTRL is built for.

The deposit: unearned cash, netted at the end

A deposit is money you collect before the work starts, a good-faith down payment that covers your material order and locks in the customer's commitment. The key thing about it is that it's unearned cash: you're holding it; you haven't billed for finished work yet.

So it has to be handled carefully to never charge for it twice. ServCTRL's approach: the deposit is collected on its own deposit invoice up front, then applied as a visible credit line on the final invoice. The customer sees the full contract amount, then a clear minus line for the deposit they already paid, then the real balance due, nothing hidden, nothing double-counted.

In ServCTRL's contract invoicing, a deposit is its own invoice kind. You set the deposit intent right on the estimate (none, a percentage, or a fixed dollar amount), and it flows through to that dedicated deposit invoice. Because it's unearned cash, it stays out of earned revenue until the end, where it lands on the final bill as a credit line so the math is always right.

Deposit vs. progress draw

A deposit is collected before any work, as unearned cash you net out later. A progress draw is billed for work already done, a slice of the contract earned as the job advances. One is a down payment; the other is partial payment for completed scope.

The progress draw: a share of the contract as work advances

A progress draw is exactly what it sounds like: a percentage of the contract total drawn down as the job hits milestones. Instead of one invoice at the end, the bill might be 40% when rough-in is done, another 40% when the equipment is set and running, and the balance at final.

The percentages aren't a formula you defend hour by hour. You bill against the contract, which is the accepted estimate plus any approved change orders. If the contract is $9,000 and roughly half the scope is complete, a 50% draw is $4,500. You're billing finished scope, not reconstructing a timecard.

This is where contract-based billing fits install work better than hourly tracking: you priced the job flat, the customer agreed to a number, and as you deliver against it you bill the matching share. ServCTRL treats a progress draw as its own invoice kind, so you can send a draw mid-job and the running total stays tied to the one contract.

Retainage: a slice held back until it's buttoned up

Retainage is a percentage held out of the collectible total on each invoice, commonly 5% or 10%, that the customer keeps until the whole job is finished and accepted. It's a punch-list incentive: the customer holds a little back so you have a reason to come fix the last trim plate, the paint touch-up, or the thermostat that needs re-leveling.

It's more common on larger jobs and on work tied to general contractors or commercial customers, where it may even be contractually required; on a straightforward residential install you may not use it at all. When you do, the mechanics are simple: each progress invoice holds back the retainage percentage, and at the end one retainage-release invoice covers the total you held.

ServCTRL handles retainage as a per-invoice percentage held out of the collectible total, released with that single retainage-release invoice at the end. You don't track it on a spreadsheet hoping you remembered to collect it. The held amount carries forward, and the release invoice cleans it up.

A worked example: a $9,000 HVAC changeout

Round numbers so the flow is obvious. Say you sell a complete system changeout off your Rate & Price Book for a $9,000 contract, with a 30% deposit, two progress draws, and 10% retainage held on the draws. Walked through line by line, the customer always knows where they stand, you're never floating the whole material bill, and the final number reconciles exactly to the $9,000 contract.

  • Deposit (30%): bill $2,700 up front on a deposit invoice. Covers your equipment order. Unearned cash you'll net out later.
  • Progress draw 1 (40% of contract, 10% retainage held): rough-in and set done. Bill $3,600, hold back $360 retainage, collect $3,240 now.
  • Progress draw 2 (30% of contract, 10% retainage held): system running and commissioned. Bill $2,700, hold back $270 retainage, collect $2,430 now.
  • Final invoice: show the full $9,000 contract, subtract the $2,700 deposit as a visible credit line, subtract the two draws already collected ($3,240 + $2,430), leaving the balance.
  • Retainage release: send one retainage-release invoice for the $630 you held ($360 + $270) once the punch list is signed off.

How the customer pays each bill

Structuring the draws is half of it; collecting them is the other half. Every invoice (deposit, draw, or retainage release) carries a public pay-now link. The customer opens it and pays by card or ACH, and the money lands in your own Stripe account. That online path works once you've connected Stripe, a short one-time setup.

Not every payment comes through the link, and that's fine. When a customer hands you a check for the deposit or pays the final balance in cash, you record that payment against the invoice so the contract total stays accurate. There's no in-truck card terminal to fuss with. On site you either record what you took or text the customer the pay link to settle by card or ACH on their own phone.

Because every payment is tied back to the same contract, the running balance is always current. The customer sees what's paid and what's left; you see the same.

Why there are no time sheets: you bill the contract

Notice what's missing from that whole example: hours. Nobody logged a timecard. The draws were percentages of a flat-rate contract, not labor reconstructed after the fact. That's the point of contract-based billing for install work: you priced the scope, the customer signed it, and you bill against that signed number.

The contract is the accepted estimate plus any approved change orders. If the homeowner adds a whole-house surge protector mid-job, you propose a change order, the customer e-signs it, and it bumps the contract total, so your remaining draws are calculated off the new number. Your Rate & Price Book sets the price, your estimate becomes the contract, and your invoices draw against it. The same scope flows from bid to invoice without retyping.

ServCTRL has no time tracking, no timesheets, and no job-costing, by design. For a small shop running service calls and flat-rate installs, the contract is the source of truth. If you're a solo operator without crews and this is more structure than you need, PayPolka is the lighter sibling for estimating and invoicing on your own.

Key takeaways

  • A deposit is unearned cash collected up front, then shown as a visible credit line on the final invoice so it's never double-counted.
  • A progress draw bills a percentage of the contract as the work advances, finished scope, not logged hours.
  • Retainage is a percentage held out of each invoice's collectible total and released with one retainage-release invoice at the end.
  • ServCTRL bills the contract, the accepted estimate plus approved change orders, which means no time sheets and no job-costing to keep current.
  • The customer pays each invoice by card or ACH on a public pay link once Stripe is connected, or you record a check or cash against it.
  • This applies to flat-rate contract install work (HVAC changeouts, panel upgrades, water treatment), not recurring or subscription billing.
FAQ

Questions, answered.

What is the difference between a deposit and a progress draw?

A deposit is collected before any work starts, unearned cash that covers materials and locks in the customer, which you later net out as a credit line on the final invoice. A progress draw bills for work already completed, a percentage of the contract earned as the job advances. One is a down payment; the other is partial payment for finished scope.

How does retainage work for a small contractor?

Retainage is a percentage (often 5% or 10%) held out of each invoice's collectible total that the customer keeps until the job is finished and accepted. It's a punch-list incentive. At the end you send a single retainage-release invoice for everything you held. It's more common on larger or GC-tied jobs and is sometimes contractually required.

Can I do progress billing without tracking hours?

Yes. On flat-rate install work you bill against the contract, the accepted estimate plus any approved change orders, not logged time. A progress draw is simply a percentage of that signed contract total tied to a milestone. ServCTRL has no time tracking by design; the contract is the source of truth.

Does progress billing work for recurring or subscription billing?

No. Progress draws and retainage are for contract install work, a panel upgrade, an HVAC changeout, a water treatment install, where you bill a scoped, signed job in stages. If you run monthly service plans or maintenance routes, that's a different model that ServCTRL doesn't handle.

How does the customer pay a progress draw?

Each invoice carries a public pay-now link, where the customer pays by card or ACH; the money goes to your own Stripe account once you've connected it (a short one-time setup). You can also record a check or cash against the invoice, or text the pay link so the customer settles on their phone. There's no in-truck card terminal.

Run the whole job from one place.

Start free today — no credit card, no demo call.