For decant shops

Your 10 ml listing should know what's left in the bottle.

To keep decant stock right on Shopify, count the bottle, not the sizes. Carboy keeps each fragrance bottle as one pool of ml: a 10 ml decant takes 10 ml from a 100 ml pool, and the 2 ml, 5 ml and 10 ml counts in Shopify are all recounted from what is left. Refunds you restock and cancellations put the ml back.

Carboy is in Shopify App Store review. Leave your email and we'll write the day it's approved. Free for one pool.

PoolVetiver EDP · 100 ml bottle58.5 ml left
  • 2 ml sample× 28
  • 5 ml decant× 11
  • 10 ml travel× 5
2.0 ml kept back for skin teststoo little for one more

Where decant stock goes wrong

Shopify says you have three 10 ml decants. The bottle holds 18 ml.

  • Each size keeps its own count

    Shopify treats the 2, 5 and 10 ml as if they sat in three separate boxes. They come out of one bottle, so every sale leaves the other two counts wrong until you fix them by hand.

  • The last pour is the risky one

    With 14 ml left you can fill one 10 ml or two 5 ml, not both. Guess the counts and someone pays for a decant you end up refunding with an apology.

  • Splits get claimed twice

    A split divides one bottle into shares of 5, 10 or 15 ml. When shares sell faster than you update them, the last 10 ml goes to two buyers.

  • Samples drift and batches change

    The 2 ml count gets topped up by hand and forgotten. A new bottle may be a new batch, so its code goes in a notebook while the stock numbers stay where they were.

What Carboy does with the bottle

  1. Reads each size from the variant name

    “Sample 2ml”, “5 ml Decant”, “10ml Travel” and “Full bottle 100 ml” all become portions of the same pool. If a name has no size, you type it once.

    For example: Sample 2ml → 2 ml · Full bottle 100 ml → 100 ml

  2. Recounts every size after each order

    Orders, refunds with restock and cancellations move the pool. Each size then gets the number of whole pours that fit, so the 10 ml shows sold out the moment the bottle can't fill one.

    For example: 18.0 ml left → 2 ml × 8 · 5 ml × 3 · 10 ml × 1

  3. Sets up the whole shelf in one pass

    Set up many scans your catalog, finds every fragrance sold in sizes and creates all the pools at once. Each starts from the stock Shopify already shows, and you correct the ml from the bottle.

    For example: Found 140 products sold in sizes · Create pools

  4. Tells you what to pour today

    The To fill list adds up the decants waiting in open orders, bottle by bottle, so you open each bottle once instead of once per order.

    For example: Vetiver EDP · 3 × 5 ml · 1 × 10 ml · pours 25 ml

  5. Shows what each size earns

    Enter what the bottle cost and what a vial and atomizer cost. Each size shows its cost, its margin at today's price and the price that keeps your target margin.

    For example: 5 ml · $16.00 · cost $9.60 · 40% · $24.00 keeps 60%

Two 5 ml decants, worked through

A new 100 ml bottle goes in with 2 ml kept back for skin tests. Order #1042 buys two 5 ml decants.

  • Order #10422 × 5 ml decant
  • Takes10.0 ml
Vetiver EDP · 100 ml bottle: stock in Shopify before and after, with 2.0 ml kept back
In ShopifyBeforeAfterChange
Pool 2.0 ml kept back100.0 ml90.0 ml−10.0 ml
2 ml sample4944−5
5 ml decant1917−2
10 ml travel98−1

Each count = floor((pool − kept back) ÷ size)

The order took 10 ml and all three sizes moved, not only the one that sold. The 2 ml sample lost five, because 10 ml is five samples. Nobody touched a count in Shopify.

Questions decanters ask

  • Can a sealed full bottle be part of the pool?

    Yes. A variant named “Full bottle 100 ml” takes the whole 100 ml when it sells. It only shows as available while the pool holds 100 ml plus what you keep back, so count sealed bottles into the pool along with the open one.

  • What happens when a decant comes back?

    A refund with restock puts the ml back and every size is recounted. If the vial was opened it can't go back in the bottle, so refund without restock and the pool stays as it is.

  • Does Carboy track batch codes?

    No. A pool is an amount, not a batch. You can write the batch code in the note when you add a bottle, so the pool's history shows when it went in, but Carboy doesn't record which order got which batch.

  • How would I run a split?

    Make the bottle a pool and each share size a variant of one product. As shares sell, the other share sizes recount, and once the bottle is fully claimed every share shows sold out.

  • I lose a little on every pour. Will the counts drift?

    Keep a few ml back when you set up the pool; Carboy never sells into it. When you measure the bottle, enter what is really there and every size follows. A spill can go in as a loss with a note.

  • Do sales at markets on Shopify POS count?

    Yes. POS sales reach Carboy as orders, the same as online ones, so a decant sold at a pop-up comes out of the same bottle.

Start with the bottle you decant most. One pool is free, with every feature.

Free · 1 poolStarter · $12 / month · 25 poolsPro · $29 / month · unlimited