Most stock problems at a growing store are not counting problems. They are ownership problems: two tools, a warehouse spreadsheet and a marketplace connector all believe they are allowed to write the same number. This page sets out how to put an inventory management system for ecommerce in place, in the order that avoids the mess, with the Shopify setting names you’ll touch along the way. It is written for operators on Shopify Plus or a paid subscription platform at $3M+ in revenue. If you run below that floor, a well-configured Shopify admin and a weekly count will serve you better than anything here.
The angle is narrow on purpose. For a tool comparison, read ecommerce inventory software. For Shopify’s native tracking, read Shopify inventory tracking. This article covers what breaks at volume and the sequence that stops it.
What breaks in an ecommerce inventory management system at volume?
Four things break, and they break in the same order at almost every store. First, the count drifts from reality because receiving and adjusting are done in more than one place. Second, a sync overwrites a correct number with a stale one. Third, a bundle or kit sells stock that one of its components lacks. Fourth, reorder decisions get made from a number nobody trusts.
A concrete scene: a warehouse lead receives a pallet and adds it in the inventory tool. Ten minutes later the 3PL’s hourly push sends its own on-hand figure, which was calculated before the pallet was scanned. The store now shows the old quantity. Nobody touched anything wrong. Two writers simply disagreed, and the later one won.
The ledger problem is the cause. An ecommerce and inventory management system is really several ledgers: the storefront, the warehouse, the purchasing sheet, each marketplace. Setup is the job of making them agree on one number and one owner. Software helps. It does not replace the decision.
Why does the obvious fix fail?
The obvious fix is to buy a bigger tool. It fails because a new tool adds a new writer. Unless someone switches off the old writers, you now have one more ledger drifting from the rest. Every migration to a better inventory management system for Shopify that skips the ownership decision ends with the same oversell, just under a new logo.
How do you set up an inventory management system for ecommerce, step by step?
The sequence matters more than the tool. Do the steps in this order: locations, counts, ownership, buffers, reconciliation. Each step assumes the one before it is done, and skipping ahead is where teams lose weeks. Shopify setting names below are as they appear in the admin; menu labels move around, so confirm against your own admin before you change anything.
Step 1: Define locations and what counts as sellable
Create one location in Shopify for every physical place that holds stock: each warehouse, each retail store, each 3PL node, and a returns or quarantine shelf if you keep one. Do not create locations for convenience, such as a “Marketplace” location that holds no shelves. A location must match somewhere a person could walk to and count.
Then set the per-product values. On each product variant, keep Track quantity ticked, and set Continue selling when out of stock to off for anything you hold and don’t pre-sell. Ticking it on for held stock is the fastest way to turn a counting error into a customer complaint. Reserve it for genuine pre-order or made-to-order lines.
Finally, decide which stock states are sellable. Shopify separates inventory into states: available, committed (allocated to open orders), unavailable (with reasons such as damaged, quality control, safety stock or other) and incoming (on purchase orders or transfers). On hand is available plus committed plus unavailable. Write down, in one line each, who may move stock between those states and why. A returned item that sits in “available” before anyone has inspected it is a small oversell waiting to happen.
Location priority for fulfilment is the other setting to fix here. Shopify allocates each order to a location by an ordered rule set you can edit in the shipping and delivery settings. Put the location you most want to ship from first, and check what happens when that location is out of a line item. Order routing is its own topic, and multi-channel inventory management software covers what changes when marketplaces enter.
Step 2: Count once, then load opening quantities
The opening quantity is the most valuable number you will ever enter, because every later error sits on top of it. Count each location by hand, not from the system, and freeze receiving and picking for the duration. If you cannot freeze, count in zones and timestamp each zone; adjust for movements that landed during the count.
Load the counts as a single adjustment with the reason set to something you can search later, such as a “opening count” label in the reference field. Do not overwrite quantities one product at a time from memory. A bulk import or a scripted adjustment leaves one auditable event; forty hand edits leave a fog.
Two edge cases catch teams here. Variants with no barcode or SKU can’t be reliably matched to the count sheet, so fix identifiers first. And stock held by a 3PL should be counted by the 3PL against your SKU list, with the sheet signed by both sides, because their number becomes your opening quantity.
Step 3: Name one system as owner of each stock number
Ownership is the step most teams get wrong. They install the inventory tool, connect it, and leave every other writer running: the 3PL feed, the marketplace connector, the old app, the warehouse spreadsheet macro, and the Shopify admin itself where staff can still type a new number. Then they wonder why quantities flip.
Do the following instead. For each location, write down the single system that receives stock and adjusts it. That system owns on-hand. Every other system reads. Then go through the writers one at a time and turn off write access, or set the connector to “read” or “import only” if it offers that. Where a tool can only push absolute quantities on a timer, either replace it or make it push from the owner’s data, never its own.
Two rules keep this honest. Prefer deltas over absolutes: a message saying “received 40 units” survives a delay, while “on hand is 212” overwrites everything that happened since it was calculated. And restrict manual edits: in Shopify, limit the staff permissions that let people change inventory quantities to the people who receive stock.
A note on what Shopify does not do here. Shopify’s admin does not stop a connected app from writing quantities, and it doesn’t tell you when two apps are fighting. You find out from the activity log on an item, or from a customer. Building the write-access list is a paper exercise, and it is worth doing before any code.
Step 4: Set safety stock and reorder points
Safety stock and reorder points belong to purchasing, and they get set after counts are trustworthy, not before. A reorder point built on a wrong count reorders the wrong amount with great confidence.
The working formula for a reorder point is daily demand multiplied by supplier lead time in days, plus safety stock. Take an illustrative SKU that sells 12 units a day, arrives 30 days after order, and carries 6 days of demand as safety stock: 12 × 30 = 360, plus 72, gives a reorder point of 432. The figures are hypothetical; the method is the point. Pull your own daily demand from a trailing sales window and your lead time from actual purchase order receipts, not the supplier’s quote.
Keep two buffers apart. A purchasing buffer tells you when to reorder. A storefront buffer, sometimes called a channel reserve, hides some units from a channel so a late sync can’t oversell the last few. In Shopify the second is often done by holding units as unavailable with the safety stock reason, so they leave the available count without leaving on hand. Mixing them up produces stores that reorder late because the buffer was counted as stock, or hide sellable units because the purchasing buffer was applied to the storefront.
For forecasting beyond these formulas, see demand and inventory planning. For automating the purchase order itself, purchase order automation software covers the options.
Step 5: Reconcile on a schedule
Reconciliation is the check that the earlier four steps are still true. Run two comparisons on a fixed cadence: system quantity against a physical sample, and Shopify available against every connected channel’s quantity for the same SKU.
For the physical sample, pick SKUs by risk: fast movers, high-value items, and anything that had an adjustment since the last check. Count them and record the variance in a sheet with three columns: SKU, system quantity, counted quantity. One miss is noise. The same location missing three weeks running is a process fault, usually a receiving step that bypasses the scanner.
For the channel comparison, export the quantities from each channel and join them on SKU. Any row where the channels disagree with the owner is a writer you missed in Step 3. Log it, find the writer, and shut it off.
The variance log is the deliverable. A reconciliation that only says “all good” teaches nothing; one that shows which location, which SKU family and which writer keeps causing drift tells you where to spend the next week.
How do you verify the system works?
Verification is a test, not a feeling. Run three checks after go-live and after any connector change.
First, the receive test. Receive a small purchase order for one SKU at one location. Confirm the quantity changes in the owner within the time the warehouse expects, that Shopify available reflects it, and that no other system pushed a different number afterwards. Wait one full sync cycle of the slowest connector before calling it good.
Second, the oversell test. Take a SKU with a low quantity, place orders against it from each channel you sell on, and watch where the count lands. You want the last unit sold once, and every channel to show zero afterwards.
Third, the bundle test. Place one order for a bundle and confirm each component’s quantity fell by the amount in the recipe, and that a bundle with one component at zero shows as unavailable. Native bundles and bundle apps handle components differently, so don’t assume the behaviour from a product page.
If any test fails, the failure points back to a step: a receive test that gets overwritten is a Step 3 problem, a bundle that oversells is a Step 1 or Step 4 problem.
What does an inventory system not fix?
An inventory management system does not fix bad demand data, a slow supplier, or a warehouse that doesn’t scan. It records what people do. If receiving is done from memory at the end of the shift, the system will faithfully record a wrong number.
An inventory system also does not decide when AI belongs in the loop. Automated reorder suggestions are reasonable on clean data. Automated purchase orders sent to suppliers without a human looking at them are not, because a wrong number there costs real money and a human check costs a minute. Keep a person on any action that spends cash or promises stock you can’t verify.
Finally, an inventory tool does not replace a warehouse process. If you outsource fulfilment, the questions of who receives, who adjusts and how often they push are contract terms as much as configuration. Write them into the 3PL agreement.
Who is this not for?
Brands below the $3M floor, or on a basic plan with one shelf and one person picking, will get more from a weekly count and correct Shopify defaults than from a full system. Stores that sell only made-to-order goods have little on-hand stock to reconcile; their constraint is materials, not finished units. And any team that hasn’t yet decided who receives stock should settle that before choosing software.
What does a healthy setup look like in practice?
A healthy ecommerce inventory management system looks dull. Locations match shelves. Every location has one named owner system. Manual quantity edits are limited to a short list of people. The weekly variance log is short and its entries have causes. Reorders trigger from a number people trust, and the last five oversells, if there were any, each trace to a named writer that has since been switched off.
If yours does not look like that, the gap is usually in ownership and reconciliation, the two steps that need process change rather than a purchase. That is an ops automation problem: who owns each number, which systems may write it, and what checks catch drift before a customer does. Pointerflow builds and maintains exactly that layer for Shopify brands, and the place to start is ops automation.
Sources
- No external figures are quoted. The article is written from Shopify’s documented inventory states and settings as they are named in the admin, and from standard reorder-point arithmetic. The worked example is hypothetical.