Skip to content
Inventory · 13 min read

Shopify Inventory Limitations for Makers: Where Shopify Stops Counting

Shopify counts finished products well. It does not know a candle is made of wax, a wick and a jar, what a batch costs this month, or which pour a jar came from. Four gaps, what Shopify offers for each, and how to tell whether your shop needs more.

Overhead view of rows of freshly poured, unlabeled white candles in identical tins, each with an untrimmed wick, packed tightly together

Shopify's inventory system isn't broken. It's answering a different question from the one a maker is asking.

Shopify says so itself. Its guide to managing perishable inventory (opens in new tab) puts it plainly: "Shopify's core inventory management software features focus on quantities." Quantities of what? Of the things you sell: a variant, at a location, in a state such as available or committed. Shopify does that well.

Picture Wren, an illustrative candle maker who pours soy candles in a converted garage and sells them through a Shopify store and a Saturday market table. Her Shopify admin says she has 46 Cedar & Smoke 8 oz candles. It's right. What it can't tell her is that she has wax for only 11 more, that the jar she buys by the case went up 18 cents in August, or which of last month's three pours the candle a customer just emailed about came from. None of those is a Shopify bug. Shopify doesn't track raw materials you don't sell, record a production run, keep a cost per item current, or track lots, and it was never built to. The rest of this post takes those four gaps one at a time: what the gap is, what Shopify offers for it, and what actually fills it.

Shopify inventory limitations at a glance

Rule of thumb: If you buy finished goods and resell them, Shopify's native inventory is probably enough. If you make what you sell, Shopify knows how many you have, but not what they're made of, what they cost this month, or which batch they came from.

Here are the four gaps, each sourced to Shopify's own help pages and guides:

Four Shopify inventory limitations for makers, and Shopify's closest native feature for each
What a maker needs Closest thing Shopify has Where it stops
Materials that get used up when a batch is made Shopify Bundles (components are other products) Built around selling a set, not making a batch; bundles can't contain bundles
A record that a batch was made Manual adjustment with a reason None of the seven reasons means "produced"
A cost per unit that follows material prices Cost per item field Shopify calls the field "static data"
Knowing which batch a unit came from Nothing native Shopify's own guide points to add-on software

Shopify counts candles, not wax

The gap. Every inventory record in Shopify belongs to a product variant. Wren's 4.4 kg slab of soy wax isn't a variant. It isn't for sale, it has no price and it doesn't go in a cart. Shopify has nowhere natural to put it, so it lives in a notebook, a spreadsheet, or her memory, and her memory is the one that says "plenty" right up until it isn't.

What Shopify offers. The nearest native tool is the Shopify Bundles app (opens in new tab), and it's worth knowing exactly what it does before treating it as a recipe system. A bundle is a product made of other products: up to 30 components in a fixed bundle, up to 2,000 units of each. The eligibility page (opens in new tab) explains that "bundle inventory is determined by the inventory levels of each product included within a bundle," and "the product with the lowest inventory level determines how many bundles can be sold."

That's excellent for a gift set of three candles. It breaks down as a bill of materials in three ways:

  1. It models a sale, not a pour. A bundle answers "how many sets can a customer buy from the stock I have?" Wren's question is different. She uses up wax when she pours, on a Tuesday, for candles that may not sell for six weeks, and nothing in a bundle records that pour. Her wax count stays wrong in the most dangerous direction: too high.
  2. Components have to be products. To bundle wax, Wren would need to create "soy wax" as a product in her store, which is a strange thing to put in a catalog that customers browse.
  3. No layers. The eligibility page says "bundles can't contain other bundles." A maker's recipes often have layers: a fragrance-blended wax used in four candle scents, a frosting used on three cakes. A flat list of components can't express a base that is itself a recipe.

What fills it. A materials layer that records consumption when the batch is made, not when it sells. In Ardent Seller, a production run deducts each recipe ingredient from stock and raises the finished-goods count in the same step, and a subassembly such as Wren's blended wax can be its own recipe used inside others. Shopify then gets the finished quantity it is good at selling.

Making a batch is a verb Shopify doesn't have

The gap. Wren pours 24 candles. In Shopify, the only way to show 24 more candles on the shelf is to edit the number.

