Free proforma invoice generator
Set out the price of a sale before it is final, and download a proforma invoice as a PDF. No sign-up, and no watermark.
- No sign-up
- No watermark
- 10 free PDFs a day
Live preview
Estimated total $3,331.60
Free for up to 10 PDFs a day. Includes a small “Made with PDFgen” line at the foot of each page.
Your proforma invoice in three steps
- PF-2026-112
Step 1
Fill in your details
Add your logo, the proforma invoice details and each item. The page updates as you type.
$3,331.60
Step 2
Check the preview
What you see is what you get, and totals are worked out for you.
- PDF
proforma-invoice.pdf
Step 3
Download the PDF
Download your proforma invoice, ready to send or print.
Anatomy of a proforma invoice
Everything that belongs on the page, and where it goes.
When to use a proforma invoice
A proforma invoice is a preview of the invoice a buyer will receive. It looks like an invoice but it is not one: it does not record a sale, and it does not ask for payment in the accounting sense. The final invoice follows once the goods or services are delivered.
Buyers often ask for one to get a purchase approved internally, to arrange a deposit, or to give customs and banks an idea of a shipment’s value before the commercial invoice exists. Rules for imports vary, so confirm with your freight forwarder or customs broker what they will accept.
Make every proforma invoice automatic
This request creates the document in the form above, and it updates as you type. Connect it to your app or order system and each proforma invoice makes itself.
- The same template, filled from your own data
- A PDF back from a single POST request
- No browsers or servers to run yourself
curl -X POST https://pdfgen.com/api/v1/generate \-H "Authorization: Bearer pdfg_live_xxx" \-H "Content-Type: application/json" \-d '{"data": {"seller": {"name": "Pacific Supply Co.","address": "500 Cannery Row\nMonterey, CA 93940"},"buyer": {"name": "Northwind Studio","address": "120 Market St\nSan Francisco, CA 94103"},"proformaNumber": "PF-2026-112","currency": "USD","taxRate": 8.5,"shipping": 120,"paymentTerms": "50% deposit on order, balance before dispatch.","issuedDate": "2026-11-03","validUntil": "2026-12-03","items": [{"description": "Standing desk (electric)","quantity": 4,"unitPrice": 480,"amount": 1920},{"description": "Ergonomic chair","quantity": 4,"unitPrice": 260,"amount": 1040}],"subtotal": 2960,"tax": 251.6,"total": 3331.6},"format": "A4","engine": "handlebars","html": "<div style=\"max-width:760px;margin:0 auto;padding:48px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#111827;\">\n <div style=\"display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:36px;\">\n <div>\n {{#if logo}}<img src=\"{{logo}}\" alt=\"\" style=\"display:block;max-width:200px;max-height:56px;margin:0 0 10px;\">{{/if}}\n <h1 style=\"font-size:22px;font-weight:800;margin:0;\">{{seller.name}}</h1>\n <p style=\"color:#6b7280;margin:6px 0 0;font-size:13px;white-space:pre-line;\">{{seller.address}}</p>\n </div>\n <div style=\"text-align:right;\">\n <h2 style=\"font-size:24px;letter-spacing:2px;color:#4338ca;margin:0;font-weight:800;\">PROFORMA INVOICE</h2>\n <p style=\"margin:8px 0 0;color:#6b7280;font-size:13px;\">#{{proformaNumber}}</p>\n <p style=\"margin:2px 0 0;color:#6b7280;font-size:13px;\">{{formatDate issuedDate}}</p>\n </div>\n </div>\n <div style=\"display:flex;justify-content:space-between;margin-bottom:28px;\">\n <div>\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Prepared for</p>\n <p style=\"margin:0;font-weight:600;\">{{buyer.name}}</p>\n <p style=\"margin:2px 0 0;color:#6b7280;font-size:13px;white-space:pre-line;\">{{buyer.address}}</p>\n </div>\n <div style=\"text-align:right;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Valid until</p>\n <p style=\"margin:0;font-weight:600;\">{{formatDate validUntil}}</p>\n </div>\n </div>\n <table style=\"width:100%;border-collapse:collapse;font-size:14px;line-height:inherit;\">\n <thead>\n <tr style=\"background:#eef2ff;text-align:left;\">\n <th style=\"padding:12px;border-bottom:1px solid #c7d2fe;\">Description</th>\n <th style=\"padding:12px;border-bottom:1px solid #c7d2fe;text-align:center;\">Qty</th>\n <th style=\"padding:12px;border-bottom:1px solid #c7d2fe;text-align:right;\">Unit</th>\n <th style=\"padding:12px;border-bottom:1px solid #c7d2fe;text-align:right;\">Amount</th>\n </tr>\n </thead>\n <tbody>\n {{#each items}}\n <tr>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;\">{{description}}</td>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;text-align:center;\">{{quantity}}</td>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;text-align:right;\">{{formatCurrency unitPrice ../currency}}</td>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;text-align:right;\">{{formatCurrency amount ../currency}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n <table style=\"font-size:14px;line-height:inherit;min-width:240px;margin:20px 0 0 auto;\">\n <tr><td style=\"padding:4px 0;color:#6b7280;\">Subtotal</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency subtotal currency}}</td></tr>\n {{#if taxRate}}<tr><td style=\"padding:4px 0;color:#6b7280;\">Tax ({{taxRate}}%)</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency tax currency}}</td></tr>{{/if}}\n {{#if shipping}}<tr><td style=\"padding:4px 0;color:#6b7280;\">Shipping</td><td style=\"padding:4px 0;text-align:right;\">{{formatCurrency shipping currency}}</td></tr>{{/if}}\n <tr><td style=\"padding:12px 0 0;font-weight:800;font-size:16px;\">Estimated total</td><td style=\"padding:12px 0 0;text-align:right;font-weight:800;font-size:16px;color:#4338ca;\">{{formatCurrency total currency}}</td></tr>\n </table>\n {{#if paymentTerms}}\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;margin-top:32px;\">Payment terms</p>\n <p style=\"margin:0;font-size:13px;color:#374151;white-space:pre-line;\">{{paymentTerms}}</p>\n {{/if}}\n <p style=\"margin-top:40px;font-size:12px;color:#9ca3af;border-top:1px solid #f3f4f6;padding-top:16px;\">This proforma invoice is an estimate. It is not a tax invoice or a demand for payment.</p>\n</div>"}' --output proforma-invoice.pdf
Questions, answered
The things people usually ask before they download.
Is a proforma invoice a legal invoice?
No. It is an estimate and is not a tax invoice, so do not record it as a sale or claim tax on it. This template says so at the bottom of the page.
What is the difference between a proforma invoice and a quote?
A quote offers a price for a buyer to consider. A proforma usually comes later, once they intend to buy, and looks close to the final invoice.
Can a buyer pay against a proforma invoice?
Yes, it is common to take a deposit or full prepayment against a proforma. Send a final invoice and a receipt once the sale is complete.
Is this proforma invoice generator really free?
Yes. You can create up to 10 PDFs a day without an account or a credit card.
Will there be a watermark on my PDF?
No. Your document stays clean, with one small “Made with PDFgen” line at the foot of each page.
Do you store what I enter?
No. Your details are sent to our server to create the PDF and are not saved. The form lives in your browser, so copy anything you want to keep before leaving the page.
Can I create proforma invoices automatically?
Yes. The API call further up this page produces the same proforma invoice from your own data, so your app or order system can create them without anyone filling in a form.
More free generators
See all toolsQuote generator
Price a job with line items, tax and an expiry date, and send it as a PDF.
Create onePurchase Order generator
Order from a supplier with vendor, ship-to and itemized costs in one numbered document.
Create onePacking Slip generator
List what is in the box, with ordered and shipped quantities and backorder notes.
Create one