Make Tutorial

Automate Packing Slip Generation with Make

Process multi-item orders, handle partial fulfillment, and route to different templates — all with Make's visual scenario builder.

Vincent Ventalon
Vincent Ventalon

Why automate packing slips?

Manual packing slip creation wastes time and causes errors. Someone copies the order details from your e-commerce platform into a Word doc, updates the line items, prints it, and sticks it in the box. Multiply that by 50+ orders a day and it's a full-time job.

Mistakes creep in too — wrong quantities, missing items, outdated customer addresses. A single wrong packing slip means a return, a reshipping cost, and an unhappy customer.

Make's iteration and routing capabilities make this particularly easy to automate. Orders come in, packing slips generate and print — no manual intervention needed. We'll build the entire workflow in this guide.

1

Create your packing slip template

1.1 — Choose a template

Go to Templates and filter by Packing Slip. Pick one that fits your warehouse workflow. I'll use the Warehouse Wholesale B2B template for this tutorial.

Click Use Template to add it to your dashboard. You can customize fields, logo, and layout in the visual editor.

Warehouse Wholesale B2B packing slip template in the visual editor

Try it first: Free packing slip generator — paste your order data and see the output before automating.

1.2 — Understand the structure

A packing slip template has two types of fields: hardcoded values that stay the same across all slips, and dynamic values that change per order.

Hardcoded (set once)

  • company_name
  • company_address
  • company_logo
  • return_policy

Dynamic (per order)

  • order_id
  • order_date
  • customer_name
  • shipping_address
  • items[] (name, sku, qty, location)

Hardcoded fields are set directly in the template editor — you only configure them once. Dynamic fields use {{field_name}} placeholders that get replaced with real data from your Make scenario.

1.3 — Line items table

The most important part of a packing slip is the items table. It uses auto-expanding rows — pass an items array and the table grows to fit.

Template fields for each row:

FieldDescriptionExample
items.product_nameProduct display nameWireless Mouse Black
items.skuStock keeping unitWM-BLK-001
items.quantityNumber of units to pick2
items.bin_locationWarehouse bin for pickingA3-R2-S5

Tip: Adding bin_location to your packing slip dramatically speeds up warehouse picking. Staff go straight to the right shelf instead of searching.

1.4 — Test with the Preview tab

Before connecting Make, test your template with sample data. Open the template editor and paste this JSON into the Preview tab:

{
"order_id": "ORD-2024-1847",
"order_date": "2024-03-15",
"customer_name": "Sarah Mitchell",
"shipping_address": "742 Evergreen Terrace, Springfield, IL 62704",
"items": [
{
"product_name": "Wireless Mouse Black",
"sku": "WM-BLK-001",
"quantity": 2,
"bin_location": "A3-R2-S5"
},
{
"product_name": "USB-C Hub 7-Port",
"sku": "HUB-7P-SLV",
"quantity": 1,
"bin_location": "B1-R4-S2"
},
{
"product_name": "Laptop Stand Adjustable",
"sku": "LS-ADJ-ALU",
"quantity": 1,
"bin_location": "C2-R1-S8"
}
]
}

You should see a rendered packing slip with the three items listed in the table. If something looks off, adjust the template layout before moving to the Make scenario.

2

Build your Make scenario

2.1 — Set up the trigger

Go to make.com and create a new scenario. Add a trigger module for your e-commerce platform:

Shopify

Add ShopifyWatch Orders. Fires on every new order.

WooCommerce

Add WooCommerceWatch Orders. Filter by status "processing" to skip draft orders.

BigCommerce

Add BigCommerceNew Order. Includes line items by default.

Airtable / Google Sheets

Add Watch Records or Watch Rows for manual order management workflows.

Screenshot: Make scenario with Shopify trigger module

2.2 — Transform the order data

Your e-commerce platform sends data in its own format. You need to transform it into the structure your template expects. Use Make's built-in data transformer to map fields.

Example mapping from Shopify to TemplateFox:

Shopify fieldTemplate field
order.nameorder_id
order.created_atorder_date
order.shipping_address.namecustomer_name
order.shipping_address (full)shipping_address
order.line_items[]items[]

Tip: For the items array, use Make's map() function to transform each line item. Map line_items[].title to product_name, line_items[].sku to sku, etc.

2.3 — Add the HTTP module

Add an HTTP module to call the TemplateFox API:

  1. Add HTTPMake a request
  2. URL: https://api.pdftemplateapi.com/v1/pdf
  3. Method: POST
  4. Headers: x-api-key: your_api_key and Content-Type: application/json
  5. Body type: Raw, Content type: JSON
