Orders and shipping

Shopify Packing Slip Template: How to Print and Customize It

How to print Shopify packing slips for one order or many, where the packing slip template lives, safe Liquid edits for logos, notes and gift orders, and how to preview and revert.

On this page

A Shopify packing slip is the printable list of what is inside a parcel: the items and quantities in that shipment, the shipping and billing addresses, SKUs and your store details. To print one, open the order from Orders and click Print > Print packing slips. To print several, select the orders in the Orders list and use the same Print menu. To change the packing slip template, go to Settings > Shipping and delivery, find the Documents section, click Packing slip template, edit the HTML and Liquid, preview the result, then click Save. Revert to default brings back Shopify's original template if an edit goes wrong.

The menu labels below follow Shopify's Help Center as checked on 26 October 2026. Shopify is gradually rolling out a newer document templates screen, so your Documents section may look one of two ways; this guide covers both.

What does a Shopify packing slip show?

Shopify's packing slip overview describes a packing slip as a document that lists the items in a package, along with the shipping and billing addresses, SKUs, quantities and other product details. Packers can use it as a checklist, and customers can use it to check the parcel and start a return. Packing slips have been built into Shopify since a September 2018 update, so you don't need an app to print one. Three things are worth knowing first:

  • One slip per shipment, not per order. The template lists the items in a shipment, so a split order needs a slip for each package. Shopify's printing guide says to print a separate packing slip for each shipment.
  • No prices. The packing slip variable reference lists no price fields, so the built-in slip is not an invoice.
  • Your store name, not a sender name. Shopify's shipping documents guide notes that packing slips show your store name by default, even if your labels use a custom sender name.

How do you print a packing slip for one order?

  1. From your Shopify admin, go to Orders.
  2. Click the order.
  3. Click Print, then Print packing slips.
  4. Print the slip, or save it as a PDF from the print dialog.

How do you print packing slips in bulk?

On desktop:

  1. Go to Orders.
  2. Select the checkbox next to each order that needs a slip.
  3. Click Print, then Print packing slips.
  4. If you have more than one location, select the fulfilling location and click Continue.
  5. Print or save the slips.

In the Shopify mobile app, on iPhone or Android, tap the Orders icon, press and hold an order to open the selection view, tick each order, then tap Print packing slips. Choose a location if asked. On Android the slips are generated as a PDF: tap Download, then Open, and print from there.

Shopify's packing slip guide doesn't state a maximum batch size.

How do you print packing slips with shipping labels?

If you buy shipping labels in Shopify, you can print labels, packing slips and customs forms in one pass. Documents printed one by one from an order page can't be combined, so start from Orders > Shipping labels: select the labels, click Print documents, select packing slips alongside the labels and customs forms with a page size for each, and click Continue to print. Collate pages by order keeps each order's documents together; clear it to group documents by type. Documents with different page sizes open in separate browser tabs, so allow pop-ups for your Shopify admin or nothing prints.

Our guide to Shopify shipping labels walks through this print flow step by step, along with buying, reprinting and voiding the labels themselves.

Where is the packing slip template in Shopify?

The template lives in your shipping settings, not in your theme:

  1. Go to Settings > Shipping and delivery.
  2. Scroll to the Documents section.
  3. Click Packing slip template. If Documents lists your document templates instead, click your packing slip template.

The second layout is Shopify's order document templates feature, which Shopify describes as early access and rolling out gradually. It changes a few things:

TaskSingle packing slip templateDocument templates (rolling out)
How many packing slipsOneSeveral; add one with Create document > Packing slip
Which one printsThe only templateThe one marked Set as default template for packing slips
Back up before editingCopy the code into a text fileDuplicate the template (save or discard unsaved changes first)
Other documentsPacking slip onlyInvoice, pick list and blank templates too
Size limitNot stated135,000 characters per template

If you have more than one packing slip template, edit the default one. Shopify's customizing guide explains that Print packing slips always uses it.

What should you do before editing the template?

