Free purchase order generator

Create a numbered purchase order for a supplier in a couple of minutes and download it as a PDF. No sign-up, and no watermark.

  • No sign-up
  • No watermark
  • 10 free PDFs a day
pdfgen.com/tools/purchase-order-generator

Add your logo

PNG, JPG or WebP

1Your company
2Vendor
3Ship to
4Order details
5Items

Order total $4,275.55

6Notes

Live preview

Order total $4,275.55

Free for up to 10 PDFs a day. Includes a small “Made with PDFgen” line at the foot of each page.

Your purchase order in three steps

  1. PO-2026-0451

    Step 1

    Fill in your details

    Add your logo, the purchase order details and each item. The page updates as you type.

  2. $4,275.55

    Step 2

    Check the preview

    What you see is what you get, and totals are worked out for you.

  3. PDF

    purchase-order.pdf

    Step 3

    Download the PDF

    Download your purchase order, ready to send or print.

Anatomy of a purchase order

Everything that belongs on the page, and where it goes.

Why use a purchase order

A purchase order is what a buyer sends to a supplier to say what they want, how many, at what price and where it should go. Once the supplier accepts it, both sides have the same record of the order.

The PO number is what makes it useful later. When it appears on the supplier’s invoice and packing slip, your team can match all three documents, confirm that what arrived is what was ordered, and pay the right amount. That check is often called three-way matching.

Make every purchase order 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 purchase order 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": {
"buyer": {
"name": "Northwind Studio",
"address": "120 Market St\nSan Francisco, CA 94103"
},
"vendor": {
"name": "Pacific Supply Co.",
"address": "500 Cannery Row\nMonterey, CA 93940"
},
"shipTo": {
"name": "Northwind Warehouse",
"address": "9 Dock Ave\nOakland, CA 94607"
},
"poNumber": "PO-2026-0451",
"currency": "USD",
"taxRate": 8.5,
"shipping": 120,
"notes": "Please quote this PO number on your invoice and packing slip.",
"date": "2026-11-03",
"items": [
{
"name": "Standing desk (electric)",
"quantity": 4,
"unitPrice": 480,
"lineTotal": 1920
},
{
"name": "Ergonomic chair",
"quantity": 4,
"unitPrice": 260,
"lineTotal": 1040
},
{
"name": "USB-C dock",
"quantity": 6,
"unitPrice": 145,
"lineTotal": 870
}
],
"subtotal": 3830,
"tax": 325.55,
"total": 4275.55
},
"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;\">{{buyer.name}}</h1>\n <p style=\"color:#6b7280;margin:6px 0 0;font-size:13px;white-space:pre-line;\">{{buyer.address}}</p>\n </div>\n <div style=\"text-align:right;\">\n <h2 style=\"font-size:24px;letter-spacing:2px;color:#b45309;margin:0;font-weight:800;\">PURCHASE ORDER</h2>\n <p style=\"margin:8px 0 0;color:#6b7280;font-size:13px;\">#{{poNumber}} &middot; {{formatDate date}}</p>\n </div>\n </div>\n <div style=\"display:flex;justify-content:space-between;margin-bottom:28px;font-size:13px;\">\n <div>\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#9ca3af;margin:0 0 6px;\">Vendor</p>\n <p style=\"margin:0;font-weight:600;\">{{vendor.name}}</p>\n <p style=\"margin:2px 0 0;color:#6b7280;white-space:pre-line;\">{{vendor.address}}</p>\n </div>\n <div style=\"text-align:right;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#9ca3af;margin:0 0 6px;\">Ship to</p>\n <p style=\"margin:0;font-weight:600;\">{{shipTo.name}}</p>\n <p style=\"margin:2px 0 0;color:#6b7280;white-space:pre-line;\">{{shipTo.address}}</p>\n </div>\n </div>\n <table style=\"width:100%;border-collapse:collapse;font-size:14px;\">\n <thead>\n <tr style=\"background:#fffbeb;text-align:left;\">\n <th style=\"padding:12px;border-bottom:1px solid #fef3c7;\">Item</th>\n <th style=\"padding:12px;border-bottom:1px solid #fef3c7;text-align:center;\">Qty</th>\n <th style=\"padding:12px;border-bottom:1px solid #fef3c7;text-align:right;\">Unit</th>\n <th style=\"padding:12px;border-bottom:1px solid #fef3c7;text-align:right;\">Total</th>\n </tr>\n </thead>\n <tbody>\n {{#each items}}\n <tr>\n <td style=\"padding:12px;border-bottom:1px solid #f3f4f6;\">{{name}}</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 lineTotal ../currency}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n {{#if subtotal}}\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 </table>\n {{/if}}\n <div style=\"display:flex;justify-content:flex-end;margin-top:20px;\">\n <div style=\"background:#b45309;color:#fff;padding:14px 24px;border-radius:8px;font-size:16px;font-weight:800;\">\n Order total: {{formatCurrency total currency}}\n </div>\n </div>\n {{#if notes}}<p style=\"margin-top:40px;font-size:12px;color:#6b7280;white-space:pre-line;\">{{notes}}</p>{{/if}}\n</div>"
}' --output purchase-order.pdf
200 OKapplication/pdf · purchase-order.pdf

Questions, answered

The things people usually ask before they download.

What is the difference between a purchase order and an invoice?

A purchase order comes from the buyer before delivery and says what they want to buy. An invoice comes from the seller and asks for payment. The invoice usually quotes the PO number so the two can be matched.

How should I number purchase orders?

Any system works as long as each number is unique and never reused. A year and a running number, such as PO-2026-0451, keeps them easy to sort and find.

Do small businesses need purchase orders?

They are not always required, but they help as soon as more than one person places orders or you need to track spending. A PO also gives you something to point to if a delivery or price is wrong.

Is this purchase order 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 purchase orders automatically?

Yes. The API call further up this page produces the same purchase order from your own data, so your app or order system can create them without anyone filling in a form.

Make this purchase order your own

Match the template to your brand, then create one for every order or customer with a single API call.