View example request body
{
"template_id": "your-template-id",
"data": {
"order_id": {{shopify.order.name}},
"order_date": {{formatDate(shopify.order.created_at; "YYYY-MM-DD")}},
"customer_name": {{shopify.order.shipping_address.name}},
"shipping_address": {{shopify.order.shipping_address.address1}},
"items": {{mapped_items_array}}
}
}

Screenshot: HTTP module configuration in Make with headers and JSON body

The response includes a pdf_url — use this in the next step to deliver the packing slip.

2.4 — Print or deliver

The HTTP module returns a PDF URL. Now add a final module to deliver the packing slip:

Auto-print

Add Ezeep or PrintNode module. Slip prints at the warehouse printer automatically.

Email to warehouse

Add Email or Gmail module. Attach the PDF and send to your fulfillment team.

Save to Google Drive

Add Google DriveUpload a File. Organize by date or order number.

Upload to S3

Add AWS S3Upload File. Store for archival or integration with your WMS.

Complete scenario flow:
Shopify → Transform Data → HTTP (TemplateFox) → Print / Email / Drive
3

Advanced: Conditional routing

This is where Make's visual builder really shines compared to other automation platforms. The Router module lets you split your scenario into multiple paths based on conditions.

3.1 — Route by order type

Use Make's Router module to send different order types to different templates. For example:

1

Standard orders

Use your default packing slip template with basic item list and shipping info.

2

Fragile items

Route to a template with handling instructions, fragile warnings, and special packing notes.

3

Gift orders

Route to a template that omits prices and includes a gift message.

Add a Router module after your trigger, then set up Filter conditions on each path. For example, check if any line item has a "fragile" tag or if the order includes a gift note.

Screenshot: Make Router module with three paths for standard, fragile, and gift orders

Why Router beats Zapier Paths

  • • Router supports unlimited paths (Zapier Paths is limited)
  • • Each path can have its own chain of modules
  • • Paths run in parallel, so there's no speed penalty
  • • Fallback path catches anything that doesn't match other conditions

3.2 — Handle multi-box shipments

When an order ships in multiple boxes, each box needs its own packing slip with only the items inside that box. Make's Iterator module handles this perfectly.

Here's the flow:

  1. Trigger fires on new order with multiple fulfillment groups
  2. Add an Iterator module that loops through each fulfillment group (box)
  3. Each iteration calls the HTTP module with only the items for that specific box
  4. Result: one packing slip per box, each with the correct items listed
Multi-box scenario flow:
Shopify → Iterator (per box) → Transform → HTTP (TemplateFox) → Print
// Each iteration sends one box's items:
{
"template_id": "your-template-id",
"data": {
"order_id": "ORD-2024-1847",
"box_number": "1 of 3",
"customer_name": "Sarah Mitchell",
"items": {{iterator.items}}
}
}

Tip: Add a box_number field (e.g., "1 of 3") to your template so warehouse staff know how many boxes to expect per order.

Supported platforms

Make connects to hundreds of apps. Here are the most common for packing slip workflows:

Shopify
WooCommerce
BigCommerce
Etsy
Amazon
eBay
ShipStation
Airtable
Google Sheets

Related

Frequently asked questions

Which e-commerce platforms work with this?

Make has native modules for Shopify, WooCommerce, BigCommerce, Etsy, Amazon Seller Central, and eBay. For platforms without a native module, use webhooks or connect through ShipStation, which aggregates orders from multiple channels.

Can I include line items on the packing slip?

Yes. Use an items array in your template data. The template's auto-repeating rows expand to fit any number of line items. Each row can show product name, SKU, quantity, and bin location using data binding like {{items.product_name}}.

How do I handle partial fulfillment?

Add a Filter module after your trigger to only process items with a fulfilled status. This way, if an order ships in batches, each fulfillment event generates a packing slip with only the items in that shipment.

Can I generate one slip per box for multi-box shipments?

Yes, and this is where Make excels. Use the Iterator module to loop through each box in the shipment. Each iteration generates a separate packing slip with only the items assigned to that box. The Iterator handles the splitting automatically.

Can I auto-print packing slips at the warehouse?

Yes. Add Ezeep or PrintNode as the final module in your scenario. The packing slip prints at your designated warehouse printer the moment an order comes in — no manual downloading needed.

What does packing slip automation cost?

You get 60 free PDFs per month. After that, plans start at $19/month. See pricing.

Automate your PDF generation

Complete documentation, no-code integrations, and a powerful API to help you generate PDFs at scale. Let us handle the boring stuff.