Ops playbookBundlesFulfillmentBetter Bundles12 min read

Shopify pack lines your 3PL can pick

Product-level vs order-level discount application for a Shopify Functions pack, decided from what fulfillment actually prints: what pick tickets, packing slips, customs forms, and 3PL invoices show for $0 gift lines vs spread packs vs sticker lines with one order discount — with decision rules and a 10-minute pre-launch check.

Jeshua Leger

Founder, Leger Studio ·

Order #4821 is a hoodie with a free stand. The 3PL’s packing slip prints Hoodie $60.00, Stand $0.00, and the customer emails support asking whether the $0.00 means the stand was a mistake they should send back. Order #4822 is an $80 skincare kit whose slip prints Serum $40.00 — the serum’s page says $50 — and that customer asks if they were shipped an old batch at a markdown. At month end the 3PL invoices four picks against #4821 and finance cannot tie four picks to what looks like a one-item sale. Nothing was configured wrong. Three documents described the same order from whichever price field they happened to read, and nobody had decided in advance which field that should be.

This post does one job: decide whether a Functions pack should put savings on component lines or as one order-level discount so warehouse pick tickets, packing slips, and 3PL invoices match what finance and support can defend. It is not about how the savings are split between components — that is the allocation math post. It is not about what happens when a sitewide sale hits the pack (discount stacking) or when one component comes back (returns and partial refunds). Those posts assume the order exists and ask what checkout or the refund desk does with it. This one asks what the people who put it in a box see.

Note: Context: Better Bundles sells a pack as one real Shopify product and, at checkout, Shopify Functions expand it into its real component lines with the savings placed the way you configured. Each bundle chooses where its discount is applied: on the component lines (product-level, every plan including free Basic) or once against the order (order-level, Growth and Pro). Docs: discount allocation & application modes.

Two modes, one order total, different line prices

Whatever you choose, the warehouse gets the same SKUs at the same quantities, and the customer pays the same total. The only thing that moves is the price column on each component line — and where the pack’s savings show up. Two packs, both ways:

  • Gift pack — hoodie $60, stand $20, pack $60 with the stand marked free. Product-level: Hoodie $60.00, Stand $0.00. Order-level: Hoodie $60.00, Stand $20.00, then one order discount of −$20.00.
  • Spread kit — serum $50, cream $30, mini $20, fixed $80 kit in spread mode. Product-level: Serum $40.00, Cream $24.00, Mini $16.00. Order-level: Serum $50.00, Cream $30.00, Mini $20.00, then −$20.00 on the order.

Product-level is the shopper’s document: every line reads what they effectively paid, and the lines sum to the charge. Order-level is the finance and customs document: every line reads the catalog price — the sticker — and the savings sit in one place. Fulfillment, support, and the books do not all want the same one.

What the warehouse actually reads

Before choosing, find out which of your fulfillment documents carries a price at all. In many stores the honest answer is none of them, and the whole decision collapses to “take the default.”

  • Shopify’s own packing slip prints item, SKU, and quantity — no prices unless you have edited the template (Settings → Shipping and delivery → Packing slips) to add them. A picker working off that slip sees an identical document in either mode.
  • The order page in your admin shows every component line with its price, and an order-level discount as its own row in the totals. That is what in-house support and warehouse staff open when a slip raises a question.
  • A 3PL pulls the order through its Shopify integration, and Shopify hands it both numbers for every line: the original price and the line’s share of any discount — including a prorated share of an order-level one. Which number lands on the 3PL’s pick ticket and packing slip depends on which field their template maps. Ask; do not assume they print what Shopify prints.
  • Customs forms and declared-value fields are built from line values in most shipping tools. If you ship across a border, this is the document that cares most about the price column.
  • The 3PL invoice carries no product prices. It bills receipts, storage, and picks — per unit or per line — plus packaging. A three-component pack is three picks in either mode, and a “free” gift is a pick at the full pick rate.
Tip: Decision rule zero: if nothing your warehouse or 3PL prints or reads includes a price — Shopify’s default packing slip, a SKU-and-quantity pick ticket, a domestic-only carrier label — keep product-level application on every pack. It is on every plan, it is what the shopper’s receipt already says, and there is nothing to reconcile. Read on only if a price is printed somewhere, or finance or customs is asking for sticker lines.

Free-item gifts: the $0.00 line at the pick station

With free-item allocation on product-level application, the gift line reads $0.00 on the order and on any document that prints line prices. For a gift-with-purchase that is usually the point — and it is also the single most common fulfillment exception a pack creates. Where the $0.00 helps:

  • The picker can tell which item is the gift without a note, and a customer who reads their slip sees the free thing labelled free — the box matches the promise.
  • Support can answer “was I charged for this?” from the slip, without opening the order.
  • Finance sees the promo cost where it was spent — on the gift’s line, in per-SKU net revenue — rather than as a pooled discount someone later has to attribute.

Where the $0.00 confuses — and each of these is a real exception queue, not a hypothetical:

  • Zero-value line rules. Some warehouse systems treat a $0.00 line as a missing price and hold the order, or treat it as low-priority and let a partial-ship rule send the paid items without it. A free stand that never arrives is a ticket you pay for twice.
  • Customs. Authorities expect a declared value on every item, gift or not. A shipping tool that builds the commercial invoice from line prices will either carry $0.00 onto the form or stop the label. An international gift pack on product-level application needs a value override somewhere, and that somewhere is a manual step that will eventually be skipped.
  • Declared value for carrier insurance cuts the other way. Built from line prices, a product-level gift pack declares $60 — what the customer paid — and an order-level one declares $80. On a lost-parcel claim the paid amount is the defensible one, so this is a point for product-level, and one more reason to know which field your shipping tool reads.
  • The pick fee. The gift is a pick, packaging weight, and sometimes a bigger box. On the 3PL invoice that pick is indistinguishable from a paid unit — the “four picks for one item” question. Finance should expect picks to equal component units, not lines that carry revenue.

