web-developmentinvoice-templates

Web Developer Invoice Template: Hourly, Fixed, and Retainer Examples

Free web developer invoice template with line-item breakdowns for hourly billing, fixed-fee projects, and monthly retainers — plus how to structure milestones.

By Easy Invoice Generator Team 9 min read

Web developer invoices have three common shapes: hourly against a retainer cap, fixed-fee with milestone payments, and pure monthly retainer for maintenance. Each has its own line-item pattern, its own failure mode, and its own cash-flow profile. This guide walks through all three with real numbers and shows you which to use when.

If you just want a template you can edit in 60 seconds, the button at the end of this post opens one in the browser with sensible defaults. No signup.

The four fields that matter more for developers

Every invoice needs the standard stuff — invoice number, dates, party details, line items, total. Developers need four extra fields most templates skip:

  1. Environment — staging? production? Which branch? This matters when you invoice for bug fixes and need to prove the fix landed.
  2. Repo or commit reference — a commit SHA or PR link next to a “bug fix” line item is proof of work.
  3. Domain or project scope — “April work on app.example.com” disambiguates invoices when you work on multiple properties for the same client.
  4. Acceptance criteria reference — link to the GitHub issue or spec doc. This is the line of defense when a client disputes “what did I pay for”.

None of these fields are legally required, but they cut your dispute rate to near zero. Put them in the Notes section of the invoice, not as separate line items.

Example 1 — Hourly billing

You logged 42 hours over three weeks on a project at $135/hour:

