Make Tutorial

Automate Shipping Label Generation with Make

Order comes in, label prints. Use Make's Iterator and Filter modules to process batches and route by carrier or region.

Vincent Ventalon
Vincent Ventalon

Why automate shipping labels?

Order comes in. Someone has to copy the address into the label maker, check for typos, add the tracking number, print it, tape it on. Next order. Copy, check, print, tape. 50 times a day. One wrong digit in the zip code and the package ends up in the wrong state.

Built-in labels from Shopify and ShipStation all look the same. No room for your logo, no custom fields for "FRAGILE" or picking instructions, no way to match your warehouse's workflow.

Make's visual scenario builder lets you connect your store to a label template — and its Iterator module means you can process entire order batches in one go. New orders come in, labels print automatically, with the exact layout your team needs.

1

Create your shipping label template

1.1 — Choose a template

Start with one of our pre-built shipping label templates or create your own:

  1. Go to Templates
  2. Filter by Shipping Label category
  3. Choose the format that matches your printer
  4. Click Use Template to add it to your dashboard

This tutorial uses the US Letter Shipping Label template — ideal for North American paper sizes.

Screenshot: US Letter shipping label template in the template gallery

Other option: A4 Shipping Label for international paper sizes.

1.2 — Understand the template structure

The template uses dynamic fields that get replaced with real data. Some fields you'll hardcode (your return address), others come from Make (recipient address, tracking number).

US Letter shipping label template in the visual editor showing dynamic fields and barcode

Hardcode once (your company)

  • sender_name — Your company name
  • sender_address_line1 — Return address
  • sender_city_state_zip — City, state, postal code

Edit these directly in the template — they stay the same for every label.

Dynamic from Make (per label)

  • recipient_name — Recipient name
  • recipient_address_line1 — Street address
  • recipient_address_line2 — Apt, suite (optional)
  • recipient_city_state_zip — City, state, zip
  • order_id — Order reference
  • tracking_number — Tracking code
  • weight, dimensions — Package info
  • shipping_date — Ship date

Map these from your e-commerce platform in Make.

Handling multi-line addresses

Most e-commerce platforms send addresses as separate fields (line 1, line 2, city, state, zip). Use Make's built-in text functions to combine them into the format your template expects.

Template fields:
{{recipient_address_line1}} — 123 Main Street
{{recipient_address_line2}} — Apt 4B (optional)
{{recipient_city_state_zip}} — Springfield, IL 62701

Learn more: Data binding · Expressions

1.3 — Configure the tracking barcode

The template includes a Code 128 barcode bound to {{tracking_number}}. Click on the barcode in the editor to configure it:

Screenshot: Barcode selected in the editor with properties panel showing Value, Format, and Show text options

1

Select the barcode

Click on the barcode in the canvas. Blue handles appear when selected.

2

Check the properties panel

The right panel shows: Value (the variable), Format (Code 128), Show text, and dimensions.

Tip: Code 128 works with most carriers (UPS, FedEx, USPS, DHL). Make sure there's enough white space around the barcode for reliable scanning.

1.4 — Test with the Preview tab

The Preview tab lets you test your template with sample data before building your Make scenario. The JSON panel on the right contains your test data, and the rendered label appears on the left in real-time.

View full JSON payload example
{
"sender_name": "Acme Fulfillment Co",
"sender_address_line1": "1234 Warehouse Blvd",
"sender_city_state_zip": "Los Angeles, CA 90001",
"recipient_name": "Sarah Johnson",
"recipient_address_line1": "742 Evergreen Terrace",
"recipient_address_line2": "Unit 2A",
"recipient_city_state_zip": "Springfield, IL 62701",
"order_id": "ORD-2026-78432",
"tracking_number": "1Z999AA10123456784",
"weight": "2.5 lbs",
"dimensions": "12 x 8 x 6 in",
"shipping_date": "April 3, 2026",
"remarks": "Handle with care"
}

Tip: The field names in the JSON (like recipient_name) are exactly what you'll map in Make's HTTP module body. Each key fills its matching {{placeholder}} in the template.

2

Build your Make scenario

The scenario is straightforward: order comes in, label goes out. Three modules, fully automatic:

Scenario flow:
Shopify (trigger) → HTTP module (TemplateFox API) → Gmail / Ezeep (deliver)

2.1 — Set up the trigger

Choose your e-commerce platform and trigger event:

S

Shopify

Module: Watch Orders or New Order

W

WooCommerce

Module: Watch Orders

B

BigCommerce

Module: Watch Orders

E

Etsy

Module: Watch Transactions

  1. Go to make.com and create a new scenario
  2. Search for your e-commerce platform module
  3. Select the Watch Orders trigger (or equivalent)
  4. Connect your store and run once to test with a recent order

Screenshot: Make scenario editor with Shopify trigger module configured

Shopify shipping address fields

After running the trigger, you'll see the shipping address broken down into separate fields. Map them to your template:

  • Shipping Address Namerecipient_name
  • Shipping Address Address1recipient_address_line1
  • City + Province + Zip → combine into recipient_city_state_zip

2.2 — Add the HTTP module

