Progress Billing for Contractors, Stage by Stage
· 5 min read
You signed a 60,000 dollar kitchen remodel last Tuesday. The homeowner expects you to start demo on Monday, the cabinets need a deposit by Friday, and you cannot float the materials yourself. You need to bill in stages, and each stage needs to read clearly enough that the client (or their bookkeeper, or their lender) pays without a phone call. Here is the workflow that gets you from signed scope to final retainage release without losing the thread.
Lock the stages into the quote before any tools come out of the truck
Progress billing falls apart when the milestones are vague. "Rough-in complete" is not a milestone. "Framing inspection passed, plumbing rough-in passed, electrical rough-in passed" is. Write the stages into the quote with a dollar amount against each one, the deliverable that triggers the invoice, and the payment term that applies after the trigger.
A typical five-stage split for a remodel looks like this: 20 percent mobilization at signing, 25 percent at demo and framing complete, 25 percent at rough-in inspections passed, 20 percent at substantial completion, 10 percent retainage released 30 days after punch list sign-off. Put those exact numbers and triggers in the quote. If you need a starting point, the project quote builder will lay them out for you, and the deeper notes on what to put on a quote so it gets accepted are worth a read before you send it.
Send the quote with a valid-until date. The client opens the link, types their name to sign, and you have a record of acceptance you can point back to when stage three feels like a different conversation than stage one. That accepted quote is your map for the rest of the job.
Invoice stage one the day the trigger event happens
Mobilization is the easy one. The trigger is the signature, so the invoice goes out the same day. Open a new invoice, set the invoice number using whatever format you use for the year (see invoice numbering best practices if yours is still ad hoc), and write the line item to match the quote word for word. Not "deposit." Write "Stage 1 of 5: mobilization, per accepted quote Q-2024-118, 20 percent of 60,000." Reference the quote number. Reference the stage number. Reference the total.
If the client is a homeowner paying personally, set terms to due on receipt or net 7. If the client is a company or a GC, ask up front whether they need a PO number on every stage invoice or just the first one. Most procurement teams want the PO on every invoice, which is the quiet reason invoices sit in a queue. The missing PO number that kills your invoice covers why this matters more than it looks like it should.
Send the link. Watch for the open. If it has not been viewed in 48 hours, follow the follow-up plan for an unviewed invoice rather than guessing.
Handle the middle stages without recreating the wheel
Stages two through four are where most contractors lose time. The trap is making each invoice from scratch, which means new totals, new math, and a new chance for a typo that the client will catch. Duplicate the last stage invoice instead. Change the stage number, change the line item description to the new trigger event, change the amount, and update the running total in a second line that reads "Contract total to date: 27,000 of 60,000 (45 percent)." That running total is what keeps the client (and their lender, if there is one) oriented.
When the client asks for a change, do not edit the stage invoice that is already approved. Issue a separate change order invoice, or a new version of the open one if it has not been approved yet. The difference between versions and amendments matters here: a new bathroom fan is a new line item and a new version, while a corrected billing address is an amendment on the current version. Keep that straight and your bookkeeper will thank you in January.
If the recipient needs to add their PO, change the bill-to entity from a personal name to a company, or set their AP contact, let them do it directly on the invoice link. They edit, you get notified, and you revert anything that looks wrong. No email chain, no re-sent PDF.
Bill substantial completion and hold retainage separately
Substantial completion is the stage where disputes appear. The client walks the site, makes a punch list, and decides whether your invoice is approvable. Invoice for the full substantial-completion amount, not the amount minus retainage. Then add a clearly labeled line, "Retainage withheld: 10 percent, 6,000, released 30 days after punch list sign-off," as a negative line item. The net is what is due now. The retainage stays visible on the invoice as a future obligation, which is exactly how a GC or a bank wants to see it.
When the punch list is signed off, issue the final retainage invoice as its own document. One line item: "Retainage release, contract C-2024-118, per punch list dated [date]." Net 15 or net 30 depending on the contract. This is the invoice that disappears into AP if you are not careful, so attach the signed punch list as a reference and put the contract number in the subject line of the email.
Where JupiterInvoice fits in this workflow
Progress billing is a sequence of small, related invoices that all need to agree with each other and with the original quote. Invoicing built for 1099 contractors gives you the quote-to-stage-invoice chain in one place, with version history on every invoice, a recipient view where the client can add their PO and AP contact without an account, and locked fields so the invoice number, issue date, and your bank details cannot be quietly altered after the fact. If your stages need to be created from a job-management system instead of clicked through by hand, the REST API and MCP server will create and update them programmatically.
Start the next job by drafting the quote with all five stages written out. Create the quote, send the link, and let the accepted version drive every invoice that follows.