DescriptionQtyRateAmount
Backend API — authentication endpoints14$135$1,890.00
Frontend — login/signup flow10$135$1,350.00
Database migration & seed data6$135$810.00
Code review & PR revisions4$135$540.00
Bug fixes (issues #142, #147, #151)5$135$675.00
Deploy & smoke test3$135$405.00
Subtotal$5,670.00
Tax$0.00
Total$5,670.00

Why six lines and not one. Each line maps to a specific deliverable or GitHub issue. When the invoice lands with a client’s accounting team, the rate-per-hour is unambiguous, the total work is verifiable against the repo, and there’s nothing for a skeptic to argue about. A single “Development work · 42 hrs · $5,670” line invites friction.

Developers who bill hourly should also track their time publicly in a shared spreadsheet or a tool like Harvest, Toggl, or Clockify. Not because clients will audit it (most won’t), but because the act of logging time in real-time makes the invoice itself a 60-second task at month’s end instead of a 3-hour reconstruction.

Example 2 — Fixed-fee project with milestones

You quoted a rebuild for $18,000, broken into four milestones. You’re invoicing milestone 3:

DescriptionQtyRateAmount
Rebuild — milestone 3 of 4 (database + API)1$5,400$5,400.00
Out-of-scope: add admin dashboard role filter8$135$1,080.00
Subtotal$6,480.00
Tax$0.00
Total$6,480.00

Why the out-of-scope line is separate. You quoted 4 milestones × $4,500 = $18,000, which means each milestone invoices for $4,500 on paper. But here milestone 3 invoices for $5,400 because the client added scope — the admin dashboard role filter that wasn’t in the original spec. If you merge it into the milestone line, it looks like you padded the quote. A separate out-of-scope line with hours × rate is transparent.

This is also the right way to defend against “milestone creep” — the phenomenon where a 4-milestone project slowly becomes a 6-milestone project as features pile on. Every scope addition lives on its own line with its own hours, and the original milestone number stays the same.

Milestone payment structure that works for most projects:

  • 25% on kickoff — covers discovery, scope, technical plan
  • 25% on midpoint — usually a design/architecture sign-off
  • 25% on feature-complete — code complete, not yet launched
  • 25% on launch — production deployment accepted

Avoid “50% kickoff / 50% on launch” — it back-loads too much risk onto the developer, and clients who stall at the end are impossible to unstick.

Try it now

Free. No signup. Live PDF preview.

Open the developer template

Example 3 — Monthly retainer

You’re on a $4,000/month retainer for 24 hours of development and ongoing maintenance:

DescriptionQtyRateAmount
April retainer — 24 hours included1$4,000$4,000.00
Overage — additional 6 hours at rack rate6$185$1,110.00
Infrastructure — monthly hosting & monitoring1$120$120.00
Subtotal$5,230.00
Tax$0.00
Total$5,230.00

Why retainer overage is billed at 37% higher rate. The retainer rate of $166/hour ($4,000 ÷ 24) includes a predictability discount. When a client goes over, that discount evaporates and you bill at rack rate ($185/hour). The client agreed to this up front in the retainer contract.

Why hosting and monitoring are on the invoice, not baked into the retainer. Infrastructure costs fluctuate. Putting them on a separate line lets you raise them without raising the retainer, and it teaches the client that infrastructure isn’t free. The alternative — absorbing infra costs into your retainer — means a Cloudflare bill increase eats your margin silently.

Payment terms for developers

Shorter terms than designers. Development work closes fast, and long payment terms burn through your runway:

  • Net 15 for hourly and retainer — these are recurring relationships with predictable collection
  • Net 15 for fixed-fee milestones — no client should have 30 days to approve a completed milestone
  • Immediate payment for overage — if it wasn’t in the retainer, bill it separately and short
  • 1.5% monthly late fee — stated on every invoice, applied consistently

The phrasing that works: “Payment is due within 15 days of the invoice date. A 1.5% monthly interest charge applies to balances past due. Invoices not paid within 45 days may result in pausing of ongoing work.”

The pause clause is the teeth. Clients who are 46 days late on a retainer are not going to pay faster because you wrote them a strongly-worded email. They’re going to pay faster because April’s retainer didn’t get delivered until March’s invoice cleared.

Common mistakes developers make on invoices

Billing round-trip time as development time. Slack messages, project manager calls, and standups aren’t development, but they’re absolutely billable. Use a dedicated “Communication & project management” line so clients understand you’re being paid for the coordination work, not sneaking it into dev hours.

Under-billing emergency work. A production bug that ruins your Sunday should not be billed at your normal rate. Most retainers have a 1.5× or 2× multiplier for out-of-hours emergency response. If your contract doesn’t have one, raise it at renewal.

Not invoicing for discovery. Discovery is billable work. Free discovery calls are acceptable for pre-sales (30 min, maybe 60). A full-day technical discovery workshop is a $1,200–$2,500 line item, not a freebie.

Forgetting to mention currency on international invoices. Always write “USD 5,670” or “$5,670 USD”. International wires hate ambiguity and banks will hold unclear payments.

Outside the US?

  • UK: VAT registration is mandatory above £90,000/year turnover. Registered developers must include their VAT number and charge 20% VAT on invoices to UK clients. B2B invoices to EU clients typically qualify for reverse charge — check with an accountant.
  • EU: Reverse charge applies for cross-border B2B services to VAT-registered EU businesses. Include both VAT numbers on the invoice and the note “Reverse charge — customer to account for VAT.”
  • Australia: 10% GST applies if your turnover exceeds AUD $75,000. ABN must be on every invoice. Invoices over AUD $1,000 must include the words “Tax invoice”.
  • Canada: GST/HST applies once you exceed $30,000 in annual taxable supplies. Rates vary by province — Ontario is 13% HST, Alberta is 5% GST.

For developers working with US clients from another country, use a US-friendly payment method like Wise or Stripe — not a direct international wire. US clients often refuse to send international wires because of their banking costs. Wise and Stripe land in a US account and convert, which puts the friction on you instead of them, and you get paid 2–3× faster.

Pick your template and ship

The editor below is pre-loaded with a web developer template that includes discovery, frontend, backend, QA, and deploy/handover line items at $135/hour, with Net 15 terms and a 30/40/30 milestone payment structure. Change the numbers, add your client, and download the PDF.

Once you have a clean invoice going out, read how to follow up on an unpaid invoice for the email scripts that actually work at day 7, 14, 30, and 60 — and invoice number best practices if you’re still making up invoice numbers on the fly.

Try it now

Free. No signup. Live PDF preview.

Open the developer template