Add an HTTP module to call the TemplateFox API and generate the label PDF:

  1. Add a new module: 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: RawJSON
  6. Map your order fields from the trigger into the JSON body

Screenshot: HTTP module configuration with URL, headers, and JSON body mapping

View example request body
{
"template_id": "your-template-id",
"data": {
"recipient_name": {{1.shipping_address.name}},
"recipient_address_line1": {{1.shipping_address.address1}},
"recipient_city_state_zip": {{1.shipping_address.city}}, {{1.shipping_address.province}} {{1.shipping_address.zip}},
"order_id": {{1.name}},
"tracking_number": {{1.fulfillments[].tracking_number}},
"weight": {{1.total_weight}} g,
"shipping_date": {{formatDate(now; "MMMM D, YYYY")}}
}
}

Tip: Hardcode your return address (sender_* fields) directly in the template. Only map dynamic data like recipient address and order ID from the trigger module.

About tracking numbers: Your e-commerce platform may not have tracking numbers at order creation time. Options:

  • • Add an HTTP module to fetch tracking from your carrier API (ShipStation, EasyPost)
  • • Trigger the scenario on "Fulfillment Created" instead of "New Order"
  • • Generate labels without tracking, add it manually before printing

2.3 — Send or print the label

The HTTP module returns a pdf_url. Add one more module to deliver the label:

Email to warehouse

Add a Gmail or SMTP module to send the PDF to your fulfillment team. They print and attach the label to the package.

Save to Google Drive

Upload to a shared folder organized by date. Your team downloads and prints in batches.

Print automatically

Use the Ezeep or PrintNode module to send directly to your thermal printer (Zebra, DYMO, Brother).

Upload to S3

Use TemplateFox's built-in S3 integration to store labels in your own bucket for archival and compliance.

That's the basic setup. Order placed, label ready. Your warehouse team can start packing immediately — no data entry, no typos.

Screenshot: Final generated shipping label PDF with barcode and all data filled in

3

Process orders in bulk

The basic scenario handles one order at a time. But what if you need to generate labels for a batch of orders — say, all orders from the last hour or all unfulfilled orders? This is where Make's flow control modules shine.

3.1 — Iterator for batch orders

The Iterator module takes an array of items and processes them one at a time. Feed it a list of orders, and it generates one label per order automatically.

Batch scenario flow:
Schedule (every hour) → Shopify Search Orders → Iterator → HTTP (TemplateFox) → Gmail
  1. Replace the trigger with a Schedule module (e.g., every hour or daily at 8am)
  2. Add a Shopify → Search Orders module filtered by "unfulfilled"
  3. Add an Iterator module — point it at the orders array
  4. The Iterator feeds each order one-by-one to the HTTP module
  5. Each order gets its own label PDF

Screenshot: Make scenario with Schedule, Search Orders, Iterator, and HTTP modules connected

Why Iterator? Without it, Make would try to pass the entire orders array to one HTTP call. The Iterator unpacks the array so each order gets its own API call and its own label.

3.2 — Filter module for routing

The Filter module sits between two modules and only lets data through if conditions are met. Use it to:

Only fulfilled orders

Filter: fulfillment_status equals fulfilled. Skip orders still being packed — only generate labels when they're ready to ship.

Route by shipping method

Use a Router module with filters on each branch. Express orders go to one template (priority label), standard orders go to another.

Route by region

Filter by shipping_address.country. Domestic orders get one label format, international orders get a label with customs fields.

Routed scenario flow:
Trigger → Iterator → Router → [Filter: US] → HTTP (domestic label)
→ [Filter: International] → HTTP (customs label)

Screenshot: Make scenario with Router module splitting into domestic and international label branches

Supported platforms

Any e-commerce platform or order management system with a Make module or webhook support works. Here are the most popular:

S
Shopify
W
WooCommerce
B
BigCommerce
E
Etsy
A
Amazon
e
eBay
S
ShipStation
A
Airtable
G
Google Sheets

Related

Frequently asked questions

Which e-commerce platforms can I connect?

Any platform with a Make module or webhook support: Shopify, WooCommerce, BigCommerce, Etsy, Amazon, eBay, and hundreds more. If the platform doesn't have a native Make module, use the HTTP module with webhooks to receive order data.

Can I include tracking barcodes on the label?

Yes. Use the barcode component in your template. Bind it to the tracking_number field and it automatically generates a scannable Code 128 barcode from whatever tracking number your carrier provides.

What about international shipping?

International labels work the same way. Add additional fields to your template for customs declarations: HS codes, item descriptions, declared values, and country of origin. Map these from your order data or hardcode them for specific product types.

Can I handle multiple packages per order?

This is where Make really shines. Use the Iterator module to loop over each package in an order. The Iterator takes an array of packages and processes them one at a time, generating a separate label for each with its own tracking number and weight. No code required.

How do I print labels automatically?

Add an Ezeep or PrintNode module as the last step in your scenario. These services connect to your thermal printer (Zebra, DYMO, Brother) and print automatically when a new label PDF is generated. No manual downloading needed.

How much does shipping label generation cost?

TemplateFox offers 60 free PDFs per month. Paid plans start at $19/month for higher volume. View 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.