This article first appeared on Invoala.
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-017orINV-0042both 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.
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:
- 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.
- 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.
- Set the tax and currency fields. Enter your rate as a number; the totals are computed for you.
- 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.
- 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.
Originally published at How to Make an Invoice for Web Development Work. More guides at Invoala.
Top comments (0)