Web development invoices break in a specific way. The work is invisible until it ships, the scope shifts as the client sees the site come together, and the whole fee often sits in one lump at the end. By the time you send the invoice, the client has forgotten the twelve extra requests they made in week three, and you are explaining why the number is higher than the estimate.
The fix is not a better collection email. It is a better invoice, sent at the right moments, with scope that is impossible to argue with. Here is how to bill web work so you get paid on time and without the friction.
Price the project, then decide how to bill it
First, know your number. Freelance web developers charge a wide range: US rates commonly run $50 to $150 per hour, with the median around $85, and junior developers starting lower while senior and specialized developers command $150 or more (Arc's freelance developer rate benchmarks track this by seniority). Rates have climbed in the last year on the back of demand for AI-integrated builds.
Whatever your rate, you have three ways to put it on an invoice:
- Hourly. Simple and transparent, but it caps your upside and turns every client question into a conversation about the clock.
- Fixed project fee. Best when scope is well defined. You quote a number, the client knows the number, and your efficiency is your reward.
- Milestone-based. A fixed fee split across delivery stages. This is the right default for anything that takes more than a week.
Most web projects should be billed on milestones. It matches how the work actually flows and it keeps cash coming in before the final handoff.
Break the scope into line items
The single biggest mistake is one line that reads "Website development: $6,000." It gives the client nothing to evaluate and gives you nothing to defend when they push back.
Break it out into what you actually did:
- Discovery and information architecture
- Design implementation (per template or per page)
- Front-end build
- Back-end and API work
- CMS setup and content integration
- Third-party integrations (payments, auth, analytics)
- Responsive and cross-browser QA
- Deployment and launch
Specificity is protection. "Front-end build" is vague. "Front-end build: 6 responsive templates from provided designs, React" is airtight. When a client questions the total, you walk them through the list instead of negotiating a lump sum. For everything that belongs on the document itself, use the Freelance Invoice Elements Checklist for 2026.
Structure milestones so you are never far ahead of payment
The goal of a milestone schedule is simple: never do a large amount of work you have not been paid for. A common structure for a fixed-fee build:
- 30% deposit before work begins
- 30% at design sign-off or staging handoff
- 40% on launch
Adjust the split to the project. For a long build, add a milestone. For a risky new client, weight more toward the front. The deposit is the important one. A client who pays 30% upfront is committed in a way a client who pays nothing is not, and it filters out the ones who were never going to pay. For the full case and the wording, see How to Send a Deposit Invoice.
Tie each milestone to a deliverable the client can see, not to a date. "Due on design approval" is enforceable. "Due June 15" invites "we are still reviewing."
Handle change requests with a line, not an argument
Scope creep is the tax on invisible work. The client asks for "just one more thing" six times, and none of it was in the quote.
Put the rule on the proposal and the invoice: "This project includes the scope listed above. Additional features or change requests outside this scope are billed at $[rate] per hour and quoted before work begins." Now the extra requests have a home. You are not saying no. You are saying yes, and here is what it costs, which is the professional answer.
When you do bill for out-of-scope work, line-item it separately so the client sees exactly what the extra spend bought. Ambiguity is what causes disputes, and clarity is what prevents them.
Set terms that get you paid faster
Net 30 is the template default and it is too long for most freelance work. Net 15 keeps cash flowing without being aggressive. State the term and the actual due date on the invoice, not just "Net 15," because the specific date removes the calendar math and the ambiguity. Add your late fee policy up front so you never have to invent it after the fact. The full breakdown of which term to use and when lives in Freelance Payment Terms Explained.
Send it the day you ship
The strongest predictor of how fast you get paid is how fast you send the invoice. Bill the same day you hit the milestone or launch the site, while the value is fresh and the client is happy. An invoice that sits in your drafts for a week is a payment that lands a week late.
This is where a tool earns its keep. With Nvoyce, you describe the milestone and the line items and the AI drafts the invoice in under a minute, with a Stripe payment link attached so the client can pay by card the moment they open it. If it goes past due, Payme surfaces it and drafts the follow-up for you. If you are weighing tools, The Best AI Invoice Generator for Freelancers in 2026 compares the options.
Related Reading
- How to Invoice as a Freelance Graphic Designer
- How to Invoice as a Freelance Video Editor: Rates, Revisions, and Licensing Explained
- Freelance Payment Terms Explained: Which to Use and How to Actually Get Paid
FAQ
How much should I charge as a freelance web developer?
US freelance web developers commonly charge $50 to $150 per hour, with the median around $85. Junior developers start lower, often $30 to $60, while senior and specialized developers charge $150 or more. For fixed-fee projects, estimate your hours, multiply by your rate, and add a buffer for revisions and integration surprises.
Should web developers bill hourly or with a fixed price?
Fixed price or milestones for well-defined projects, hourly for open-ended or maintenance work. Fixed pricing rewards your efficiency and gives the client a number they can approve. Hourly is fairer when the scope genuinely cannot be pinned down, but it caps your upside and invites clock-watching.
How do I structure milestone payments for a web project?
A common split is 30% deposit before work begins, 30% at design or staging sign-off, and 40% on launch. Tie each milestone to a visible deliverable rather than a calendar date so payment is triggered by progress the client can see. Adjust the weighting toward the front for new or higher-risk clients.
What should a freelance web developer's invoice include?
Your business details, the client's billing contact, a unique invoice number, itemized line items for each phase of work, your rate or fixed fee per item, any deposit already paid shown as a credit, payment terms with a specific due date, a late fee policy, and a payment link. A per-line breakdown is what prevents disputes over the total.
Should I take a deposit before starting a web project?
Yes, on anything beyond a small same-day task. A 25 to 50% deposit confirms the client is committed, protects the time you invest before launch, and filters out clients who were never going to pay. A client who refuses any deposit on a significant build is often telling you how the rest of the engagement will go.
When should I send a web development invoice?
The same day you hit the milestone or launch the site. The longer you wait, the longer you get paid, and the more the client's memory of the value fades. Sending immediately, while the work is fresh and the relationship is warm, is the cheapest way to shorten your days-to-paid.
Stop building invoices by hand between builds. Describe the milestone, and Nvoyce drafts the itemized invoice, attaches a Stripe payment link, and follows up if the client goes quiet. Try it free for 7 days at nvoyce.ai. No credit card required.