On order-level application the stand reads $20.00 with a −$20.00 order discount. Customs and zero-value rules are satisfied; the slip no longer labels the gift as free, and support has to explain that the −$20.00 is the stand. Both are honest documents. Choose the one that matches the exceptions you actually have.

Spread kits: allocated prices vs sticker plus one discount

A product kit in spread mode has no $0.00 line to argue about; its problem is that every line carries a number that appears nowhere else in your store. Serum $40.00 is not a price the customer saw on a product page, so on a slip that prints prices it reads like a markdown, and “was this an old batch?” is the ticket it generates. The lines do sum to the $80 the customer paid, which is what makes the product-level slip defensible: a support agent can add three numbers and land on the charge.

Order-level application prints Serum $50.00, Cream $30.00, Mini $20.00 — the PDP prices — with −$20.00 against the order. Finance likes that per-SKU revenue matches the catalog and the promo sits in one line. The fulfillment risk is specific: a 3PL slip template that prints line prices and a line total, but not order discounts, shows the customer $100.00 for an $80.00 charge. That reads as an overcharge, and it is the failure most likely to surface only after go-live, because in-house testing looks at Shopify’s documents, not the 3PL’s.

Important: The document rule: anything that prints prices must sum to what the customer paid, or print no prices. Product-level satisfies that automatically. Order-level satisfies it only if every template that shows line prices also shows the order discount. If your 3PL’s template does not, either get it changed before launch or do not use order-level for packs that ship through them.

Nothing here changes the cash. The kit’s margin was decided before publish (pack margin before you publish), and a partial return refunds the same amount in both modes. Application mode is a documents decision.

Decision rules

Application is set per bundle, so you can mix. Do not: a picker who sees $0.00 gift lines on Monday and sticker lines with an order discount on Tuesday has no way to know which slip is “right.” Pick one policy for the store, write it into the warehouse and support runbooks, and treat a change as a launch.

Choose product-level application (every plan) when:

  • Nothing in fulfillment prints a price — Shopify’s default slip, a SKU-and-quantity pick ticket, in-house packing.
  • You ship domestically, or your customs paperwork takes its values from somewhere other than order line prices.
  • The offer is a gift and the $0.00 line is the message. The gift reads free on the receipt, the slip, and the admin, and your warehouse system does not choke on zero-value lines.
  • You want per-SKU net revenue to carry the promo cost on the line that caused it.
  • You are on Basic or Starter. Product-level is the only application mode there, and the right default for most stores anyway.

Choose order-level application (Growth and Pro) when:

  • You ship internationally through a tool that builds commercial invoices from line prices, and you do not want a manual value override on every gift pack.
  • Your 3PL’s warehouse system flags, holds, or de-prioritizes zero-value lines, and they cannot change that rule for you.
  • Finance wants component lines at catalog price with the promo in one discount line, and has confirmed that every printed document also shows that discount line.
  • You sell the same packs to wholesale or B2B accounts whose paperwork expects list prices and a single discount.
Important: Never switch application mode mid-campaign. The next order’s slip changes shape, the support script about the gift line is wrong, and the 3PL’s exception queue fills with orders that “look different from yesterday.” Switch at a campaign boundary, re-save the bundle so checkout picks up the change (troubleshooting), and brief warehouse and support the same day — with the test order from the next section, not a description.

The 10-minute pre-launch check

Do this once per application mode before the first real order, and again whenever the mode or the 3PL changes. One screenshot per document, filed where support and the warehouse can find them.

  1. Place a paid test order for the pack — a real card you refund afterwards is closest to production. Tag it TEST, and if a 3PL is connected, tell them it is coming so it is not picked and shipped.
  2. Open the order in your Shopify admin and screenshot the component lines with their prices and the totals block. Every other document is compared against this.
  3. Print Shopify’s packing slip from the order. Confirm whether it shows prices at all; if you customized the template, confirm the total it prints equals the amount charged.
  4. Ask the 3PL for their rendering: the pick ticket and packing slip PDF their system generated from that order. SKUs and quantities match the admin; if prices print, they sum to the charge; a $0.00 or discounted line did not land the order in an exception status.
  5. If you ship across a border, generate the customs form or commercial invoice for the test order and read every item value. No $0.00 lines, no values you cannot explain.
  6. Export the order as CSV and note where the savings landed — the line’s discount column, the order’s discount amount, or both — so finance reads the same columns every month.
  7. Confirm the 3PL’s billing preview counts one pick per component unit, and put that expectation in finance’s notes so the gift’s pick is not a surprise.
  8. Refund the test order and file the screenshots with the runbook entry that names the application mode.

Build packs whose paperwork agrees with itself

A pack is easy to fulfill when the order lists real component SKUs and every document that prints a price agrees on what was paid. Better Bundles expands each pack into its real components at checkout on every plan, with product-level application as the default. On Growth and Pro you can switch any bundle to order-level application so component lines stay at sticker price with the savings in one order discount, for the 3PL, customs, and finance cases above. Basic is free forever with up to 3 active bundles; Starter, Growth, and Pro are $17 / $37 / $77 a month with a 15-day trial. Start with create your first bundle, pick the application mode from the rules above, and run the ten-minute check before the pack goes Active.

Newsletter

Want the next one in your inbox?

Subscribe for new posts, app releases, and Better Bundles updates.

Product updates, release notes, and new posts. Unsubscribe anytime. Privacy

Ready to grow your average order value?

Create your first native-style bundle and see the discount at checkout. Start free on Basic — paid plans include a 15-day trial.