Free packing slip generator

List what is in the box and print a packing slip to put inside it. No store app, no sign-up, and no watermark.

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

Add your logo

PNG, JPG or WebP

1Your store
2Ship to
3Bill to
4Order details
5Items

Items in shipment 3

6Note

Live preview

Items in shipment 3

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

Your packing slip in three steps

  1. 10482

    Step 1

    Fill in your details

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

  2. 3

    Step 2

    Check the preview

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

  3. PDF

    packing-slip.pdf

    Step 3

    Download the PDF

    Download your packing slip, ready to send or print.

Anatomy of a packing slip

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

What a packing slip is for

A packing slip goes in the parcel and tells the customer what they should find inside. It helps the person packing the order check it against the list, and helps the person opening it spot anything missing.

It normally leaves out prices. That matters when an order is a gift or is shipped to someone other than the buyer. Showing ordered and shipped quantities side by side also explains a partial shipment without a support email.

Make every packing slip 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 packing slip 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": {
"store": {
"name": "Bloom & Co.",
"address": "210 Alder Street\nPortland, OR 97204"
},
"shipTo": {
"name": "Alex Carter",
"address": "742 Evergreen Terrace\nPortland, OR 97201"
},
"billTo": {
"name": "Alex Carter",
"address": "742 Evergreen Terrace\nPortland, OR 97201"
},
"orderNumber": "10482",
"shippingMethod": "USPS Priority Mail",
"note": "The tea sampler is backordered and will ship separately at no extra cost.",
"orderDate": "2026-11-01",
"shipDate": "2026-11-03",
"items": [
{
"sku": "BC-CND-014",
"name": "Soy candle, fig and cedar",
"ordered": 2,
"shipped": 2
},
{
"sku": "BC-MUG-002",
"name": "Stoneware mug, sage",
"ordered": 1,
"shipped": 1
},
{
"sku": "BC-TEA-120",
"name": "Loose-leaf tea sampler",
"ordered": 1,
"shipped": 0
}
],
"totalShipped": 3
},
"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:32px;\">\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;\">{{store.name}}</h1>\n <p style=\"margin:4px 0 0;font-size:12px;color:#6b7280;white-space:pre-line;\">{{store.address}}</p>\n </div>\n <div style=\"text-align:right;\">\n <h2 style=\"font-size:24px;letter-spacing:2px;margin:0;font-weight:800;color:#ea580c;\">PACKING SLIP</h2>\n <p style=\"margin:6px 0 0;font-size:13px;color:#6b7280;\">Order {{orderNumber}}</p>\n <p style=\"margin:2px 0 0;font-size:12px;color:#6b7280;\">Ordered {{formatDate orderDate}} &middot; Shipped {{formatDate shipDate}}</p>\n </div>\n </div>\n <div style=\"display:flex;gap:16px;margin-bottom:24px;\">\n <div style=\"flex:1;border:1px solid #e5e7eb;border-radius:8px;padding:14px;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Ship to</p>\n <p style=\"margin:0;font-weight:700;\">{{shipTo.name}}</p>\n <p style=\"margin:2px 0 0;font-size:13px;color:#6b7280;white-space:pre-line;\">{{shipTo.address}}</p>\n </div>\n <div style=\"flex:1;border:1px solid #e5e7eb;border-radius:8px;padding:14px;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Bill to</p>\n <p style=\"margin:0;font-weight:700;\">{{billTo.name}}</p>\n <p style=\"margin:2px 0 0;font-size:13px;color:#6b7280;white-space:pre-line;\">{{billTo.address}}</p>\n </div>\n <div style=\"width:170px;border:1px solid #e5e7eb;border-radius:8px;padding:14px;\">\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Shipping</p>\n <p style=\"margin:0;font-size:13px;font-weight:600;\">{{shippingMethod}}</p>\n </div>\n </div>\n <table style=\"width:100%;border-collapse:collapse;font-size:13px;\">\n <thead>\n <tr style=\"background:#fff7ed;text-align:left;\">\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;\">SKU</th>\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;\">Item</th>\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;text-align:center;\">Ordered</th>\n <th style=\"padding:10px 12px;border-bottom:1px solid #fed7aa;text-align:center;\">Shipped</th>\n </tr>\n </thead>\n <tbody>\n {{#each items}}\n <tr>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;font-family:monospace;color:#6b7280;\">{{sku}}</td>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;\">{{name}}</td>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;text-align:center;\">{{ordered}}</td>\n <td style=\"padding:10px 12px;border-bottom:1px solid #f3f4f6;text-align:center;font-weight:700;\">{{shipped}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n <p style=\"margin:14px 0 0;font-size:13px;text-align:right;\">Items in this shipment: <strong>{{totalShipped}}</strong></p>\n {{#if note}}<p style=\"margin:20px 0 0;font-size:13px;background:#f9fafb;border-left:3px solid #ea580c;padding:10px 14px;color:#374151;\">{{note}}</p>{{/if}}\n <div style=\"display:flex;gap:40px;margin-top:48px;font-size:12px;color:#6b7280;\">\n <span style=\"flex:1;border-top:1px solid #9ca3af;padding-top:4px;\">Packed by</span>\n <span style=\"flex:1;border-top:1px solid #9ca3af;padding-top:4px;\">Checked by</span>\n </div>\n</div>"
}' --output packing-slip.pdf
200 OKapplication/pdf · packing-slip.pdf

Questions, answered

The things people usually ask before they download.

What is the difference between a packing slip and an invoice?

An invoice asks for payment and shows prices. A packing slip lists what is in a shipment and usually has no prices at all.

What is the difference between a packing slip and a shipping label?

A shipping label goes on the outside of the parcel so the carrier can deliver it. A packing slip goes inside and is for the customer.

Should a packing slip show prices?

Usually not, and this template leaves them out. That keeps gift orders private and avoids confusion when a shipment only contains part of an order.

Is this packing slip 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 packing slips automatically?

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

Make this packing slip your own

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