Skip to main content

Pack recipes: turn one supplier code into several products

Teach Stockroom what a supplier's code for a box, case or assorted pack contains, and a CSV import expands one invoice row into the right product lines at the right cost.

Some suppliers bill in packs of their own making: one code on the invoice that stands for a box of a single product, or an assorted pack of several. A pack recipe teaches Stockroom what that code contains, so a CSV import turns CASE-4410 x 1 into the products you actually stock - right quantities, right cost per unit, no hand-splitting the file first.

Pack recipes are marked Early access. They work exactly as described here, and we are still shaping them around what merchants tell us - so if your supplier's packs work differently, tell us.

Set up a pack recipe

  • Open Suppliers and click the supplier whose codes you want to teach.

  • Find the Pack recipes section and click Add pack recipe.

  • Enter their Supplier code exactly as it appears in their file. Matching ignores case.

  • Click Add products, pick what one pack contains, and set Qty per pack for each product.

  • Click Save.

A recipe records contents only - there is no price on it. Every import brings its own price, which is what keeps the numbers right when the supplier's price moves.

Two shapes it covers

  • A case of one product. A distributor bills a box of 30 candles as CASE-4410. The recipe holds one product: CANDLE-VAN, qty per pack 30.

  • An assortment. Their ASST-2200 is a mixed four-pack: TEE-BLK-M x 2 and TEE-BLK-L x 2.

A recipe can hold as many products as the pack does. One product with a quantity of 1 is fine too, if a supplier simply uses a different code for something you already stock.

Importing a file that uses the code

Nothing changes about how you import. On the Purchase orders page click Import CSV, choose the supplier, and upload the file as it arrived. Any row whose code matches a recipe becomes one line per component:

  • Quantity counts packs. A quantity of 2 against CASE-4410 orders 60 of CANDLE-VAN.

  • The cost is the price of one pack - whichever cost column your file uses - split evenly across the units in the pack and kept to four decimal places.

So a row reading CASE-4410, 1, 100.00 imports as 30 x CANDLE-VAN at 3.3333 each, and the line totals exactly 100.00 - the same figure as the invoice, with no cents left to reconcile. The import summary counts what expanded: 32 lines imported, 2 pack codes expanded.

How a code is matched

  • Recipes are checked before your Shopify catalog, against whichever code column the row has - SKU, barcode or supplier SKU.

  • A recipe belongs to one supplier. The same code on another supplier's file is not a match.

  • A recipe wins even when the code also exists in your catalog. That is deliberate: a pack code is often stored in Shopify as a bundle, and Shopify does not allow inventory to be written to a bundle - its components are the only place stock can be received.

  • A row that names a Shopify variant ID is never treated as a recipe. An explicit ID always means that exact variant.

  • Repeated rows for the same code add up first, then expand once.

On the purchase order

Expanded lines are ordinary product lines, so incoming quantities, receiving and average cost all work against the real variants in Shopify - exactly as if you had entered them yourself. Each line keeps the code it came from: shown beside the item in the editor, and printed as Pack: CASE-4410 under the SKU on the PDF your supplier receives, so their own code is on the document. Duplicating the purchase order keeps it too.

Good to know

  • Recipes expand in the Import CSV flow on the Purchase orders page. Pasting or importing rows into a purchase order you already have open does not expand them yet, and neither does the purchase order history import.

  • If a recipe contains a product that is no longer in your catalog, that row is skipped with an error rather than importing part of a pack. Fix the recipe on the supplier page and import the file again.

  • A row with no cost at all falls back to each component's own cost from your catalog.

  • If the same variant also appears on its own row in the file, it stays a separate line - the pack's line and the loose line are not merged.

  • Editing or deleting a recipe never changes purchase orders you have already imported.

  • Priced by the case, but with no code that stands for the pack? A pack_cost and pack_size column pair does that division on its own - see Creating a purchase order from a CSV file.

Did this answer your question?