What Shopify offers. A manual adjustment, with an optional reason. Shopify's adjusting inventory page (opens in new tab) lists seven: Correction, Count, Received, Return restock, Damaged, Theft or loss, and Promotion or donation. "Received" is defined as "new inventory from a supplier or external source." Nothing on the list means we made these. So a production run gets logged as a correction, or as stock received from a supplier who happens to be Wren.

That matters less on the day and more in March, when she's trying to work out how many candles she made last year. Shopify's adjustment history page (opens in new tab) notes that a product's history view shows only the last 180 days, and anything older means pulling the inventory adjustment changes report. Even then, her production is mixed in with miscounts and restocks under the same labels.

What fills it. Production as its own transaction type, with a date, a recipe, a batch size and the materials it used. Then "how many did we make in Q2?" is a filter, not an archaeology project.

Cost per item is a number you type once

The gap. Shopify does have a cost field. The profit reports page (opens in new tab) even anticipates makers: "If you create the product yourself, then you can enter a value that is based on your labor and material costs." The same page then names the limitation directly: "The Cost per item field contains static data, which means that the data in your profit reports is only relevant to a specific point in time."

Put that next to Wren's August. She set her candle's cost at $6.40 in March. Since then her jar supplier raised prices, and she switched to a pricier wick after a tunneling problem. None of that reached the field, because nothing connects the field to anything. Her Shopify profit report keeps reporting a March margin on September sales.

The same page adds one more condition: "Profit is reported only for products and variants that had cost recorded at the time they were sold." A variant whose cost Wren forgot to fill in simply falls out of the profit report.

What Shopify suggests. In the same section, Shopify's own options for dynamic cost reporting are to run financials in another business system, use a reporting app, or "calculate costs, profits, and losses manually."

What fills it. A cost that's calculated, not typed in. If each candle's cost is built from its recipe (wax by weight, wick, jar, fragrance, label, minutes of labor), a new jar price changes every candle that uses that jar. The recipe-costing method is the same whether you do it in a spreadsheet or in software; the difference is whether you have to remember to redo it.

Every candle in Shopify is identical

The gap. To Shopify, 46 Cedar & Smoke candles are 46 of the same thing. In reality they came from three pours, made from two lots of fragrance oil, and one of those lots smelled faintly off.

What Shopify offers. On this one, Shopify's perishable inventory guide (opens in new tab) is unusually direct: "To manage expiration dates, lot or batch tracking, or FEFO picking rules, use an inventory tracking software like Freshly on top of Shopify." In other words: not native, by design.

For candles, a lot number is a matter of quality control. For food, cosmetics and pet treats it can be the difference between pulling 40 jars and pulling every jar you sold this year. That's the case batch tracking for food sellers walks through.

What fills it. A lot stamped on each production run, linked back to the material purchases that went into it and forward to the sales that took units out. When a customer emails about a candle, the question "which pour?" has an answer.

What Shopify inventory does well

It would be unfair, and wrong, to stop at the gaps. Shopify's native inventory has grown up, and for plenty of shops it's enough:

  • Real stock states, per location. Shopify's inventory states (opens in new tab) separate On hand into Available, Committed and Unavailable, with Incoming tracked alongside. Unavailable units can be set aside for reasons like "damaged, quality control, or safety stock."
  • Purchase orders and transfers in the admin. You can create purchase orders (opens in new tab) with suppliers, costs and payment terms, then create an inventory transfer from them to receive the stock. This matters because Shopify announced that its Stocky app (opens in new tab) would no longer be available after August 31, 2026, so these native tools are now the default.
  • Multiple locations for a workshop, a storage unit and a market stall, each with its own counts.

If Wren bought finished candles from a wholesaler and resold them, she could stop reading here.

Do you need more than Shopify? A decision framework

Start with question 1. If it's a yes, go through all three that follow: each yes names a gap Shopify's native inventory won't fill, and the earlier the question, the more urgent the gap.

  1. Do you make anything you sell, from materials you also stock? If no (you resell finished goods, or you sell digital products), Shopify's native inventory, purchase orders and transfers are likely enough, and you can stop here. If yes, keep going.
  2. Do you sell anything where a recall or complaint would need a batch? Food, cosmetics, soap, pet products, candles. If yes, you need lot tracking, and Shopify's own guide points to separate software for it.
  3. Have your material costs changed since you last typed a Cost per item? If yes, your Shopify profit reports are working from old numbers. You need a cost that's calculated from your recipe, not typed in.
  4. Have you run out of a material mid-batch, or over-ordered one, in the last six months? If yes, the missing piece is materials inventory that gets used up when you make a batch, which Shopify doesn't keep.

