POSInventoryBundlesBetter Bundles12 min read

Shopify POS packs without a second stock pool

Sell the same checkout-native Shopify pack on POS and Online Store from one product — shared component inventory at each door, no typed POS multipack SKU, and a one-sentence floor brief when the receipt lists components.

Jeshua Leger

Founder, Leger Studio ·

Saturday at Store 4. A customer points at the 3-pack they already bought online and asks to take one home. The cashier cannot find “Morning Routine Kit” on the register, so they ring the cleanser three times at the solo price, or they scan a barcode ops printed last month labeled “POS 3-Pack” with a quantity someone typed in by hand. The receipt looks clean. The stock does not. Online still thinks the store can sell the kit; the shelf is short three cleansers; next week a walk-in gets told the pack is available while the component that actually leaves the building is gone.

This post does one job: sell the same checkout-native pack on Shopify POS and Online Store without inventing a second multipack stock pool, and brief floor staff when the receipt shows expanded component lines instead of one pack line. It is not the post about designing a same-SKU 2-/3-/6-pack (multipacks without fake stock), about the availability math that keeps a kit honest online (kit inventory sync), about the email an agent sends when a confirmation lists components (briefing CS), or about what a warehouse or 3PL prints (pack lines your 3PL can pick). Those are merchandising, sync, support, and documents. This one is the door.

Note: Context: Better Bundles sells a pack as a real Shopify product — no theme app blocks, no storefront scripts — so it can appear in POS like any other product once you publish it to that channel. At checkout the pack expands into its real components; availability is computed from component stock, not from a typed pack quantity. 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. Docs: inventory sync & stock, create your first bundle.

One pack product, both channels

The reason a checkout-native pack can sell at the register without a second SKU is boring, and that is the point. The pack is a real Shopify product: it has a product ID, a barcode field, collections, and channel publishing. Publish it to Online Store and it is a PDP. Publish it to Point of Sale and it is a register item. Staff search the same name the customer saw on the site. There is no theme widget to “also install” on POS, because there was no theme widget online.

What you do not get is a second commercial idea. The kit price, the components, and the discount allocation are the same offer. A Functions checkout expands that product into the cleanser, the serum, and the bag whether the customer tapped Add to cart or the cashier tapped the pack on the grid. The order that lands in admin is the same shape as an online pack order — component lines, allocated prices — which is why the receipt will not say “Morning Routine Kit” as a single line unless you invent a fake SKU to force it.

Tip: Decision rule: one pack product, published to the channels that should sell it. If POS cannot find the pack, the product is unpublished from Point of Sale or staff are searching the campaign name instead of the product title — not a reason to create “POS Morning Kit.”

Availability is component stock at that door

Better Bundles does not give the pack its own on-hand. Sellable quantity is how many complete packs you can assemble from real component stock — the minimum of each component’s available ÷ units required — recalculated when a sale, restock, or adjustment moves a part (inventory docs). On a multi-location shop that math has a location: the selling door. Store 4 can sell the kit only if Store 4 has every component on the shelf. Units sitting at the hub do not ring out at the register.

  • A POS sale of the pack decrements the components at that location, then the pack’s availability recalculates from what remains there (and at any other location you included in the pack’s inventory scope).
  • A solo sale of the cleanser at Store 4 drops pack availability at Store 4 even though nobody bought the kit. That is correct. The typed “POS 3-Pack” quantity does not know the cleanser left.
  • Online availability is a different location’s number. A stockout at Store 4 should not hide the kit on the site if the warehouse can still assemble it — and a warehouse stockout should not hide it on the register if the store can still assemble it.
  • Reserve buffers still apply. If you hold five units of the hero out of pack math so the solo PDP stays in stock, the register will show fewer packs than a naive min() of the shelf. Brief that before someone “fixes” it by typing a higher number onto a new SKU.

The kit-inventory post tells online-only merchants to scope pack availability to the warehouse that actually ships kits, and to keep retail stock out of that calculation. Flip the rule when the register should sell the same pack: include the POS locations that hold the components, and do not count a door that only displays an empty box. Company-wide on-hand is not pack stock at a door — the same warning, pointed at the channel that rings the sale.

Important: If Settings → Inventory (or the bundle’s location override) excludes a retail location, the pack can look unavailable on POS while the components are on the shelf — or the reverse, if you count a warehouse the store cannot pick from. Scope the pack to the locations that can actually complete it, then recount the shelf against that list before Saturday.

The POS 3-Pack SKU that lies to both channels

The failure that starts this post is almost always a well-meant shortcut. Someone wants the receipt to say “3-Pack,” or POS search to hit a short name, or a barcode that already lives on a shelf sticker. They create a normal product, type a quantity, and tell staff to scan that. Three things go wrong the first weekend both channels are open:

  • The typed quantity is a second stock pool. It does not move when the cleanser sells alone online or at another door, so POS oversells the pack, or it does not move when POS sells the fake SKU, so online keeps promising kits the store just emptied.
  • Replenishment double-counts or under-counts. Ops sees “POS 3-Pack” units in one report and cleanser units in another and adds them, or ignores the fake SKU and wonders why Store 4 is always short. Same trap as adding pack units on top of component velocity in pack analytics — two objects, one pile of stock.
  • Returns and counts diverge. A customer brings back one bottle from the pack; staff restock the bottle and forget the fake SKU, or they increment the fake SKU and never put the bottle back. The next cycle count cannot reconcile either number.

