← All guides

How to Invoice as a Web Developer

By the InvoiceKo team · September 10, 2026 · 4 min read

Web projects are too big to bill once and too fluid to bill blind. The developers who get paid on time invoice in milestones, keep pass-through costs visibly separate from their labor, and put every scope change on paper as its own line before building it. Here's how each of those looks on an actual invoice.

Milestone billing: split the project, split the invoices

For anything beyond a small fix, don't invoice 100% on delivery — by then you've carried all the risk and the client has all the leverage. Break the project into 3–4 payment milestones tied to things the client can see, and send a separate invoice at each one. A common split for a $9,000 site build:

MilestoneTriggerAmount
DepositSigned agreement, before work starts30% — $2,700
Design approvedClient signs off on mockups30% — $2,700
Staging liveWorking site on a staging URL30% — $2,700
LaunchSite live on client's domain10% — $900

Each invoice should name the milestone and the project: "Milestone 2 of 4 — design approval, Meridian Dental website rebuild." Numbering the milestones does two things: the client's accounts payable can see the schedule, and nobody can later claim the launch invoice was a surprise.

Keep the final milestone small. A 10% holdback is enough for the client to feel protected, but not so much that a slow launch (usually slow because of their content) starves you.

Pass-through costs: bill them, but label them

Developers routinely front costs that belong to the client: domain registration, hosting, SSL certificates, premium plugin or API licenses, stock assets. Two rules:

  1. Separate lines, real amounts. "Domain registration (meridiandental.com, 1 yr) — $18" and "Managed hosting, annual plan — $300" as their own lines, distinct from labor. Lumping them into a labor line means you pay tax and platform-fee overhead on money that was never income.
  2. Put recurring services in the client's name where possible. Register the domain and hosting under the client's account and bill your setup time instead. Owning a client's domain makes you their unpaid IT department forever — and makes offboarding ugly.

If you mark up pass-throughs (some developers add 10–15% for administration), decide that policy up front; don't hide it inside inflated cost lines.

The scope-change line: your most profitable habit

Every project grows. The difference between developers who profit from that and developers who eat it is a piece of paper. When the client asks for something outside the agreed scope — a members area, "just one more" template, a data migration nobody mentioned — quote it, get a written yes, and then bill it as a clearly labeled line:

Scope addition (approved by J. Patel, Sept 2): gated members area with password reset — $1,400

The words "scope addition" and "approved by" are load-bearing. They tell the bookkeeper this wasn't in the original quote and that someone at the client authorized it, which is exactly the paper trail that gets a bigger-than-expected invoice paid without a phone call.

Maintenance retainers after launch

Post-launch, move the client to a monthly retainer: updates, backups, uptime monitoring, and a set number of support hours (say, 2/month). Invoice it on the 1st, same amount every month, with the included hours stated on the line so out-of-scope requests are visibly billable:

Site maintenance retainer — Sept 2026 (updates, backups, monitoring, 2 support hrs included) — $150

State your rollover policy in the terms (most developers don't roll unused hours; say so). Retainer invoices are also where a saved template earns its keep — duplicate, bump the number and month, send.

A worked example

A milestone invoice mid-project, with a pass-through and an approved scope change on it.

Example: milestone 3 invoice with pass-through costs and a scope change

Staging-live milestone for a site rebuild, with hosting billed at cost and an approved scope addition as its own line.

Use this example →

Build the invoice faster than the deploy

The free invoice generator for freelancers handles all of this — milestone lines, pass-throughs, retainers — with no signup and no watermark on the PDF. And since you're a developer: there's a prefill-link API, so you can generate invoice links from your own scripts or project tracker instead of typing line items by hand.