How to Make an Invoice for Web Development Work
A practical walkthrough of building a web development invoice that clients actually pay: milestones vs hours, what to put in each line item, and a worked example with real numbers.
By Invoala Editorial Team · Published 2026-10-08
A web development invoice is a document that states who did the work, for which project and stage, and what is now owed — with enough detail that the client's accounts team can pay it without emailing you a follow-up question. To make one, open a template or a form-based generator, add your business details, the client's billing details, a unique invoice number, the line items (milestones, hours or a mix), any tax, your payment terms and the accepted payment methods, then send it as a PDF. The whole thing takes about ten minutes once you have the details saved.
This guide covers what to actually put in each field for web development work, where developers commonly get it wrong, and how to produce the PDF quickly.
What goes on a web development invoice
Web development invoices are ordinary invoices, but the line items carry more weight than in, say, a product sale, because clients often need to match the cost to a project code or a signed scope of work.
Each invoice typically includes:
- Your details — trading name, address, email, and any tax or company registration number you are required to show.
- Client's billing details — the legal entity name and the address their accounts team uses, which is sometimes different from the person you talk to.
- Invoice number — sequential, unique, never reused. `2024-017` or `INV-0042` both work; just pick one pattern and keep it.
- Invoice date and due date — state the due date explicitly instead of writing only "Net 14".
- Line items — a short description, quantity, unit price, and the line total.
- Subtotal, tax, total — and the currency, written as a code (`USD`, `GBP`, `EUR`) as well as a symbol.
- Payment instructions — bank details, payment link, or however you want to be paid.
- Payment terms — for example late-fee or interest terms, if you have them in your contract.
What is legally required varies by country, and whether you must charge tax depends on your registration status and sometimes on where the client is based. Check the official tax authority for your jurisdiction rather than copying another freelancer's invoice.
Photo by Christopher Gower on Unsplash
Milestones vs hourly: how to bill web development
Most web development billing falls into three shapes.
Fixed fee with milestones. You quote a total for a defined scope — discovery, build, launch, for example — and invoice a percentage as each stage completes. A common split is 30% upfront, 40% at build completion, 30% at launch, though the split should follow the risk, not a formula. Milestones work well when the scope is genuinely fixed.
Hourly or daily rate. Used for maintenance retainers, support, and any project where the client keeps changing the brief. The invoice needs hours worked, the period covered, the rate, and ideally a short description per line — "theme bug fixes", "API integration", "client calls". Vague lines like "development" get questioned.
Retainer. A fixed monthly amount for an agreed capacity, invoiced on a recurring date. Simplest to administer, hardest to price the first time. Set a review date in the contract.
If you are unsure which to use, a free estimate generator helps you put a fixed number in front of the client before the work starts, which is usually easier than justifying an hourly total after the fact.
Ready to try it? Create a professional invoice in under two minutes with Invoala's free invoice generator, no sign-up and no watermark.
Descriptions that get invoices paid
The single most common cause of a delayed web development invoice is a line the client's finance team cannot map to anything. "Website work — $4,000" invites a query. "E-commerce checkout rebuild — Phase 2, milestone 2 of 3 per SOW dated 12 March — $4,000" does not.
Practical rules that hold up:
- Reference the document the client already approved: a statement of work, a quote number, or the email where they signed off the change.
- Keep change requests separate from the original scope. Mixing them into one line makes disputes harder to untangle.
- Use the client's own project name if they have one. It helps them route the invoice internally.
- Attach nothing the client did not ask for, but keep your own copies of timesheets and approvals.
If you are early in freelancing, the invoicing for freelancers guide walks through the basics of payment terms and records.
Photo by Andrew Neel on Unsplash
Currency, tax and cross-border clients
Two things trip up developers with overseas clients.
Currency. Invoice in the currency your contract states, not the one you would prefer. If the contract is silent, agreeing it in writing before the first invoice saves an argument. If your bank converts, decide in advance who absorbs the difference, and say so.
Tax. Cross-border treatment depends on your country, the client's country, whether the client is a business or a consumer, and whether you are registered for tax at all. Some jurisdictions expect a tax identification number or a reverse-charge note; others expect nothing. Because the rules change and vary so much, the reliable move is to check your own tax authority's guidance for services supplied to that client's location, and to keep the invoices consistent so your records reconcile later.
Sales tax, VAT or GST lines should be shown separately from your subtotal, with the rate stated. Do not bury tax inside your line items.
Example: a $2,400 web development invoice
Say you finished the second milestone of a small business website rebuild for a client in your own country, and you are registered for tax at 8%.
| Field | Value |
|---|---|
| Invoice number | 2024-014 |
| Invoice date | 4 June |
| Due date | 18 June (Net 14) |
| Line 1 | Website rebuild — milestone 2 of 3 (Build complete) per SOW dated 2 April — 1 × $2,000 = $2,000 |
| Line 2 | Additional work: contact form spam filtering, approved by email 28 May — 2 hours × $100 = $200 |
| Subtotal | $2,400 |
| Tax @ 8% | $192 |
| Total due | $2,592 |
| Payment | Bank transfer; reference `2024-014` |
Two details do most of the work here. The milestone line points at the SOW the client already signed, and the extra-work line points at an email approval. If the client queries the invoice, both answers are already on the page. The due date is explicit rather than implied, and the payment reference matches the invoice number so the money is easy to reconcile when it lands.
If your client is abroad, that 8% would typically be replaced by whatever your jurisdiction requires for that client's location — possibly zero, possibly a reverse-charge note. Check before you issue, not after.
How Invoala helps
For most freelancers the friction is not the content, it is the formatting. Here is the sequence using Invoala's free invoice generator:
1. Open the generator and fill the form. Your details, the client's billing details, invoice number, dates, line items and tax rate go into plain fields. No account, no install.
2. Add the line items exactly as above. Description, quantity, rate. The extra-work line and the milestone line live separately, which is what keeps the client's finance team from asking questions.
3. Set the tax and currency fields. Enter your rate as a number; the totals are computed for you.
4. Download the PDF. It is laid out for A4, the page size most clients outside North America expect, with no watermark across the middle of it.
5. Send it and keep the number. Reuse the same numbering pattern next time so your records stay in sequence. If you would rather start from a fixed layout, the free invoice templates are downloadable and match the same output.
Invoala's core generator is free and needs no sign-up. If a client goes quiet later, invoice payment tracking shows which invoices are paid, due or overdue, and automated reminders chase the ones that slip past the due date, so you are not manually counting days. There is an optional paid tier if you need more than the free tool covers — details are on the pricing page.
Sending it and getting paid
Send the invoice the day you deliver the milestone, not at the end of the month. The client's memory of the work is freshest then, and it removes a batch of month-end invoices competing for attention.
Keep a simple routine: send, confirm receipt, note the due date, follow up a few days after it passes. If nothing arrives by two weeks past due, escalate in writing rather than waiting longer. A short, factual follow-up — "Invoice 2024-014 for $2,592 was due 18 June and I have not seen it yet; could you confirm it is scheduled?" — is usually enough, and it is far easier to send when the invoice itself was clear about the amount, the scope and the date. Do that consistently and most late payments become a scheduling problem rather than a personal one.
Frequently asked questions
Should I bill web development by the hour or per project?
Fixed-fee milestones suit defined scopes like a website build or a landing page, because the client knows the total upfront. Hourly billing fits open-ended work such as maintenance, debugging or retainers where the amount of work is hard to predict. Many developers mix both: fixed price for the build, hourly for anything after launch.
What has to be on a web development invoice?
At minimum: your legal or trading name and contact details, the client's name and billing address, a unique invoice number, the invoice date, a description of the work, the amount, any tax charged, accepted payment methods and payment terms. What is legally required beyond that depends on your country and whether you are registered for tax, so check your local tax authority's guidance.
Do I need to charge tax on a web development invoice?
That depends on your country, your registration status and sometimes the client's location. Many places require registration only above a revenue threshold, and cross-border work is often treated differently from domestic work. Describe the rule as it applies to you by checking the official tax authority for your jurisdiction rather than copying another developer's invoice.
Can I make a web development invoice without paying for software?
Yes. A document editor or a free invoice generator will produce a valid PDF, and Invoala's invoice generator lets you fill a form, download an A4-accurate PDF and use it without signing up or getting a watermark. Paid tools mainly add recurring billing and bookkeeping features, which matter more once you have a steady volume of clients.
What should I do if the client does not pay my invoice?
Follow up in writing a few days after the due date, resend the invoice with the due date highlighted, then escalate on a fixed schedule you set in advance. Keeping the original scope and approval emails together makes the conversation easier. Tools that track which invoices are paid, due or overdue and send reminders remove the need to remember the dates yourself.
Put it into practice
Create a professional invoice in under two minutes — free, no sign-up.
Create an invoice