February 2026
How to Invoice for Web Development: Projects, Milestones, and Maintenance
Web development projects come in all shapes and sizes, from a simple landing page built in a weekend to a complex web application that takes months to deliver. Regardless of the scope, how you invoice determines how smoothly the project runs financially, how you manage client expectations, and ultimately how reliably you get paid. A vague or poorly structured invoice creates friction, delays payment, and can damage the client relationship.
This guide covers the invoicing strategies that experienced web developers use to keep cash flow healthy, protect themselves from scope creep, and build long-term client relationships.
What Every Web Development Invoice Should Include
Before choosing a billing model, make sure every invoice you send contains these essential elements:
- Your business details — name, address, email, phone number, and tax or company registration number if applicable
- Client details — company name, billing address, and the name of your point of contact
- Invoice number — use a sequential system like WEB-2026-001 for clean record-keeping
- Invoice date and payment due date — always include both
- Project name or reference — e.g., "E-commerce Website Redesign for Acme Ltd"
- Itemised line items — every task, deliverable, or time entry broken out with its cost
- Subtotal, tax, and total — including VAT or sales tax where applicable
- Payment methods — bank transfer details, card payment link, or other accepted methods
- Payment terms — Net 14, Net 30, or milestone-based
- Late payment terms — what happens if the invoice is not paid on time
Fixed-Price vs Hourly Billing: Choosing the Right Model
The billing model you choose affects everything about your invoicing. Both have advantages, and many experienced developers use a combination depending on the project type.
Hourly Billing
Hourly billing is transparent and flexible. You charge for the actual time spent, and the client pays for exactly what they get. Your invoice line items show hours and rates:
- Frontend development (React components) — 24 hours at $120/hr = $2,880
- API integration and backend logic — 16 hours at $120/hr = $1,920
- Responsive design and cross-browser testing — 8 hours at $120/hr = $960
- Bug fixes and QA — 6 hours at $120/hr = $720
Hourly billing works best for projects where the scope is uncertain, for ongoing work without a defined endpoint, or when the client wants granular visibility into where the time is going. The downside is that it penalises efficiency: the faster you work, the less you earn. It can also lead to uncomfortable conversations about how long specific tasks took.
Pro tip: If billing hourly, use a time-tracking tool like Toggl, Harvest, or Clockify and attach a time report to your invoice. This gives the client full transparency and heads off disputes before they start.
Fixed-Price Billing
With fixed-price billing, you quote a total for the project based on a defined scope. Your invoice focuses on deliverables rather than time:
- Homepage design and development — $3,200
- Product listing pages (up to 50 products) — $2,400
- Shopping cart and checkout flow — $2,800
- User account and order history — $1,600
- CMS integration (content management for blog) — $1,200
- Deployment and launch support — $800
Fixed-price billing rewards expertise and efficiency. If you can build something in 20 hours that you quoted for 40, your effective rate doubles. It also gives clients budget certainty, which many businesses prefer. The risk is scope creep: if the project grows beyond the original specification, your profit disappears unless you have strong change request processes in place.
Most freelance web developers start with hourly billing and transition to fixed-price as they gain experience estimating project scope accurately.
Milestone-Based Invoicing
For projects lasting more than a few weeks, milestone-based invoicing is the gold standard. It breaks the project into defined phases, with a payment due at the completion of each milestone. This protects both parties: the developer gets paid incrementally as work progresses, and the client only pays for completed work.
A typical milestone structure for a web development project looks like this:
- Project kickoff / deposit (20-30%) — due upon signing the contract, before any work begins. This covers your initial planning, discovery, and environment setup.
- Design approval (20-25%) — due when the client signs off on wireframes and visual designs. This milestone ensures design is locked before development begins.
- Development complete (25-30%) — due when the core build is finished and deployed to a staging environment for client review.
- Launch and handover (20-25%) — due when the site goes live and all final deliverables are handed over.
Each milestone gets its own invoice. Label them clearly:
- Invoice WEB-2026-015: Milestone 1 — Project Deposit (25% of $12,000) — $3,000
- Invoice WEB-2026-016: Milestone 2 — Design Approval (25% of $12,000) — $3,000
- Invoice WEB-2026-017: Milestone 3 — Development Complete (30% of $12,000) — $3,600
- Invoice WEB-2026-018: Milestone 4 — Launch and Handover (20% of $12,000) — $2,400
Critical rule: Never begin the next phase until the current milestone invoice is paid. This is your leverage, and it prevents you from getting deep into a project with an unpaying client.
Handling Scope Creep on Invoices
Scope creep is the single biggest threat to profitability in web development. The client asks for "just one more feature," the project grows by 30%, and if you are on a fixed-price contract, you absorb the cost. Your invoicing process is your primary defence.
Here is how to handle it:
- Define scope clearly in your contract — list exactly what is included and, critically, what is not included. Reference this scope document in every invoice.
- Use change request invoices — when the client requests something outside the original scope, issue a separate change request estimate before doing the work. Once approved, invoice it separately with a clear label: "Change Request CR-003: Add user reviews feature — $1,800."
- Track out-of-scope work — if you are on hourly billing and the scope expands, flag it in your time tracking and on your invoice. Group the original scope items and the additional items separately so the client can see the impact of their changes.
- Set a change request threshold — some developers include a small buffer in their contracts (e.g., up to 2 hours of minor adjustments included). Anything beyond that triggers a change request. This avoids invoicing for every five-minute tweak while still protecting you from significant scope additions.
Maintenance and Hosting Invoices
The launch is not the end of the project. Ongoing maintenance, hosting, and support represent a reliable recurring revenue stream for web developers. Invoice these separately from the build project:
Monthly Maintenance Retainer
A maintenance retainer gives the client a set number of hours per month for updates, bug fixes, and small improvements. Your monthly invoice might look like this:
- Monthly maintenance retainer (February 2026) — 5 hours included — $600
- Additional maintenance hours used — 2 hours at $130/hr = $260
- WordPress core and plugin updates — included in retainer
- Security monitoring and uptime checks — included in retainer
Clearly state what the retainer covers and what costs extra. Common retainer inclusions are CMS updates, security patches, minor content changes, performance monitoring, and regular backups. Feature development, redesigns, and major changes should be quoted separately.
Hosting and Infrastructure
If you manage hosting on behalf of your client, invoice for it monthly or annually:
- Managed hosting (VPS, SSL, CDN, daily backups) — $75/month
- Domain renewal (acmeltd.com, annual) — $15
- Email hosting (5 mailboxes) — $25/month
Many developers mark up hosting costs by 20-50% to cover the time spent managing the infrastructure. This is standard practice. Alternatively, you can pass hosting costs through at cost and charge a separate management fee.
Retainer Agreements for Ongoing Work
Beyond maintenance, some clients need ongoing development work on a regular basis. A retainer agreement guarantees them a set number of hours per month at a slightly discounted rate, while giving you predictable recurring income.
A retainer invoice should include:
- Development retainer (March 2026) — 20 hours at $110/hr = $2,200
- Hours used this month: 18 of 20
- Unused hours: 2 (non-rollover per agreement)
Key retainer terms to establish upfront and reference on invoices:
- Rollover policy — do unused hours carry over to the next month? Most developers say no, as rollover creates scheduling complications.
- Overage rate — what happens if the client uses more than their allotted hours? Typically, additional hours are billed at your standard (non-discounted) rate.
- Minimum commitment — retainers usually require a 3-6 month minimum commitment. This gives both parties stability.
- Billing cycle — retainers are typically invoiced at the start of each month, payable on receipt or within 7 days.
Itemising Development Tasks on Invoices
How much detail should you include on a web development invoice? The answer depends on your billing model, but in general, more detail is better. Detailed invoices demonstrate value, reduce disputes, and help clients understand what they are paying for.
For hourly invoices, group related tasks and show time for each:
- User authentication system (login, registration, password reset) — 12 hours
- Dashboard UI development — 8 hours
- REST API endpoints (CRUD operations) — 10 hours
- Third-party payment integration (Stripe) — 6 hours
- Automated testing and QA — 4 hours
For fixed-price invoices, list each deliverable with its value:
- Custom WordPress theme development — $4,500
- WooCommerce store setup and configuration — $2,000
- Custom product filtering and search — $1,500
- Performance optimisation (Core Web Vitals) — $800
- SEO technical setup (meta tags, sitemap, schema) — $600
Avoid vague line items like "Web development work — $8,000." This tells the client nothing about the value delivered and makes it easy for them to question the total.
Handling Revisions and Change Requests
Every web development project involves some back-and-forth. Your contract and invoicing should distinguish between feedback within scope and out-of-scope change requests:
- Within scope — your original quote typically includes 1-2 rounds of revisions per milestone. Do not invoice separately for these, but track them so you know where you stand.
- Out of scope — new features, significant design changes, or additional pages beyond the original specification require a change request. Estimate the additional work, get written approval, complete it, and invoice separately.
- Grey area tweaks — small requests that take 15-30 minutes each can accumulate. Build a small buffer into your project price (5-10% of the total) to absorb these. Once the buffer is exhausted, communicate to the client that further changes will be invoiced.
On your invoice, label change requests distinctly from the original project scope. This makes it clear that the additional costs are the result of scope changes, not cost overruns on your part.
Deposit Structures for Web Development
Deposits are essential for web development projects. They demonstrate client commitment, improve your cash flow, and reduce the risk of starting a large project that never gets paid for. Here are common deposit structures by project size:
- Small projects (under $2,000) — 50% upfront, 50% on completion. Simple and effective.
- Medium projects ($2,000-$10,000) — 30% deposit, 30% at midpoint, 40% on launch. The midpoint payment ensures you are not carrying the full financial risk.
- Large projects ($10,000+) — milestone-based payments as described above, with 20-30% as an initial deposit.
Important: Do not deliver source code, grant production server access, or hand over CMS credentials until the final invoice is paid. These are your leverage. Deliver to a staging environment for review, and only push to production once payment clears.
Invoicing International Clients
Web development is inherently global. You may be based in London building a website for a client in New York or Sydney. International invoicing adds a few considerations:
- Currency — decide upfront whether to invoice in your currency or the client's. Invoicing in the client's currency is more convenient for them but exposes you to exchange rate fluctuations. Consider using a service like Wise or PayPal that supports multi-currency invoicing.
- VAT and tax — if you are VAT-registered in the UK and your client is outside the UK, services are generally zero-rated (0% VAT) for B2B clients, but you should still include the VAT line at 0% and note "Reverse charge applies" on the invoice. Consult an accountant for your specific situation.
- Payment methods — international bank transfers can be slow and expensive. Offer alternatives like Wise, PayPal, or Stripe payment links that reduce friction and fees for both parties.
- Payment terms — allow extra time for international payments. Net 14 domestically might become Net 21 or Net 30 for international clients to account for processing delays.
- Time zones — note on the invoice that dates are in your local timezone to avoid ambiguity about due dates.
Common Web Development Invoicing Mistakes
- Starting work without a deposit — this is the number one mistake. No deposit means you carry all the financial risk. Even trusted repeat clients should pay a deposit on new projects.
- Vague scope descriptions — "Build website: $8,000" invites scope creep. Break the project into specific deliverables and list each one.
- Not invoicing for change requests — if the client asks for features beyond the original scope and you do them for free, you are training them to expect free work. Issue change request invoices promptly.
- Waiting until project completion to invoice — on long projects, this creates cash flow problems and concentrates all your financial risk at the end. Use milestone invoicing instead.
- Forgetting to invoice for third-party costs — premium themes, plugins, stock images, API subscriptions, and hosting costs purchased on behalf of the client should all appear on your invoice.
- No late payment terms — without consequences for late payment, clients will deprioritise your invoice. Include a late fee clause (1.5-2% per month is standard) and reference it on the invoice.
- Mixing project and maintenance invoices — keep build project invoices separate from ongoing maintenance invoices. This avoids confusion and makes it easier for the client's accounting team to process them.
- Not keeping records — save a copy of every invoice, time log, and change request approval. You will need these for your taxes and for resolving any disputes.
Create Professional Web Development Invoices in Seconds
You build websites for a living. You should not be spending hours building your own invoices. InvoiceForge lets you generate polished, itemised web development invoices in under 30 seconds. Add your project milestones, development tasks, hosting fees, and change requests, then download a professional PDF that matches the quality of your code.
No sign-up required. No subscription. Just fast, professional invoices so you can get back to building great websites.