Blog · Client billing
Part of the deposits, milestones and retainers guides
Long projects have a cash flow problem built in: you do weeks of work, then send one invoice and hope. Milestone billing fixes this by splitting the project into phases, each with a defined deliverable, each invoiced when complete. The client never owes too much at once, and you never work too long unpaid. Here is how to structure milestones so they actually protect you.
A single final invoice concentrates all your risk at the end of the project, exactly when the client has the most leverage and the least urgency. Milestones spread the risk across the timeline. Each paid milestone is proof the relationship is working, and each one is a natural checkpoint to confirm the project is still on track. As a bonus, smaller invoices get approved faster: a $3,000 invoice often sails through where a $12,000 one triggers a procurement review.
Two to four milestones cover most projects. More than that and you are running a billing department, not a project. Each milestone needs three things: a name, a deliverable, and an amount.
A typical split for a $12,000 website project:
Notice the pattern: every milestone is something the client can see and confirm. "Two weeks of development" is not a milestone, it is a timesheet. "Staging site delivered" is a milestone, because acceptance is a yes-or-no question.
A milestone without acceptance criteria is just a vibe. One sentence per milestone, written into the proposal, defining what "done" means:
Milestone acceptance clause
Acceptance: each milestone is considered accepted 5 business days after delivery unless you request revisions in writing. One revision round is included per milestone. Additional revisions are billed at [RATE]. Work on the next phase begins when the previous milestone invoice is paid.
The milestone invoice goes out the day the deliverable is accepted. Not Friday, not month end, that day. Momentum is a payment accelerant: the client is happiest with your work in the moment they approve it, and an invoice arriving in that window feels like the natural next step. An invoice arriving three weeks later feels like a surprise bill.
Each milestone gets its own invoice in your normal numbering sequence, referencing the project and the milestone name: "Milestone 2, staging build, for [project]." The final milestone invoice is just the last one, not a special document. No credit notes, no balance math, just clean sequential invoices.
Sometimes the client goes quiet mid-project: feedback stops, the milestone sits unaccepted, and your invoice never goes out. This is exactly what the pause clause is for. Work on the next phase begins when the previous milestone invoice is paid, so a stalled payment pauses the project automatically instead of becoming your problem to chase.
After a week of silence, send one short nudge referencing the clause you both signed:
Stalled milestone nudge
Subject: Quick check-in on [MILESTONE NAME] Hi [NAME], Just checking in: [DELIVERABLE] has been with you since [DATE]. Per our agreement it will be considered accepted on [DATE + 5 BUSINESS DAYS], and I will send the milestone invoice then. If you need changes first, reply with your notes and I will fold them into the revision round. Thanks, [YOUR NAME]
Polite, procedural, and it references the agreement instead of your feelings. Most stalls resolve within a day of this email.
Milestones are not an alternative to a deposit, they are what comes after it. The deposit is milestone zero: it proves commitment before work starts. The remaining milestones keep cash flowing through the project. And when the engagement turns into ongoing work rather than a project with an end, that is the moment to graduate from milestones to a retainer agreement.
Every milestone is a small project with its own finish line, its own invoice, and its own proof that the relationship is working.
Billing a milestone today? Make the invoice with the private invoice generator, no signup, nothing uploaded, PDF in minutes. If the project started as a quote, convert the accepted quote into your first invoice.