If you said yes to question 1 and no to the rest, you're a maker for whom Shopify plus a costing spreadsheet still works. The spreadsheet vs. inventory software decision guide has the signs that tell you when that stops being true.

Why the order matters: Batch tracking (question 2) is the most urgent gap because it's the hardest to fix after the fact, and for food, cosmetics, soap and pet products it carries a safety consequence too. You can recalculate an old cost; you can't go back and record which batch a jar came from. In practice, the lot number is recorded when you log a production run, so logging production runs is usually the first step: tracking materials per batch (question 4) gives you batch tracking (question 2) as well.

How a materials layer fits next to Shopify

A materials layer shouldn't replace Shopify. Shopify stays the storefront and the checkout. The extra layer sits behind it and handles the four gaps above. This is the split the Ardent Seller Shopify connection is built on:

  • Orders come in as sales. Paid Shopify orders import with their line items matched to your products by SKU, along with discount, tax and shipping. A clean, consistent SKU scheme makes that matching automatic; the SKU Naming & Barcode System Starter Kit is a free way to set one up before you connect.
  • Production happens on the materials side. Wren's Tuesday pour is a production run: wax, wicks, jars and fragrance are deducted, 24 candles are added, and the run gets a lot number.
  • Ardent Seller leaves your Shopify stock counts alone until you turn on auto push or click Push now. With auto push on, for the whole store or one listing at a time, each Shopify location you've linked gets the updated count whenever stock changes, minus an optional buffer you hold back. Ardent Seller never creates or edits a Shopify product, price or description.
  • Cost follows the recipe. Each sale is matched against a cost built from the recipe, priced at what you actually paid for its materials, so profit reports show what a Shopify order earned, not what it billed.

Two honest limits: Shopify Payments fees and payouts don't import yet (record them as an expense for now), and connecting both a Shopify store and an Etsy shop needs the Artisan plan or higher. The Shopify connection itself is included on every plan, including Free. The sync guide lists exactly what moves and what doesn't.

The question to ask your own admin

Open Shopify, pick your best-selling product, and look at its Cost per item. Ask when you last changed it, and what's changed in your supplier invoices since then. If the honest answer is "I don't remember," that number has been feeding your profit reports ever since.

Shopify will keep counting what's on the shelf. If you make what's on the shelf, see how the Ardent Seller Shopify connection works and let the materials, the batches and the real costs live somewhere that understands them.

Free resources

Two free downloads for setting up Shopify and a materials system side by side:


This article is provided for educational purposes only and does not constitute financial, tax, or business advice. Cost structures, pricing examples, and margin figures are illustrative and will vary by your specific circumstances. Consult a qualified accountant or small-business advisor before making financial decisions based on this content. Shopify is a trademark of Shopify Inc.; Ardent Seller uses the Shopify API but is not endorsed or certified by Shopify Inc. Shopify features described here reflect Shopify's help pages and guides as of October 2026.

Frequently asked questions

Not as materials. Shopify inventory is kept per product variant and per location, and the closest native feature, the Shopify Bundles app, works out how many bundles can be sold from the stock of the products inside them. That suits gift sets. A maker uses up wax, flour or lye on the day a batch is made, which is an event Shopify has no record type for.

No native one. Shopify Bundles lets one product contain up to 30 other products in a fixed bundle, and bundles cannot contain other bundles. Makers who need a recipe that consumes materials at production time, or a base such as a wax blend used in several products, add that layer with a separate inventory or manufacturing app.

Only from the Cost per item number you type in. Shopify's profit reports help page says the field contains static data, so the figure is right only as of when you last edited it, and profit is reported only for products that had a cost recorded when they sold. If your material prices move, the field does not move with them.

Not natively. Shopify's own guide to perishable inventory says its core inventory features focus on quantities, and points sellers who need expiration dates or lot and batch tracking to separate inventory software that runs on top of Shopify.

Not always. If you buy finished goods and resell them, Shopify's native locations, inventory states, purchase orders and transfers may be all you need. If you make products in batches from shared materials, need a current cost per unit, or need to trace a sold item back to a batch, you need a materials layer that Shopify does not provide.