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?
- From your Shopify admin, go to Orders.
- Click the order.
- Click Print, then Print packing slips.
- Print the slip, or save it as a PDF from the print dialog.
How do you print packing slips in bulk?
On desktop:
- Go to Orders.
- Select the checkbox next to each order that needs a slip.
- Click Print, then Print packing slips.
- If you have more than one location, select the fulfilling location and click Continue.
- 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:
- Go to Settings > Shipping and delivery.
- Scroll to the Documents section.
- 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:
| Task | Single packing slip template | Document templates (rolling out) |
|---|---|---|
| How many packing slips | One | Several; add one with Create document > Packing slip |
| Which one prints | The only template | The one marked Set as default template for packing slips |
| Back up before editing | Copy the code into a text file | Duplicate the template (save or discard unsaved changes first) |
| Other documents | Packing slip only | Invoice, pick list and blank templates too |
| Size limit | Not stated | 135,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:
| Variable | What it prints |
|---|---|
shop.name, shop.email, shop.domain | Store name, email and domain |
shop_address.summary | Your full store address |
order.name | Order number with any prefix or suffix, such as #1004 |
order.created_at | Order date and time; format it with the date filter |
order.note | The order note, if there is one |
customer.first_name, customer.name | The customer's first or full name |
shipping_address.summary, billing_address.summary | Full ship-to and bill-to addresses |
line_items_in_shipment | The items in this shipment; loop over it as line_item |
line_item.title, line_item.variant_title, line_item.sku | Product name, variant name and SKU |
line_item.quantity, line_item.shipping_quantity | Quantity ordered, and quantity in this shipment |
line_item.properties | Line item properties, such as a personalization or gift message |
line_item.groups | The bundle or add-on group an item belongs to |
includes_all_line_items_in_order | true 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:
- Go to Content > Files, click Upload files and upload the logo. Note the exact file name, including the extension.
- In the template, find this code and delete it:
<p class="to-uppercase">
{{ shop.name }}
</p>- In its place, paste this line, replacing
shop_logo.pngwith your file name:
{{ 'shop_logo.png' | file_img_url: 'small' | img_tag: 'Logo' }}- 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:
- 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.
- 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.
- Print one page on the printer and paper you actually use. A screen preview won't show you where a page breaks.
- Click Save only when every test looks right.
How do you revert the packing slip to Shopify's default?
- Open the template from Settings > Shipping and delivery, in the Documents section.
- Click Revert to default.
- 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?
| Document | What it's for | Shows prices | Where you make it |
|---|---|---|---|
| Packing slip | Goes in the box; lists what is in this shipment | No price variables | Settings > Shipping and delivery > Documents |
| Invoice | Record of items and charges for the customer | Yes | An invoice template under Documents, where available, or the Shopify Order Printer app |
| Pick list | Tells staff what to collect from a location | Not among its column options | A pick list template under Documents, set up with options instead of code |
| Shipping label | Goes on the outside and routes the parcel | No | Bought on the order; printed there or from Orders > Shipping labels |
| Customs form | Declares contents for international parcels | Declared values | Printed 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?
| Problem | Likely cause | Fix |
|---|---|---|
| Logo shows as a broken image or not at all | File name doesn't match exactly, or the image isn't in Content > Files | Copy the exact file name, including case and extension |
| Logo is tiny | 'small' caps it at 100 × 100 px | Use a larger size such as 'medium' |
| A field prints blank | The variable isn't in Shopify's packing slip list, or the order has no value | Use documented variables and wrap optional ones in an if check |
| No prices on the slip | Packing slip variables have no prices | Print an invoice instead |
| Some items are missing | The slip covers one shipment of a split order | Print a slip for each shipment |
| Bundle items print as separate lines | Each component is its own line item | Label them with line_item.groups |
| Edits don't show when printing | You edited a template that isn't the default | Select Set as default template for packing slips |
| Nothing prints with the labels | Pop-ups are blocked | Allow pop-ups for your Shopify admin |
| Layout breaks after an edit | A missing endif or endfor tag | Restore 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
- Packing slips — Shopify Help Center, accessed 26 October 2026.
- Printing and editing packing slips — Shopify Help Center, accessed 26 October 2026.
- Customizing packing slips — Shopify Help Center, accessed 26 October 2026.
- Packing slip variable reference — Shopify Help Center, accessed 26 October 2026.
- Creating and editing order document templates — Shopify Help Center, accessed 26 October 2026.
- Printing shipping labels and shipping documents — Shopify Help Center, accessed 26 October 2026.
- Printing documents using the Shopify Order Printer app — Shopify Help Center, accessed 26 October 2026.
- Liquid variables and filters reference for Shopify Order Printer — Shopify Help Center, accessed 26 October 2026.
- Shopify Order Printer — Shopify App Store, accessed 26 October 2026.
- Add order notes on your cart page — Shopify Help Center, accessed 26 October 2026.
- line_item — Shopify developer documentation, accessed 26 October 2026.
- file_img_url — Shopify developer documentation, accessed 26 October 2026.
- img_url — Shopify developer documentation, accessed 26 October 2026.
- New feature: Packing slips — Shopify Changelog, accessed 26 October 2026.
- size (@page descriptor) — MDN Web Docs, accessed 26 October 2026.


