Blog Post

How to Invoice Web Development Projects: Hourly, Fixed-Price & Milestone Billing

Learn how freelance web developers should structure invoices for hourly, fixed-price, and milestone-based projects. Includes payment terms, scope creep protection, and templates.

May 9, 20269 min read

How to Invoice Web Development Projects: Hourly, Fixed-Price & Milestone Billing

Web development is one of the highest-paid freelance skills on the market. But getting paid well means nothing if you cannot get paid consistently and on time.

Unlike simpler service businesses where you finish a job and hand over an invoice, web development projects involve shifting scopes, unclear deliverables, and clients who sometimes do not understand what they are paying for. All of these create invoicing challenges that other freelancers never face.

This guide covers how to structure invoices for different pricing models, how to protect yourself from scope creep, and how to set up payment terms that keep your cash flow healthy while keeping clients happy.

The Three Pricing Models and How to Invoice Each One

Web developers generally price work in three ways: hourly, fixed-price, or milestone-based. Each one requires a different invoicing approach.

Hourly Billing

Hourly billing is the simplest model: you track your time, multiply by your rate, and invoice the total. But simplicity creates its own problems.

Clients on hourly contracts want to know exactly where their money went. Vague line items like "Development work - 40 hours - $6,000" invite questions and disputes. Instead, break your time into meaningful categories.

A good hourly invoice for a web development project might include line items like: Front-end development (responsive navigation component) - 8 hours at $150/hr, Back-end API development (user authentication endpoints) - 12 hours at $150/hr, Bug fixes and QA testing - 4 hours at $150/hr, and Client revision requests (homepage layout changes) - 3 hours at $150/hr.

Notice the last line item. Separating revision work from original development is important. It shows the client how much of their budget goes to changes after the initial build. Over time, this data helps you negotiate better scope definitions.

For hourly projects, invoice weekly or biweekly. Do not wait until the end of the project. Weekly invoicing keeps the amounts manageable for your client and keeps your cash flow steady. It also prevents the uncomfortable situation where a client sees a $15,000 invoice for the first time and panics.

Fixed-Price Billing

Fixed-price contracts give the client cost certainty: they know what the project costs before it starts. For you, the risk is that the project takes longer than expected.

The invoicing strategy for fixed-price work is straightforward: split the total into payments tied to project phases. A common split is 50% upfront as a deposit before work begins, and 50% on delivery and approval.

For larger projects, a three-way split works better: 40% deposit, 30% at midpoint (usually after the design phase or when the front end is complete), and 30% on final delivery. This structure protects both sides. The client does not pay the full amount before seeing any work, and you do not do months of work before seeing any money.

Your deposit invoice should clearly state what the deposit covers, what deliverables are included in the total price, and what happens if the scope changes. This last point is critical for web development because scope always changes.

Milestone-Based Billing

Milestone billing is the most natural fit for web development projects. You define specific deliverables, assign a price to each one, and invoice when each milestone is complete.

A typical milestone structure for a website build might look like this: Discovery and wireframes - $2,000, Design mockups (homepage plus three interior pages) - $3,500, Front-end development - $4,000, Back-end development and CMS integration - $3,500, Testing, revisions, and launch - $2,000. Total: $15,000.

Each milestone invoice references the specific deliverable, confirms it was delivered and approved, and states the payment terms. The key advantage of milestone billing is that it creates natural checkpoints. If a client stops responding or stops paying, you stop work at a clean boundary rather than in the middle of a feature.

Protecting Yourself from Scope Creep

Scope creep is the single biggest invoicing problem in web development. The client asks for "just one more thing" and suddenly your fixed-price project has grown by 30 percent.

Your invoice is your first line of defense. Here is how to use it.

Document everything in the original scope. Before you send the first invoice, make sure your contract or proposal lists every deliverable. Pages, features, integrations, browser support, device support - all of it. Your invoice should reference this scope document.

Create a separate line item for out-of-scope work. When a client requests something outside the original scope, do not just absorb it. Send a change order or supplemental invoice that clearly labels the work as "Additional - not included in original scope."

Track revision rounds. Most web development contracts include one or two rounds of revisions. After that, revisions are billed hourly. Your invoice should show which revision round you are on so there are no surprises.

Payment Terms That Work for Developers