Packing slips are written in Liquid, Shopify's template language, with HTML and CSS. If you have edited your Shopify notification emails, the syntax will look familiar. Two habits prevent most problems:

  • Back up first. Copy all the code into a text file, or use Duplicate if you have document templates. Shopify's document templates guide says Revert to default can't be undone, so a backup is the only way back to your version.
  • Use only documented variables. A variable that isn't in Shopify's list may print nothing.

The variables you'll use most, from the packing slip variable reference:

VariableWhat it prints
shop.name, shop.email, shop.domainStore name, email and domain
shop_address.summaryYour full store address
order.nameOrder number with any prefix or suffix, such as #1004
order.created_atOrder date and time; format it with the date filter
order.noteThe order note, if there is one
customer.first_name, customer.nameThe customer's first or full name
shipping_address.summary, billing_address.summaryFull ship-to and bill-to addresses
line_items_in_shipmentThe items in this shipment; loop over it as line_item
line_item.title, line_item.variant_title, line_item.skuProduct name, variant name and SKU
line_item.quantity, line_item.shipping_quantityQuantity ordered, and quantity in this shipment
line_item.propertiesLine item properties, such as a personalization or gift message
line_item.groupsThe bundle or add-on group an item belongs to
includes_all_line_items_in_ordertrue when this shipment holds every item in the order

What isn't in the list matters just as much: no prices, barcode, tracking number, shipping method, order tags or metafields. For those, you need a different document, compared below.

How do you customize a Shopify packing slip?

Each edit follows the same routine: open the template, make the change, check the preview against an order, then click Save. The common edits are below.

How do you add a logo to the packing slip?

Shopify's customizing guide gives three placements: instead of the store name, above it, or next to it. To replace the store name with your logo:

  1. Go to Content > Files, click Upload files and upload the logo. Note the exact file name, including the extension.
  2. In the template, find this code and delete it:
<p class="to-uppercase">
  {{ shop.name }}
</p>
  1. In its place, paste this line, replacing shop_logo.png with your file name:
{{ 'shop_logo.png' | file_img_url: 'small' | img_tag: 'Logo' }}
  1. Preview, then save.

To keep the store name and show the logo above it, leave the store name code alone and paste the logo line, followed by <br>, directly after <div class="shop-title">.

The file name is case sensitive: Shop_Logo.png and shop_logo.png are different files. The 'small' size returns an image up to 100 × 100 px, according to Shopify's file_img_url reference. If that looks too small, use a larger named size such as 'medium' (240 × 240 px). Images must be hosted by Shopify: the variable reference says images from other domains are filtered out. A simple, high-contrast logo stays readable on a black-and-white printer; our Shopify image sizes guide covers logo files.

How do you change the address or add a thank-you note?

The address under your store name comes from shop_address.summary. To print a different address on packing slips only, find {{ shop_address.summary }} (or the longer line built from shop_address.address1, shop_address.city and so on) and type your address in its place. To change the address everywhere in Shopify, edit it in Settings > General instead.

If returns go to a different address, or you want a thank-you line and a support contact in every box, add a short block near the bottom of the template:

<div class="returns">
  <p>Thank you for shopping with {{ shop.name }}.</p>
  <p><strong>Returns</strong></p>
  <p>Returns Dept, 123 Example Street, New York, NY 10000, United States</p>
  <p>Questions? Email {{ shop.email }} and quote order {{ order.name }}.</p>
</div>

Keep the wording in line with your refund and return policy, including the return window.

How do you show order notes and gift messages?

Gift messages reach Shopify in one of two places, depending on how your theme or app collects them.

If the customer types the message in the cart note, it is saved as the order note; Shopify's order notes guide explains that some themes call order notes cart notes. Your template may already print it, so search the code for order.note first. If it doesn't, add:

{% if order.note != blank %}
  <div class="notes">
    <p><strong>Note</strong></p>
    <p>{{ order.note }}</p>
  </div>
{% endif %}

If a product form or gift app saves the message on each item, it is a line item property. Add this inside the {% for line_item in line_items_in_shipment %} loop, below the product title:

{% for property in line_item.properties %}
  {% assign first_character = property.first | slice: 0 %}
  {% if property.last != blank and first_character != '_' %}
    <p>{{ property.first }}: {{ property.last }}</p>
  {% endif %}
{% endfor %}

