Milestone, hourly, and retainer billing โ with scope changes and pass-through costs handled.
Start a Web Development Invoice โOpens with the web development lines already listed. Free, no sign-up, PDF download.
Web development invoices fail on scope, not on rate. A build quoted as a fixed price grows through a hundred small reasonable requests, none of which felt like a change at the time, and the developer either absorbs them or raises the issue at the end when the relationship is already strained. Milestone billing with a written scope is the structure that prevents this: bill on defined deliverables, and invoice anything outside them as a numbered scope-change line at the moment it is agreed, not at the end.
The other thing this trade routinely gets wrong is pass-through costs. Hosting, domains, premium plugins, fonts, stock imagery, API usage, and app-store fees are the client's operating costs, not yours, and a developer who quietly pays for them out of the project fee has given themselves an unfunded liability that renews annually. Put them on the invoice at cost, or better, put them in the client's own accounts from the start.
Fixed price against milestones with a deposit, hourly for open-ended or maintenance work, or monthly retainer for ongoing support with a stated hour allocation and overage rate. Third-party costs passed through at cost.
These are the lines this trade actually bills, the unit each is measured in, and what each one prevents. Every line below is optional โ use the ones that match the job.
| Line item | Billed as | Why it belongs there |
|---|---|---|
| Milestone 2 of 4 โ design system and component library | per milestone | Numbered against the agreed schedule. Deliverable-based, not time-based. |
| Deposit received 7/1 โ 30% (applied) | credit (negative) | Show it applied. Otherwise the final invoice looks like the whole project again. |
| Development โ 24 hrs @ hourly rate (see time log) | per hour | Reference the time log. Hours nobody can inspect are hours that get questioned. |
| Scope change #3 โ multi-language support (approved 7/28) | per approved change | Numbered, dated, approved. Invoice at agreement, not at project end. |
| Monthly retainer โ 10 hrs support included | per month | State the included hours and what happens to unused ones. |
| Retainer overage โ 3.5 hrs @ overage rate | per hour | A rate agreed in the contract makes overage arithmetic instead of a conversation. |
| Third-party costs โ hosting, domain, plugin licences (at cost) | pass-through | The client's operating costs. Pass them through or put them on the client's card. |
| Post-launch support window โ 30 days included | included / then hourly | Define when 'fixing bugs' ends and 'billable work' begins, in writing. |
Nearly every unpaid or short-paid invoice in this trade comes down to one of these.
A downloadable template means fixing the layout, re-entering the formulas, and reformatting every time. This one fills in on screen, does the maths, and downloads a clean PDF โ with the web development lines already listed.
Open the Web Development Template โGo deeper
How to invoice for web development โThe full guide โ rates, payment terms, deposits, and what to do when the invoice goes unpaid.
Your business name and contact details, the client, invoice number and date, the project name, the billing basis โ milestone, hourly, or retainer โ with the specific deliverable or period named, hours with a reference to a time log if billing hourly, any numbered scope changes with their approval dates, third-party costs passed through at cost, the deposit shown as an applied credit, subtotal, tax where applicable, total, and payment terms. For international clients, note the currency explicitly and who bears the wire fee.
Milestone billing suits defined projects: it ties payment to visible deliverables, gives the client predictability, and gives you cash flow through a long build instead of one payment at the end. Hourly suits open-ended work, maintenance, and clients whose requirements genuinely are not settled โ but it caps your income at your available hours and rewards you for being slow. A common structure is milestones for the build with a deposit, then an hourly or retainer arrangement for everything after launch.
As a numbered scope-change line, raised and agreed at the moment the request arrives rather than at the end of the project. The pattern that fails is silently absorbing a series of small requests and then presenting a large unexpected total, by which point the client has forgotten asking for most of them. Say plainly that the request sits outside the agreed scope, quote it, get written approval, and invoice it as 'Scope change #3 โ multi-language support (approved 7/28)'. Clients accept this readily in the moment.
Bill a fixed monthly amount that includes a stated number of hours, with an overage rate for anything beyond it, and state explicitly whether unused hours roll over โ most agreements say they do not, because you reserved the capacity regardless. Invoice at the start of the month for the month ahead, which is what makes a retainer a retainer rather than a delayed hourly bill. Include the hours used against the allocation on the invoice so the client can see the value they consumed.
Free forever, no sign-up, professional PDF in under 60 seconds.
Create Free Invoice โ