When an estimate has a payment schedule, each milestone bills as its own invoice — its own number, due date, pay link, and receipt. This article covers generating those invoices, collecting them, and what happens when everything's paid.
Where the schedule lives
Once the estimate is approved and has a job, a Payment schedule card appears on the estimate, the job, and every milestone invoice. Each row shows the milestone, its exact amount, and its status:
| Status | Meaning |
|---|---|
| Pending | Not invoiced yet. |
| Invoiced | Invoice exists, not fully paid — the due date shows on the row. |
| Paid | The milestone's invoice is paid in full. |

Generating a milestone invoice
- On the schedule card, click Invoice on a pending milestone.
- Pick the payment terms — Due on receipt, Net 7/15/30, or a custom number of days. The dialog previews the due date.
- Create draft invoice — you land on the draft to review and send.

Milestones don't have to be invoiced in order — invoice completion before rough-in if that's how the job went. Techs can do the same from the field app: the job's Payment plan card has the same Invoice button and, once generated, the same send / collect-payment flow they use on any invoice.
The deposit (first milestone) doesn't need this — it's generated automatically when the customer approves, due on receipt. See Adding a payment schedule.
What a milestone invoice looks like
One line — "Progress payment — Rough-in (50% of $6,866.47) — Estimate EST-0036" — with the milestone's exact share of the total and tax. Line items on milestone invoices are locked (the amounts come from the plan); notes, terms, and due date stay editable.
The PDF carries the context: a "Payment 2 of 3" row, plus the project total, paid to date, and remaining balance — so a customer holding one invoice always knows where it sits in the plan.
The job closes itself
Partial payments are fine along the way, but the job flips to Closed automatically the moment every milestone invoice is fully paid (after the work is completed). No milestone left behind, no job parked at Invoiced forever.
Voiding a milestone invoice puts that milestone back to Pending — regenerate it whenever you're ready, and the amounts hold.
Billing extra work outside the plan
Tech found a surprise and added line items to the job? Under the schedule card there's Invoice extras — it creates a separate draft invoice so the milestones stay untouched.
The extras draft pulls in every line item on the job — including the work the plan already covers. Remove the plan-covered rows from the draft before sending, so the customer is only billed for the extras.