GuideSpices, coffee, refills

Shopify Inventory for Bulk Products

Track each bulk container as one amount, in grams or ml, and work out every portion from it: (amount left − reserve) ÷ portion size, rounded down. A bag of paprika with 1,800 g to sell is 36 × 50 g jars or 7 × 250 g bags. When a 250 g bag sells, both numbers change at once: 31 jars or 6 bags.

Updated October 3, 20265 min readBy Carboy

Spice shops, coffee roasters and refill stores share one problem. You buy in bulk, a 2 kg bag of smoked paprika, a 12 kg roast batch, a 20 l drum of dish soap, and you sell in portions. Shopify counts portions: each variant has its own stock number, and nothing in Shopify knows that the 50 g jar and the 250 g bag come out of the same bag.

This guide covers the parts that decide whether your numbers hold: units, reserves, counting, refunds and sales at the counter.

Keep one number per container

The fix that works in all three trades: track each bulk container as one amount, in grams or ml, and work out each portion from it. Sellable = (amount left − reserve) ÷ portion size, rounded down. A 2 kg bag with 1,840 g left and 40 g held back has 1,800 g to sell: 36 × 50 g jars or 7 × 250 g bags. When a 250 g bag sells, both numbers change: 31 jars or 6 bags.

The alternative, a separate stock number per portion, fails one of two ways: a size shows sold out while the bag is half full, or every size shows the whole bag and you sell it twice.

Units and conversions

Pick one base unit per container and convert everything to it: grams for spices and coffee, ml for liquids. Write the unit into every variant name, 250 g or 12 oz, so anyone can do the math from the name alone.

UnitIn base unitsWhere you see it
1 oz (weight)28.35 gSpice jars and coffee in the US
12 oz340.2 gA common US retail coffee bag
1 lb453.6 gCoffee, bulk spices
1 kg1,000 gWholesale bags
1 fl oz (volume)29.57 mlRefill bottles in the US
1 l1,000 mlRefill bottles
1 US gallon3,785 mlJugs and drums

Two traps. First, ounces and fluid ounces are different things: an ounce is weight, a fluid ounce is volume, and they only line up for water. Second, buying and selling in different dimensions needs a density. If your soap supplier invoices 20 kg but you sell 500 ml bottles, weigh exactly 1 liter of it once. If that liter weighs 1,020 g, the drum holds about 19.6 liters.

For coffee, track the roasted weight, not the green weight. Roasting drives off water, so a batch comes out of the roaster lighter than it went in. Weigh what comes out and start the count from that.

Reserves for spills and testing

Some of every container never reaches a customer. Coffee goes to cupping, dialing in the grinder and the sample bags you hand out. Spices spill at the scoop and cake at the bottom of the bag. Refill pumps drip and leave a film in the drum. Hold back a reserve so the store doesn't sell the last 100 g you'll never actually pack.

Start with a small guess, a few percent of the container, and adjust it from your counts. If every 5 kg bag of cumin ends 120 g short, your reserve for cumin is 120 g.

Counting the shelf

A count is only useful if it is quick enough to do often. Habits that help:

  • Write the empty weight on every container. Weigh each bin, jar or drum empty once and mark it with a paint pen. Then a count is one weighing and one subtraction.
  • Count fast movers more often. Your top ten every week, the slow ones every month.
  • Count the container, not the variants. Weigh the bag and set its amount. Don't edit the 50 g and 250 g counts one by one; they come from the bag.
  • Write down the gap. A count lower than your record is a loss. Logged with a reason, losses show you where product goes.

Refunds that do and don't restock

When you refund an order, Shopify asks whether to restock the items. Decide your rule per kind of product before the first return arrives:

  • Opened food and drink: don't restock. A returned bag of ground coffee or an opened spice jar isn't going back on the shelf.
  • Sealed and undamaged: restock if you will sell it again. Its grams go back into the container's count.
  • Lost or damaged in transit: refund, don't restock. Nothing came back.

Cancellations work the same way. An order cancelled before you packed it should restock, because the product never left the container. Whatever the rule, the amount has to go back to the container and not only to one variant: a restocked 250 g bag adds 250 g, which may mean five more 50 g jars.

Sales at the counter

If you also sell in person with Shopify POS, those sales come out of the same bag as your online orders, and they arrive in Shopify as orders. Count them the same way: portion × quantity off the container.

Refill shops have an extra wrinkle: customers fill their own jars with whatever amount they like, and fixed variants don't fit 347 g of oats. One workaround is a small unit variant, 10 g or 100 ml, priced per unit, and ringing up the quantity: 35 × 10 g for 350 g. It is clunky at the till, but every gram comes off the right container and your online stock stays true.

Where Carboy fits

Carboy keeps each container as one pool, in grams or ml, and sets every portion size's stock in Shopify from it. It reads sizes like 50 g, 12 oz, 1 lb and 500 ml from your variant names and converts units inside a pool. Orders, online or through Shopify POS, take from the pool. Refunds and cancellations put the amount back when you restock them and leave it alone when you don't.

A reserve keeps your spill and tasting allowance off the shelf, Counted the shelf? sets the amount after a count, and every night at 03:00 your time Carboy checks each size against its pool. See how it fits spice shops, coffee roasters and refill shops, and price your portions with the price per gram calculator.

Track every bag, batch and drum as one amount. Free for one pool.