Order Printer creates professional invoices and packing slips for Shopify. This guide covers setup, customization, and workflow optimization.
Order Printer
- Free official app
- Custom templates
- Bulk print workflows
- Template edits require Liquid
- Limited automation without add-ons
Why Order Printer?
Related: free keyword tool.
Free, official Shopify app:
| Feature | Benefit |
|---|---|
| Free forever | No cost |
| Official app | Shopify-supported |
| Customizable | Liquid templates |
| Bulk printing | Multiple orders |
| PDF export | Digital documents |
Document types:
- Invoices
- Packing slips
- Receipts
- Return forms
- Custom documents
Getting Started
Related: connect Shopify with Loop Returns, the Judge.me connector.
Step 1: Install App
- Go to Shopify App Store
- Search “Order Printer”
- Click Add app (by Shopify)
- Authorize access
- Ready to use
Step 2: Access Templates
- Go to Settings > Apps > Order Printer
- View default templates
- Choose which to use
- Customize as needed
Step 3: Print First Document
- Go to Orders
- Click on an order
- Click More actions
- Select Print with Order Printer
- Choose document type
- Print or save as PDF
Document Types
Invoice
Contents:
- Order number
- Order date
- Billing information
- Line items with prices
- Subtotal, taxes, total
- Payment status
Packing Slip
Contents:
- Order number
- Shipping address
- Line items (no prices)
- Quantity to ship
- SKU/barcode (optional)
Receipt
Contents:
- Order details
- Payment confirmation
- Line items
- Total paid
- Payment method
Return Form
Contents:
- Order reference
- Return instructions
- Item checklist
- Reason for return
- Return address
Template Customization
Adding Your Logo
<div class="logo">
<img src="YOUR_LOGO_URL" alt="{{ shop.name }}" width="200">
</div>
Modifying Header
<div class="header">
<h1>{{ shop.name }}</h1>
<p>{{ shop.address }}</p>
<p>{{ shop.phone }}</p>
<p>{{ shop.email }}</p>
</div>
Adding Custom Fields
{% if order.note %}
<div class="order-note">
<strong>Order Note:</strong>
{{ order.note }}
</div>
{% endif %}
Styling with CSS
<style>
body { font-family: Arial, sans-serif; }
.logo { text-align: center; margin-bottom: 20px; }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 8px; border-bottom: 1px solid #ddd; }
.total { font-weight: bold; font-size: 1.2em; }
</style>
Liquid Variables
Order Information
| Variable | Output |
|---|---|
{{ order.name }} | Order number (#1001) |
{{ order.created_at }} | Order date |
{{ order.total_price }} | Total price |
{{ order.subtotal_price }} | Subtotal |
{{ order.total_tax }} | Tax amount |
{{ order.financial_status }} | Payment status |
Customer Information
| Variable | Output |
|---|---|
{{ order.customer.name }} | Customer name |
{{ order.customer.email }} | Email address |
{{ order.billing_address }} | Billing address |
{{ order.shipping_address }} | Shipping address |
Line Items
{% for line_item in order.line_items %}
<tr>
<td>{{ line_item.name }}</td>
<td>{{ line_item.sku }}</td>
<td>{{ line_item.quantity }}</td>
<td>{{ line_item.price | money }}</td>
<td>{{ line_item.final_line_price | money }}</td>
</tr>
{% endfor %}
Shop Information
| Variable | Output |
|---|---|
{{ shop.name }} | Store name |
{{ shop.address }} | Store address |
{{ shop.phone }} | Phone number |
{{ shop.email }} |
Bulk Printing
Print Multiple Orders
- Go to Orders
- Select orders (checkbox)
- Click More actions
- Select Print orders
- Choose template
- Print all
Filtering for Print
Common filters:
- Unfulfilled orders
- Today’s orders
- Specific status
- Date range
Workflow Integration
Fulfillment Workflow
Order received
↓
Print packing slip
↓
Pick items
↓
Pack with slip
↓
Print shipping label
↓
Mark as fulfilled
Invoice Workflow
Order completed
↓
Print invoice (if needed)
↓
Include in package or
↓
Email to customer
Best Practices
Template Design
| Element | Recommendation |
|---|---|
| Logo | Clear, appropriate size |
| Font | Easy to read |
| Layout | Organized, clean |
| Information | Complete but not cluttered |
Paper and Printing
| Setting | Recommendation |
|---|---|
| Paper size | A4 or Letter |
| Margins | Allow for binding |
| Quality | High for invoices |
| Color | Black and white for slips |
Organization
| Practice | Implementation |
|---|---|
| Batch printing | Group by time/status |
| Filing | Date-based organization |
| Backup | PDF copies |
Common Customizations
Adding Terms and Conditions
<div class="terms">
<h4>Terms and Conditions</h4>
<p>All sales are final. Returns accepted within 30 days with receipt.</p>
</div>
Including VAT Number
<div class="vat-info">
<p>VAT Number: GB123456789</p>
</div>
Custom Footer
<div class="footer">
<p>Thank you for your order!</p>
<p>Questions? Contact us at {{ shop.email }}</p>
</div>
Conditional Content
{% if order.shipping_address.country != 'United States' %}
<div class="customs-info">
<p>Customs Declaration: Merchandise</p>
</div>
{% endif %}
Troubleshooting
Print Issues
Problem: Document not printing correctly
Solutions:
- Check browser print settings
- Adjust margins
- Try different browser
- Save as PDF first
Template Errors
Problem: Template showing errors
Solutions:
- Check Liquid syntax
- Verify variable names
- Test with simple template
- Check for missing brackets
Missing Information
Problem: Data not showing
Solutions:
- Verify variable exists
- Check order has data
- Use conditional checks
- Review Liquid documentation
Alternatives
Order Printer Pro
Enhanced features:
- More templates
- Automatic printing
- Email invoices
- Multi-language
Other Apps
| App | Best For |
|---|---|
| Order Printer Pro | Advanced needs |
| Sufio | Professional invoices |
| Easy Invoice | Multi-currency |
| Ordersify | Automation |
PDF Generation
Save as PDF
From print dialog:
- Click Print
- Choose “Save as PDF”
- Select location
- Save file
Email PDFs
Manual process:
- Save as PDF
- Attach to email
- Send to customer
For automation, consider third-party apps.
Multi-Location
Handling Multiple Warehouses
Customize for location:
{% for fulfillment in order.fulfillments %}
{% if fulfillment.location.name == 'East Coast' %}
<!-- East Coast specific content -->
{% endif %}
{% endfor %}
International
Multi-Currency
Show local currency:
<td>{{ line_item.price | money_with_currency }}</td>
Multi-Language
For translations, consider:
- Order Printer Pro
- Langify integration
- Manual templates per language
Next Steps
After setup:
- Install app - Free from Shopify
- Review templates - Default options
- Customize - Add logo, branding
- Test print - Verify appearance
- Integrate - Into fulfillment workflow
Shopify + Order Printer implementation checklist (2025)
This section adds practical “make it stable” steps you can use after you install the app/connector. It’s intentionally lightweight: the goal is fewer sync surprises, cleaner reporting, and easier troubleshooting.
1) Quick setup checklist
- Permissions first: grant only the scopes you need (orders/customers/products as required) and document who owns the admin credentials.
- Data mapping: confirm how email, phone, currency, and SKU are mapped between Shopify and Order Printer.
- Historical import: decide how far back to import orders/customers (avoid importing years of data if you don’t need it).
- Deduplication rules: pick one unique identifier per object (usually email for customers, order ID for orders) to prevent doubles.
- Alerts: set a lightweight alert path (email/Slack) for failed syncs, auth expiry, and API rate limits.
2) Data you should verify after connecting
Most integration issues show up in the first hour if you test the right things. Use the table below as a QA checklist (create a test order if needed).
| Data object | What to check | Why it matters |
|---|---|---|
| Customers | Email/phone format, marketing consent fields, duplicates | Prevents double messaging and broken segmentation |
| Orders | Order total, tax, discount, shipping, currency | Keeps revenue reporting and automation triggers accurate |
| Line items | SKU, variant ID, quantity, refunds/returns behavior | Avoids inventory and attribution mismatches |
| Fulfillment | Status changes + timestamps, tracking numbers, carrier fields | Drives customer notifications and post-purchase flows |
| Catalog | Product titles, handles, images, collections/tags | Ensures personalization and reporting match your storefront |
3) Automation ideas for Operations
- Order documents: auto-generate invoices/packing slips and standardize templates inside Order Printer.
- Pick/pack checklist: reduce packing errors by using consistent packing rules and scan steps.
- Customer notifications: automate “order received/packed/shipped” messages to reduce WISMO.
- Returns coordination: keep return labels, status, and refunds aligned to avoid churn.
- SOPs: document who owns which steps (support vs ops vs finance) for fewer handoffs.
API sanity check (Shopify Admin API)
If your integration UI says “connected” but data isn’t flowing, a quick API call helps confirm whether the store is accessible and returning the objects you expect.
# List the 5 most recent orders (GraphQL)
curl -X POST "https://your-store.myshopify.com/admin/api/2025-01/graphql.json" \
-H "X-Shopify-Access-Token: $SHOPIFY_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"query\":\"{ orders(first: 5, sortKey: CREATED_AT, reverse: true) { edges { node { id name createdAt totalPriceSet { shopMoney { amount currencyCode } } customer { email } } } } }\"}"Tip: keep tokens/keys in environment variables, and test in a staging store/site before rolling changes to production.
4) KPIs to monitor (so you catch problems early)
- Sync freshness: how long it takes for a new order/customer event to appear in Order Printer.
- Error rate: failed syncs per day (and which object types fail most).
- Duplicates: number of merged/duplicate contacts or orders created by mapping mistakes.
- Revenue parity: weekly spot-check that Shopify totals match downstream reporting (especially after refunds).
- Attribution sanity: confirm that key events (purchase, refund, subscription) are tracked consistently.
5) A simple 30-day optimization plan
- Week 1: connect + map fields, then validate with 5–10 real orders/customers.
- Week 2: enable 1–2 automations and measure baseline KPIs (conversion, AOV, repeat rate).
- Week 3: tighten segmentation/rules (exclude recent buyers, add VIP thresholds, handle edge cases).
- Week 4: document the setup, create an “owner” checklist, and set a recurring monthly audit.
Related integration guides
Browse all: integration guides.
For shipping labels, see ShipStation integration. For order tracking, check AfterShip integration.