Shopify's line_item reference says a property whose name starts with an underscore is hidden from customers at checkout, so apps use that prefix for internal data and the loop skips those. The packing slip variable reference lists line_item.properties but doesn't show how to loop over it, so preview an order that has properties before you save. Cart attributes, the custom cart fields other than the note, aren't in the packing slip variable list, so don't count on a gift message saved that way printing on the built-in slip.

How do you hide prices or the billing address on gift orders?

The built-in slip already prints no prices, so there is nothing to hide there. What can spoil a gift is the billing address, which names the buyer and shows where they live. Shopify says packing slips include billing addresses but doesn't publish the default code, so look for the lines that print billing_address details in your template, and wrap that whole block in a comment tag:

{% comment %}
  The existing billing address block stays here, unchanged.
{% endcomment %}

Liquid ignores everything between the two tags, so you can bring the block back later by deleting them. This hides the billing address on every slip, so only do it if that suits all your orders.

How do you show SKUs, shipped quantities and bundles?

Pickers work faster when each line shows the SKU and how many units go in this box. If your template doesn't show them already, add these lines inside the line item loop:

{% if line_item.sku != blank %}
  <p>SKU: {{ line_item.sku }}</p>
{% endif %}
<p>In this box: {{ line_item.shipping_quantity }} of {{ line_item.quantity }}</p>

The SKU line prints nothing for variants without a SKU. To fill those gaps, our free SKU generator builds SKUs from a pattern you choose and exports a CSV you can import.

Outside the loop, tell the customer when more is on the way:

{% unless includes_all_line_items_in_order %}
  <p>The rest of your order ships separately.</p>
{% endunless %}

For bundles and add-ons, line_item.groups names the group an item belongs to. group.deliverable? is true for an add-on and false for a bundle component, so you can label each line:

{% for group in line_item.groups %}
  {% if group.deliverable? %}
    <p>Add-on for: {{ group.title }}</p>
  {% else %}
    <p>Part of: {{ group.title }}</p>
  {% endif %}
{% endfor %}

Can you add barcodes or QR codes?

Shopify's packing slip variables include no barcode field or barcode filter, and images must come from Shopify's own CDN, so documented tools can't put a scannable barcode on the built-in slip. Print the SKU as text instead, and scan the barcodes on the products. If you need barcodes on the slip itself, use a printing app that supports them and test a scan first. Our guide to Shopify barcodes covers product barcodes, and our free barcode generator draws UPC, EAN and Code 128 barcodes and prints label sheets for your products.

How do you remove product images?

Product images use ink and can push long orders onto extra pages. Find the block that begins {% if line_item.image != blank %}, select everything down to its matching {% endif %}, and delete it, as Shopify's customizing guide shows.

How do you style the slip with your own CSS?

Small changes, such as a larger font, can go straight into the template's existing <style> block. For a full stylesheet, upload the CSS file to Content > Files, copy its URL and link it in the template. Shopify warns that CSS files hosted outside Shopify won't render properly on packing slips.

How do you test changes before saving?

Preview every change against real orders before you save it:

  1. Watch the template preview, which Shopify's customizing guide says updates as you edit. If your screen shows a Preview template button instead, click it. To test with a real order, click Preview, then search for and select an order.
  2. Check orders that stress the layout: one with many items, one with a note or gift message, a partly fulfilled order, a bundle, and a long international address.
  3. Print one page on the printer and paper you actually use. A screen preview won't show you where a page breaks.
  4. Click Save only when every test looks right.

How do you revert the packing slip to Shopify's default?

  1. Open the template from Settings > Shipping and delivery, in the Documents section.
  2. Click Revert to default.
  3. On the document templates screen, confirm in the dialog that appears.

Reverting replaces all your code with Shopify's original and can't be undone, so copy anything you want to keep first. On the document templates screen, the option appears only on a template that has been changed.

Packing slip, invoice or Order Printer: which do you need?

