
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.
WaffleInvoice Team
How to Invoice Web Development Projects: Hourly, Fixed-Price & Milestone Billing
Web development pays among the best of any freelance skill, and none of that matters if the money shows up late or not at all. The hard part is not the rate. It is that web projects come with moving scopes, fuzzy deliverables, and clients who genuinely cannot picture what a "responsive navigation component" is or why it took eight hours. Those realities make invoicing a developer's headache in ways a dog walker never deals with. This guide covers how to structure a web development invoice for each pricing model, how to keep scope creep from eating your margin, and how to set terms that keep cash actually moving while clients stay happy.
The Three Pricing Models and How to Invoice Each One
Developers price work three ways: hourly, fixed-price, or milestone-based. Each one wants a different invoice, and using the wrong shape for the model is how you end up explaining a $15,000 surprise to a panicked client.
Hourly Billing
Hourly looks like the easy one: track hours, multiply by rate, send the total. The simplicity is also the trap.
Clients paying by the hour want to see where every hour went. A single line reading "Development work, 40 hours, $6,000" reads like a black box and invites a fight. Break the time into categories that mean something.
A solid hourly invoice for a web project might list: 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.
That last line is doing quiet work. Splitting revisions out from original build shows the client how much of their budget is going to changes they asked for after the fact. A few projects in, you will have hard data to point at when you renegotiate scope on the next one.
Invoice hourly projects weekly or every two weeks. Do not save it all for the end. Small, frequent invoices stay digestible, keep your cash flow steady, and head off the moment when a client opens one giant bill and has a heart attack over a number they were never warned about.
Fixed-Price Billing
Fixed-price gives the client a known number before anyone starts. The flip side, and it lands entirely on you, is that if the build runs long you eat the difference.
The invoicing move here is to slice the total into payments pinned to phases. The everyday split is 50% upfront as a deposit before work begins and 50% on delivery and approval.
On bigger jobs I prefer a three-way split: 40% deposit, 30% at the midpoint (usually once the design phase wraps or the front end is standing), and 30% on final delivery. It protects both sides. The client is not handing over the full sum before seeing anything real, and you are not three months deep before a dime arrives.
Your deposit invoice should say plainly what the deposit covers, which deliverables the total price includes, and what happens when scope shifts. That last part is not optional in web work. Scope always shifts.
Milestone-Based Billing
Milestone billing fits web projects more naturally than anything else. You name specific deliverables, price each one, and invoice as each is finished.
A typical milestone map for a website build: 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 names the deliverable, confirms it shipped and got approved, and states the terms. The real payoff is the checkpoints. When a client goes quiet or stops paying, you stop at a clean seam instead of halfway through wiring up authentication.
Protecting Yourself from Scope Creep
Scope creep is the number one invoicing problem in web development, full stop. The client asks for "just one more thing," then another, and your fixed-price job has quietly grown by a third with no extra money attached.
Your invoice is the first wall you put up against it. Three ways to use it:
Pin down the original scope in writing. Before the first invoice goes out, your contract or proposal should list every deliverable: pages, features, integrations, which browsers, which devices, all of it. Your invoice references that scope document by name.
Give out-of-scope work its own line. When a request lands outside the original scope, do not quietly swallow it. Send a change order or a supplemental invoice that labels the work for what it is: "Additional, not included in original scope."
Count the revision rounds. Most web contracts bake in one or two rounds, after which revisions bill hourly. Put the round number right on the invoice ("revision round 2 of 2") so nobody is surprised when round three carries a charge.
Payment Terms That Work for Developers
The standard freelance Net 30 does not map cleanly onto web work, and here is the math that bites you: web projects run for weeks or months, so if you invoice on completion with Net 30 terms, you can be 60 to 90 days out from the day you started before the money lands. That is a long time to float a client.
Better setups: Net 14 on milestone invoices, since the work is already done and approved and shorter terms are fair; deposit invoices due on receipt, because you do not write a line of code until the deposit clears; and final payment due within 7 days of launch, while the relief of going live is still fresh.
A late-payment clause in your contract helps too. Something like "Invoices not paid within 15 days of the due date incur a 1.5% monthly late fee" gives the client a concrete reason to pay on time. Whether you ever enforce it is your call, but having it in writing changes the conversation.
What to Include on Every Web Development Invoice
On top of the standard pieces (your info, client info, invoice number, dates), a web development invoice should carry a few extras that head off confusion later.
Project name or reference number. Running two projects for the same client without this is how an invoice gets applied to the wrong budget.
Phase or milestone reference. "Invoice 3 of 5, front-end development complete" tells the client exactly where the project stands without a single follow-up email.
Hosting and domain renewals. If you manage hosting or domains, bill those on their own, away from development work. They are recurring and deserve a clear, separate label so they do not vanish into a one-time project total.
Third-party costs. Stock photos, premium plugins, an API subscription bought for the project: each gets its own line, marked as a pass-through cost so the client understands it is not part of your fee.
Intellectual property transfer. Plenty of web contracts hand IP to the client on final payment. Spell it out on the final invoice: "Full intellectual property rights transfer upon receipt of final payment." That line is leverage as much as it is paperwork.
Handling Retainer Clients
A lot of developers graduate from one-off projects into retainers, where the client pays a fixed monthly fee for a set block of hours or a defined slice of maintenance and updates. It is steadier income and a calmer way to run a business.
Retainer invoicing is the simple part: same invoice, first of every month. Include a short summary of what you did the prior month and any unused hours, if your contract lets hours roll over.
The whole game with retainers is being boringly predictable. Same day each month, same format, so reliable the client's finance team processes it on autopilot. Read our full guide to retainer invoicing.
Tools That Make Developer Invoicing Easier
Could you build your own invoicing system? Of course, you write software for a living. But your hours are worth more on client work than on reinventing a billing dashboard you will then have to maintain.
WaffleInvoice handles the mechanics so you stay in the editor. Spin up milestone invoices in under two minutes, set automatic reminders for overdue bills, take card and bank-transfer payments through Stripe, and watch every invoice move from sent to paid in one place.
The free plan covers up to 5 clients and 10 invoices per month. Pro adds recurring invoices for retainer clients, a client portal where they can pull up their own billing history, and automated follow-ups that chase late payments on your behalf. See pricing details.
Common Mistakes Web Developers Make When Invoicing
Not invoicing for discovery. Requirements gathering, technical research, and architecture planning are work, and skilled work at that. If discovery is free, you are subsidizing the project with your own time. Bill for it, or make it the first milestone.
Bundling hosting into development. Bury hosting inside the build invoice and the client never grasps what they are paying for, and worse, when the project ends and you are still hosting their site, there is no clean billing line for it. Separate hosting from day one.
Waiting until launch to invoice. On a three-month build, that is three months of unpaid labor riding on the client's good faith. Deposits and milestone payments keep cash arriving the whole way through.
Never defining "done." Your invoice says "website development, complete." The client is sure three more revision rounds are still coming. Define completion criteria in the contract and point back to them on the invoice.
Ignoring cross-border tax. A US developer billing a UK client (or the reverse) runs into rules that do not forgive guesswork. Talk to an accountant and make sure your invoices satisfy both jurisdictions. See our guide to international invoicing.
The Bottom Line
Web development invoicing is not complicated once you stop improvising. Pick the pricing model that fits the project, build invoices around clear line items and milestone references, document scope so creep has nowhere to hide, and bill all the way through instead of saving it for the end.
Your invoices say something about you. A clean, well-structured one tells the client you run a real business and expect to be treated like a professional, and clients tend to live up to whatever standard you set on paper.
Ready to make this easier? 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 FreeMore from the blog
How to Invoice as a Consultant (Retainers, Hourly & Project Billing)
A consultant guide to invoicing: hourly vs project vs retainer billing, what to include, payment terms that protect your cash flow, and getting paid online.
How to Invoice for Hourly Work: Tracking and Billing Time
A practical guide to tracking hours, writing hourly invoices, and getting paid without disputes. Includes what to log, how to present time, and free tools. Start free.
How to Invoice for Milestone-Based Projects: The Right Way
Milestone invoicing lets you get paid as you go on big projects. Learn how to structure milestones, what to put on the invoice, and how to handle disputes. Start free.
Compare WaffleInvoice head-to-head
Honest side-by-side comparisons against the tools most often mentioned alongside WaffleInvoice.
Comparison
WaffleInvoice vs FreshBooks
Side-by-side feature breakdown, pricing, and honest pros and cons.
Comparison
WaffleInvoice vs QuickBooks
Side-by-side feature breakdown, pricing, and honest pros and cons.
Comparison
WaffleInvoice vs Wave
Side-by-side feature breakdown, pricing, and honest pros and cons.
