Multiship Checkout (also called multi-recipient checkout) lets your customers send gifts to multiple people in a single purchase. Because each recipient gets their own package shipped to their own address, shipping works a little differently than a standard single-destination order.
This article explains exactly how shipping costs are calculated, how your existing shipping setup carries over, and how popular third-party shipping apps fit into the picture — all without any engineering work on your end.
Before you start, make sure you have:
Zest Gift Notes or Multiship Checkout installed and active on your Shopify Plus store.
Your Shopify shipping profiles, zones, and carrier rates already configured.
Any third-party shipping rate app (e.g., PDQ, Advanced Shipping Rules, Bespoke Shipping) installed and working for standard checkouts.
How Shipping Rates Are Calculated Per Recipient
Every recipient in a multiship order gets their own shipping rate, calculated individually in real time. When a gifter adds a recipient and enters their shipping address, Zest queries Shopify's shipping API using that recipient's specific product basket and destination — the same way a standard Shopify checkout would.
A few things to know:
Rates appear dynamically as recipients are added and addresses are entered.
Each recipient's shipping cost is calculated independently — the rate for Recipient A does not affect the rate for Recipient B.
The total shipping cost shown at checkout is the sum of each individual recipient's selected shipping rate.
If no recipients have been added yet, shipping shows as $0. This is expected behavior — Zest needs a destination address before it can return accurate rates.
Multiship Checkout uses your existing Shopify shipping configuration with no separate setup required. Whatever shipping profiles, zones, carrier rates, or third-party rate apps you have configured will be applied automatically for each recipient.
Free Shipping Thresholds and Shipping Discounts
Free shipping thresholds — and any other shipping-level discounts — are evaluated at the individual recipient level, not against the order total.
This means: if your store offers free shipping on orders over $100, each recipient's portion must independently meet that $100 threshold to qualify. A gifter sending three $60 gifts ($180 total) would not receive free shipping on any of the three, because no single recipient's subtotal crosses the $100 threshold.
This is an important concept to keep in mind for your store's shipping promotions:
Discount codes that include a free or discounted shipping benefit are applied per recipient's Child Order, following the same logic.
Automatic discounts with free shipping conditions behave the same way — each Child Order is evaluated independently.
This prevents customers from splitting large orders across many addresses to game free shipping thresholds.
Note: The per-recipient evaluation of free shipping thresholds is handled by Shopify's native discount engine, not by Zest. If you see unexpected behavior with a specific discount, check whether the discount's conditions apply at the line-item or order level in Shopify.
Choosing Shipping Methods Per Recipient
Gifters can select a different shipping method for each recipient during the Multiship Checkout flow.
Here's how it works:
The gifter configures each recipient's items, delivery address, and gift note.
For each recipient, they choose a shipping method from the available options.
The checkout summary updates in real time as different shipping speeds are selected for different recipients.
Available shipping methods for each recipient are pulled directly from your Shopify shipping configuration and any active third-party rate apps.
Because each recipient is treated as an independent order, a gifter can choose overnight shipping for one recipient and standard ground for another in the same checkout.
Compatibility with Third-Party Shipping Apps
Zest is compatible with third-party shipping rate apps that communicate through Shopify's Shipping API. Because Zest queries Shopify's API to retrieve rates, any app that integrates at that level will have its rates surfaced automatically in the Multiship Checkout.
Compatible apps (confirmed through Shopify's API):
PDQ
Advanced Shipping Rules
Bespoke Shipping
Apps that may not be compatible:
Older apps that bypass Shopify's Shipping API and inject rates through other mechanisms may not work as expected.
Fallback option: If a third-party app isn't compatible, Shopify's native shipping profiles are a reliable fallback. Compatibility should be validated during your Zest implementation.
A note on duplicate shipping methods: If a third-party shipping app returns rates alongside Shopify's default backup shipping profile rates, customers may see duplicate options at checkout. To prevent this, adjust your Shopify shipping profile settings to disable backup rates when app-provided rates are active.
CalcuRates note: Some third-party shipping calculators may cause address validation errors during Multiship checkout. Since Zest relies on what Shopify returns, conflicts may appear as Shopify rejecting addresses. If you see this, investigate the shipping app's own address validation logic.
Identifying Multi-Recipient Orders in Shipping Apps
Zest marks each line item in a multiship order with a special attribute so your shipping apps can identify them programmatically.
Attribute key:
_zest:multishipAttribute value:
trueLocation: This is a line item property, not a cart-level attribute.
Third-party shipping rate providers (like PDQ) can use this attribute to show or hide specific shipping methods for multi-recipient orders.
For example, you can configure PDQ to detect _zest:multiship on line items and suppress pickup or local delivery options that don't make sense for multi-address shipments.
Important: Make sure your shipping app is checking line item properties (not cart attributes) for this key. A common misconfiguration is checking the cart-level attributes, which will not contain _zest:multiship. This key is only added for stores with PDQ enabled — contact Zest if you need this attribute enabled for your app.
Hiding Unwanted Shipping Methods (Pickup, Test Rates)
Pickup and local delivery options don't make sense for multi-address orders. There are a few ways to hide them:
Via your third-party shipping app (recommended): Configure your shipping app (e.g., PDQ) to detect the
_zest:multishipline item attribute and suppress pickup rates when it is present.Via Shopify shipping profiles: Review your shipping zones and profiles to ensure pickup and local delivery methods are scoped only to appropriate use cases.
Customer tag-based restrictions: If your store uses Shopify Scripts to show specific shipping rates based on customer tags (e.g., employee pickup rates), custom configuration may be needed to suppress those rates in the multiship flow. Contact Zest support if this applies to your store.
Note: If you use Boxify as a shipping rate app, be aware of this behavior: Boxify regenerates shipping rates when discount codes are added or removed during checkout, which is atypical. Zest has deployed a specific fix for this behavior. Contact Zest support to confirm this is active for your store.
Shipping Insurance and Order Protection
Shipping insurance and order protection apps create complexity in multiship orders because these apps typically calculate their price based on the total cart value — but in multiship orders, the cart is split across different Child Orders, one per recipient.
Two supported approaches:
Require same products for all recipients (Dupe-Only Mode).
Enable the Require Sending Same Products to Each Recipient setting in your Zest dashboard.
When this is on, all recipients receive identical product combinations. Because the basket is consistent across recipients, insurance apps can calculate accurately. This is the right choice if shipping insurance is essential to your brand experience.
Exclude shipping insurance from the multiship flow.
For brands that prioritize gifting flexibility, the simpler path is to keep shipping insurance out of the multiship flow entirely. Gifters can still add insurance on standard single-destination orders.
Route and auto-selected insurance: If you use Route (or a similar app) with auto-selection enabled, the Route SKU is added to the cart automatically as a digital product. Because Zest detects digital products in the cart, this can prevent the multi-recipient option from appearing. Disabling Route's auto-selection resolves this but may reduce attachment rates. Work with Zest and your insurance provider to find the right balance.
Order Protection apps (e.g., Order Protection): Apps that calculate protection fees based on the total cart value will produce a mismatch in multi-recipient orders. The short-term solution is to hide the protection app from the multiship flow. A per-recipient API integration for insurance calculation is not yet available.
Launching multiship from the cart with insurance: If you launch the multiship checkout from the cart page (rather than from Shopify's checkout), insurance requires additional coordination. Work with your insurance provider and Zest to ensure the insurance variant is correctly added before navigating to the multiship URL.
Delivery Date Estimates and Limitations
Estimated delivery dates may not always appear in multiship checkout, and this is a Shopify API constraint — not a limitation of Zest.
Here's why: Shopify's Shipping API returns the shipping method name and price to Zest, but it does not expose the delivery promise or estimated arrival date that third-party apps attach as secondary information.
Workarounds:
Embed delivery dates in the shipping method title: Configure your shipping app to include the estimated delivery date directly in the method name (e.g., Standard Shipping — arrives by Thursday, August 21). This ensures the date is visible to gifters during recipient configuration.
PDQ delivery promise feature: Zest has a PDQ-specific feature that can surface delivery promise data from PDQ's note field. If you use PDQ and want delivery dates displayed in multiship checkout, contact Zest support to enable this.
ZIP-code-based delivery calendars: If your store uses a delivery date calendar that varies by ZIP code (e.g., for perishable products with different lead times by region), a single calendar widget will not work in multiship checkout because each recipient has a different ZIP code. A per-recipient approach is needed. Contact Zest support to discuss options for your use case.
Quick Reference: Third-Party Shipping App Compatibility
App | Compatible via Shopify API | Notes |
PDQ | Yes (confirmed) | Supports |
Advanced Shipping Rules | Yes (confirmed) | Works via Shopify Shipping API |
Bespoke Shipping | Yes (confirmed) | Works via Shopify Shipping API |
Boxify | Partial | Rate regeneration on discount changes — Zest has a specific fix; contact support |
Route (insurance) | Special handling | Digital SKU can hide multiship option |
Order Protection | Special handling | Cart-value mismatch; exclude from multiship flow or use dupe-only mode |
