99tools

Invoice Generator

runs in your browser

Make an invoice with line items, discount and GST, VAT or sales tax by rate, in any currency, and download it as a PDF or print it. Nothing is uploaded.

Invoice

From

Bill to

Lines

1 of 200
Line 1

Notes

Preview

Invoice

Number
INV-0001
DescriptionQtyUnit priceAmount
Lines with a description and a price appear here.
Subtotal
$0.00
Total
$0.00

about this tool

An invoice that adds up

Fill in who it is from and who it is for, the invoice number and date, the payment terms and the lines, and the invoice on the right updates as you go. Download PDF saves it as a file; Print sends the preview to the printer or to "Save as PDF".

Every figure is exact decimal arithmetic in the currency's smallest unit, never floating point, so three items at 0.10 come to 0.30 rather than 0.30000000000000004. Each line is quantity times unit price, less any discount, rounded half away from zero to the currency's decimals. The lines are then grouped by tax rate, and each rate is applied once to its group's total, so every tax row is exactly its rate of the amount beside it — the way EN 16931, the European e-invoicing standard, asks for it. The subtotal less the discount plus each tax row is the total, to the cent. The expected figures in the tests were worked out with Python's decimal module doing the same sums.

A quantity left blank is one, a rate left blank is no tax, and an empty line is simply left out. A line can be negative, for a deposit already paid or a credit; the discount comes off charges only, so a deposit is taken off in full.

Currencies, dates and numbers

The currency is a three-letter ISO 4217 code on the browser's own list, so a typo such as UDS is caught rather than printed. Each is written with its ISO 4217 decimals: two for USD, EUR and INR, none for JPY, three for KWD. The number format sets the grouping and the decimal mark, so an Indian invoice reads ₹1,23,456.78 and a German one 1.234,56 €. Unit prices keep the decimals they were typed with, so 0.125 per screw is not shown as 0.13. Prices are typed with a dot for decimals and no thousands separators; "1,234" is refused rather than guessed at.

The due date follows from the payment terms, Net 30 meaning thirty calendar days after the issue date, or can be set by hand. Dates are calendar dates, so no time zone can move them a day.

PDF or print

The PDF is drawn with the fonts every PDF reader has built in, which cover Western European text: $, € and £ are there, but ₹ and ₩ are not, nor the full-width ¥ the Japanese number format uses, and neither are Devanagari, Arabic or Chinese. When the currency symbol is missing the PDF writes the code instead (INR 1,83,351.60) and says so; when a name or a line uses a script the fonts lack, Download PDF says which characters and points you to Print, which draws any script your system has a font for. The PDF runs onto more pages when the lines do, repeating the column headings and numbering the pages. The details under each name are kept to twelve lines, so both fit the top of the first page.

Reusing your details

Nothing is stored: close the tab and the invoice is gone. Save details downloads a small file holding the whole invoice, with the issue date as it stood, and Open saved reads it back; a file from anywhere else is refused without touching what is on screen. Next invoice keeps everything except the number, the dates and the lines: it counts the number up (INV-0009 becomes INV-0010) and starts with today's date and one empty line. Copy as text gives a plain version for an email, once every line reads.

Limits

This is a layout and a calculator, not tax advice: it does not know any country's invoicing rules or work out which rate applies. It does not split GST into CGST and SGST, and Indian GST invoices also need HSN or SAC codes and the place of supply, which can go in the line descriptions and the details. Up to 200 lines per invoice. For a payment schedule on a loan rather than a bill, the EMI calculator builds one. Nothing is uploaded or sent anywhere.

questions

How is the tax worked out?
Once per rate. Each line is quantity times unit price, less any discount, rounded to the currency’s smallest unit; the lines are grouped by tax rate and each rate is applied to its group’s total, rounded once, so every tax row is exactly its rate of the amount beside it, as the European e-invoicing standard EN 16931 has it. Rounding is half away from zero, and every figure is exact decimal arithmetic, never floating point. The discount comes off charges only, not off a deposit or credit line.
Why does the PDF say INR instead of ₹?
The PDF is drawn with the fonts every PDF reader has built in, and those cover Western European text only: they have $, € and £ but no ₹ or ₩, and no Devanagari, Arabic or Chinese. So the tool writes the currency code instead of a symbol it cannot draw, and tells you. Print uses your own system fonts instead, so choosing “Save as PDF” in the print dialog keeps ₹ and any script your system has a font for.
Is my invoice stored anywhere?
No. Everything is worked out and drawn in your browser, and nothing is sent or kept: close the tab and it is gone. To reuse your details, Save details downloads a small file with the invoice in it, and Open saved reads it back. Next invoice keeps everything except the number, dates and lines, and counts the invoice number up.
What does an invoice need to include?
It depends on where you are, but usually: a unique invoice number, the date, your name and address, the client’s, a description of what was supplied, quantities and prices, and the total. VAT and GST invoices also need your tax registration number and often the client’s, plus the tax at each rate; Indian GST invoices also need HSN or SAC codes and the place of supply, and CGST and SGST shown separately, which this tool does not split. Put registration numbers in the details under each name. It does not check any country’s rules.
Which currencies and number formats does it support?
Any ISO 4217 currency code on the browser’s own list, so a typo is caught, each written with its ISO 4217 decimals: two for US dollars and Indian rupees, none for yen, three for Kuwaiti dinar. The number format sets the grouping and decimal mark, so India’s 1,23,456.78 and Germany’s 1.234,56 both come out as their readers expect.