Standard freelance payment terms like Net 30 do not always work well for web development. Here is why: web projects often span weeks or months. If you invoice on completion with Net 30 terms, you could wait 60 to 90 days from when you started working to when you get paid.

Better approaches include: Net 14 for milestone invoices (the work is already done and approved, so shorter terms are reasonable), deposit invoices due on receipt (do not start work until the deposit clears), and final payment due within 7 days of project launch.

You can also add a late payment clause to your contract. Something like "Invoices not paid within 15 days of the due date will incur a 1.5% monthly late fee" gives clients a financial reason to pay on time. Whether you enforce it is up to you, but having it in writing helps.

What to Include on Every Web Development Invoice

Beyond the standard invoice elements (your info, client info, invoice number, dates), web development invoices should include a few extras.

Project name or reference number. If you are working on multiple projects for the same client, this prevents confusion.

Phase or milestone reference. "Invoice 3 of 5 - Front-end Development Complete" tells the client exactly where things stand.

Hosting and domain renewals. If you manage hosting or domains for the client, invoice these separately from development work. They are recurring costs and should be clearly labeled.

Third-party costs. If you purchased stock photos, premium plugins, or API subscriptions for the project, list these as separate line items. Mark them as pass-through costs so the client understands they are not part of your fee.

Intellectual property transfer clause. Many web development contracts specify that IP transfers to the client upon final payment. Reference this on your final invoice: "Full intellectual property rights transfer upon receipt of final payment."

Handling Retainer Clients

Many web developers transition from project work to retainer arrangements. A client pays a fixed monthly fee for a set number of hours or a defined scope of maintenance and updates.

Retainer invoicing is simple: send the same invoice on the first of each month. Include a summary of work performed in the previous month and any unused hours (if your contract allows rollover).

The key with retainers is consistency. Invoice on the same day every month. Use the same format. Make it so predictable that your client's accounting team processes it automatically. Read our full guide to retainer invoicing.

Tools That Make Developer Invoicing Easier

You could build your own invoicing system - you are a developer, after all. But your time is better spent on client work.

WaffleInvoice handles the mechanics so you can focus on code. Create milestone invoices in under two minutes, set up automatic payment reminders for overdue invoices, accept credit card and bank transfer payments through Stripe, and track every invoice from sent to paid in one dashboard.

The free plan covers unlimited invoices and clients. The Pro plan adds recurring invoices for retainer clients, a client portal where your clients can view their billing history, and automated follow-ups that chase late payments for you. See pricing details.

Common Mistakes Web Developers Make When Invoicing

Not invoicing for discovery work. Requirements gathering, technical research, and architecture planning are real work. If you are not charging for discovery, you are subsidizing the project with free labor. Bill for it or include it as the first milestone.

Bundling hosting with development. When hosting costs are buried in your development invoice, the client does not understand what they are paying for. Worse, when the project ends and you are still hosting their site, there is no clear billing structure for it. Invoice hosting separately from day one.

Waiting until the project is finished to invoice. On a three-month project, that is three months of unpaid work. Use deposits and milestone payments to keep cash flowing throughout the project.

Not specifying what "done" means. Your invoice says "Website development - complete." But the client thinks there are still three more revision rounds included. Define completion criteria in your contract and reference them on the invoice.

Ignoring international tax obligations. If you are a developer in the US invoicing a client in the UK, or vice versa, tax rules get complicated. Consult an accountant and make sure your invoices comply with both jurisdictions. See our guide to international invoicing.

The Bottom Line

Web development invoicing does not have to be complicated. Pick the pricing model that fits your project, structure your invoices with clear line items and milestone references, protect yourself from scope creep with documentation, and invoice consistently throughout the project rather than waiting until the end.

Your invoices are a reflection of your professionalism. A clear, well-structured invoice tells your client: "I run a serious business, and I expect to be treated like a serious professional."

Ready to simplify your invoicing? Create your free WaffleInvoice account and send your first invoice in under two minutes. No credit card required.

Related reads: How to Invoice Freelance Clients · How to Set Freelance Rates · Retainer Invoicing Guide · International Invoicing · WaffleInvoice for Web Developers

Ready to improve your invoicing?

WaffleInvoice makes it easy to invoice faster, get paid on time, and manage your cash flow. Start free today.

Sign Up Free