This is the same fake-kit model the multipack and kit inventory posts kill for the storefront. POS does not get an exception because the receipt looked tidier. If staff need a short search term, rename the real pack or add a barcode to it. If they need a shelf sticker, print the pack’s barcode. Do not mint inventory.

Tip: Decision rule: never create a “POS 3-Pack,” “Store Kit,” or barcode-only twin with its own on-hand. If the register cannot sell the real pack, fix publishing, location scope, or the product title — then run the register test below. A second SKU is a stock lie you will maintain by hand every Saturday.

The receipt shows components — brief the floor in one sentence

When the cashier rings the real pack, checkout expands it. The receipt — and any pick list the store prints for a ship-from-store or pickup order — lists the cleanser, the serum, and the bag, each with its allocated price, not a single “Morning Routine Kit” line. Customers read that the way email customers do: “you charged me three things,” “the serum is cheaper than the shelf,” “the gift says $0.00 so is it coming?” Floor staff have about eight seconds, not a support macro.

Give them one sentence they can say without looking at a card: “That’s the kit — the receipt lists what’s inside so our stock stays honest.” If they have a second beat, add the arithmetic for your mode: the three lines add up to the kit price they just agreed to, or the gift line is $0.00 because it is the free item. That is the whole brief. Do not hand the register a CS email script. The CS expand brief is for the agent who has the admin order open and time to add three numbers in a reply. The 3PL lines post is for a warehouse that prints prices onto a slip. The floor needs the sentence, plus two “do not”s:

  • Do not refund the “difference” between a shelf price and an allocated line. There is no difference — they paid the pack price. Same rule as support; louder at the desk because cash is in hand.
  • Do not “fix” the receipt by ringing the components as solos, or by switching to a fake POS SKU so the paper looks like one line. That is how you create the second stock pool this post exists to prevent.

Put the sentence on the weekly floor note the week the pack goes live, and on the pack’s POS tile if you use notes. A manager who has seen one test receipt can train a Saturday closer in thirty seconds. A manager who has not will watch someone invent a SKU.

When the pack should stay off the register

Shared inventory is the right default only when the door can complete the set. Unpublish the pack from Point of Sale — leave it on Online Store — when any of these are true:

  • The kit is warehouse-assembled (a boxed set, a dated gift, a 3PL-only pick) and the store does not hold every component in sellable condition.
  • A component is display-only or sample stock at that door. Counting it lets POS sell a pack the store cannot hand over.
  • You scoped pack inventory to the ecommerce or 3PL node on purpose, following the kit-inventory rule, and you are not ready to add retail locations to that scope.
  • Staff cannot fulfill a ship-from-store or pickup pack from the same shelf they sell walk-ins from — mixing those without a location rule is how a register sale steals a pick.

That is a publishing choice, not a product choice. The pack stays one product. The channel list is the fence. If a later pop-up should sell it, publish to that location’s POS when the components are on the floor — do not clone the product for the pop-up.

The Saturday-before-open register test

Do this once per pack you intend to sell in store, on a paid test order at the actual door — a staff purchase refunded afterwards is fine. A Shopify admin “test checkout” on Online Store does not prove POS search, the receipt, or that location’s component decrement.

  1. Confirm the pack product is published to Point of Sale and to Online Store, and that the POS location is inside the pack’s inventory location scope (Settings → Inventory or the bundle override).
  2. On the register, search the product title the customer will use. If it does not appear, fix publishing or the title before anyone prints a workaround barcode.
  3. Ring one pack. Read the receipt: component names, quantities, and line prices should match the bundle editor’s preview for your allocation and application mode. Write the one-sentence brief on the floor note using those names.
  4. In admin, open that location’s inventory. Each component should have dropped by the pack’s quantity; the pack’s available quantity should have recalculated. If only a fake SKU moved, you rang the wrong product.
  5. Check the other channel. Online availability at locations that still have components should not have been zeroed by the store sale. If it was, the pack is counting the wrong locations.
  6. Refund or restock through your usual returns location so the test does not leave sellable units in a counted bin you did not inspect (returns and partial refunds).
Tip: If step 3 produces a receipt nobody on the floor can explain in one sentence, do not publish the pack to POS that weekend. Either change the allocation mode so the paper is quieter, or train the sentence first. Inventing a POS-only SKU to hide the lines is how Store 4 starts the next cycle count already wrong.

The short version for the floor note

  • Sell the real pack product on POS and Online Store. Publish it to both channels; do not clone it.
  • Availability is component stock at the selling location, not a typed multipack quantity.
  • Never create a “POS 3-Pack” (or any barcode twin) with its own on-hand.
  • The receipt lists components on purpose. One sentence: “That’s the kit — the receipt lists what’s inside so our stock stays honest.”
  • Do not refund allocated-line “differences,” and do not ring solos to make the paper look like one line.
  • Unpublish from POS when the door cannot complete the set; keep one product.
  • Before the first Saturday, run a paid register test and check that location’s component decrement.

Better Bundles is live: packs are real Shopify products, checkout expands them into component lines on every plan, and availability follows component stock so you are not maintaining a second pool for the register. Basic is free forever with up to 3 active bundles and limited AI usage; Starter, Growth, and Pro are $17 / $37 / $77 a month with a 15-day trial. Build the pack in create your first bundle, publish it to Point of Sale only if that door can complete it, and hand the floor the sentence before you unlock the tile. Install from the Shopify App Store and start free on Basic.

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.