DocumentWhat it's forShows pricesWhere you make it
Packing slipGoes in the box; lists what is in this shipmentNo price variablesSettings > Shipping and delivery > Documents
InvoiceRecord of items and charges for the customerYesAn invoice template under Documents, where available, or the Shopify Order Printer app
Pick listTells staff what to collect from a locationNot among its column optionsA pick list template under Documents, set up with options instead of code
Shipping labelGoes on the outside and routes the parcelNoBought on the order; printed there or from Orders > Shipping labels
Customs formDeclares contents for international parcelsDeclared valuesPrinted with the label; every page goes on the outside of the parcel

Shopify Order Printer is a free app made by Shopify, and its App Store listing covers invoices, receipts and packing slips. Its templates use a wider set of Liquid variables, including line item prices (final_price), the variant barcode value and metafields on orders, customers, products, variants and locations, according to Shopify's Order Printer variable reference. To print, select orders and choose Print with Order Printer from the horizontal menu icon, or from More actions on a single order. Shopify's Order Printer printing guide sets a limit of 50 orders at a time. If you have document templates, invoice and blank templates use the same variables as Order Printer.

In short: use the built-in packing slip for a list of what's in the box, an invoice when the parcel needs prices or totals, and an Order Printer template, or a pick list with bin location or metafield columns, when you need extra data such as care instructions from Shopify metafields on paper.

Which paper and printer settings work for packing slips?

  • Choose the paper in the right place. In Orders > Shipping labels > Print documents, you pick thermal 4 × 6 in (A6), Letter or A4 for each document, and Shopify resizes documents to fit. When you print from an order page or the Orders list, the browser's print dialog and your printer settings decide the paper.
  • Check the print dialog. Confirm the paper size, scale and margins, and turn off the browser's headers and footers if the page URL and date print on the slip.
  • Collate when you pack by order. Collate pages by order keeps each label next to its slip, so nothing gets swapped between boxes.
  • Test before switching a 4 × 6 thermal printer to slips. Outside the Print documents flow, you can add a page rule to the template's <style> block, then shrink any fixed widths the template sets:
@page {
  size: 4in 6in;
  margin: 0.2in;
}

This is standard CSS rather than a Shopify setting. MDN's @page size reference says current browsers support it but older ones may not. The print dialog's scale setting can still shrink or enlarge the page, so print a test slip on the label printer before you change your whole workflow.

How do you fix common packing slip problems?

ProblemLikely causeFix
Logo shows as a broken image or not at allFile name doesn't match exactly, or the image isn't in Content > FilesCopy the exact file name, including case and extension
Logo is tiny'small' caps it at 100 × 100 pxUse a larger size such as 'medium'
A field prints blankThe variable isn't in Shopify's packing slip list, or the order has no valueUse documented variables and wrap optional ones in an if check
No prices on the slipPacking slip variables have no pricesPrint an invoice instead
Some items are missingThe slip covers one shipment of a split orderPrint a slip for each shipment
Bundle items print as separate linesEach component is its own line itemLabel them with line_item.groups
Edits don't show when printingYou edited a template that isn't the defaultSelect Set as default template for packing slips
Nothing prints with the labelsPop-ups are blockedAllow pop-ups for your Shopify admin
Layout breaks after an editA missing endif or endfor tagRestore your backup, or revert to default

Frequently asked questions

Does a Shopify packing slip include the tracking number?

Not with documented variables: the packing slip variable list has no tracking field. Customers get tracking from the shipping confirmation and shipping update emails instead; see how to add a tracking number and how customers follow their parcels in our Shopify order tracking guide.

Can I keep different packing slips for different orders?

With document templates you can keep several packing slip templates, but Print packing slips always uses the default one. The Preselect when printing multiple documents setting only decides which templates are already ticked when you print several documents. To vary content within one template, use Liquid conditions such as {% if order.note != blank %}.

Can I print packing slips from Shopify POS?

Shopify's packing slip guide covers the admin and the Shopify mobile app. The Order Printer app can print from POS once you add its tile to the POS smart grid, according to Shopify's Order Printer printing guide.

Can I customize a packing slip without coding?

Not much. Packing slip templates are edited as code; only pick lists are set up with options. For complex changes, Shopify's document templates guide suggests hiring an experienced designer.

Sources