Skip to main content

Track inventory that isn't for sale or fulfillment in Shopify.

You’ve got stuff in your building that absolutely counts as inventory. It’s real. It’s sitting on a shelf. You paid for it (or made it). But you do not want customers to buy it. And you do not want your fulfillment team to ship it.

· By Zakia · 12 min read

Samples. Damaged units. Display models. Marketing kits. “Hold for QC” quarantine stock. Internal use. Consignment stock that’s physically there but not really yours to sell.

Shopify can handle this, but only if you set it up in a way that matches how Shopify thinks about inventory : inventory is tracked per variant, per location. And what’s “sellable” or “fulfillable” is mostly controlled by sales channels and location fulfillment behavior, not by some magic “not for sale” checkbox.

This article walks through the cleanest approach : use a dedicated non-fulfillment location to park stock you want counted but never used for new orders.

Why you’d track inventory that isn’t for sale or fulfillment (and what Shopify can/can’t do)

First, the use case. You want accurate counts for :

  • Samples you give away
  • Damaged stock waiting to be written off
  • Marketing kits you assemble and ship internally
  • Display units in a showroom
  • Consignment items (depending on your accounting rules)
  • Quarantine or QC-hold stock that shouldn’t ship yet
  • Internal use, replacements, warranty units

All of that is “inventory” to a human. Shopify agrees it’s inventory, but Shopify needs you to decide how it should affect two things :

  1. What customers can buy
  2. What locations can fulfill orders

So you’ll see Shopify quantities like :

  • On-hand : what physically exists at a location
  • Available : what can be sold or allocated (context matters)
  • Committed : what’s already reserved for orders
  • Unavailable : inventory that’s basically on-hand, but not usable (due to holds, transfers, constraints, etc)

Even if you never plan to fulfill orders from certain stock, these numbers still matter because they influence purchasing decisions, replenishment, and whether your team trusts Shopify at all.

Here’s the expectation-setting part :

  • Shopify tracks inventory by variant and location
  • “Not for sale” is usually handled by product/variant availability (sales channels, draft status, etc)
  • “Not for fulfillment” is handled by location settings and eligibility, plus whether a location is active for that variant

The core strategy : create one or more locations that are used for tracking, but not used to fulfill new orders. Then put your non-sellable or non-fulfillable units there.

Get the Shopify inventory terms right (so the numbers make sense)

If you don’t get these terms straight, Shopify will feel “wrong” all the time.

On-hand inventory

This is the physical count at a specific location for a variant. If you receive 50 units, damage 3, give away 2 samples, you’re changing on-hand somewhere.

This is the number you adjust when you’re doing real world inventory work.

Available quantity

Usually this is on-hand minus committed (and sometimes affected by unavailable). This is the “can I sell this right now” number.

But here’s the twist that matters for this article :

If a location is not used to fulfill new orders for a variant, Shopify might not show “Available” for that location at all.

Committed quantity

Committed means Shopify has reserved inventory for an order (or allocation). If 3 units are committed, they reduce what’s available to sell and fulfill from the fulfilling location.

If you’re doing the “non-fulfillment location” strategy correctly, committed inventory should generally not be coming out of your samples or damaged location.

Unavailable quantity

Unavailable is not the same as “we decided not to sell it”.

Unavailable is Shopify saying : this inventory exists, but it’s not usable right now due to the system state. Transfers are a common reason. Holds and other constraints can show up depending on your setup and apps.

Locations (and why they’re the whole game here)

Locations decide where inventory lives and what can ship.

  • A normal warehouse location is used for fulfillment.
  • A non-fulfillment location is basically a bucket for counting, without being part of routing for new orders.

And you’ll see one more layer : variant-level behavior. Inventory is tracked per variant per location. If you change settings for one variant, don’t assume every other variant follows along.

Shopify Flow: 2 New Inventory Transfer Triggers
Explore the two new Shopify Flow inventory transfer triggers designed to automate your workflows, reduce operational noise, and sync multiple store locations.

The simplest setup : create a dedicated “Non-fulfillment” location to park stock

If you only do one thing from this article, do this.

Create a separate location in Shopify for inventory you want to count but not ship from. Common names :

  • Samples / Marketing
  • Damaged
  • Internal Use
  • Quarantine / QC Hold
  • Showroom Display

Then configure it so it doesn’t fulfill online orders. The exact wording in Shopify can vary by plan and the fulfillment setup, but the goal is consistent : this location should not be eligible when Shopify routes new orders.

Why this works : it protects customer-facing availability and your fulfillment workflow.

  • You can still track on-hand counts.
  • Those units don’t inflate what customers can buy (assuming your online sales are tied to actual fulfillment locations).
  • Your team doesn’t accidentally ship the wrong stock.

When to create multiple non-fulfillment locations : when you want cleaner reporting and fewer arguments later.

Samples and Damaged are not the same thing. Quarantine is not the same as Internal Use. If you care about measuring these separately, split them into separate locations now. Future you will be grateful.

How to track inventory not for sale (without breaking your storefront)

There are a few ways to handle “not for sale”. The best one depends on whether the product itself is sellable, or only some units are not sellable.

Option A (most common) : keep the product for sale, park the non-sellable units in a non-fulfillment location

This is the clean everyday move.

Your product stays live. Your sellable warehouse location holds the inventory customers can buy. Your samples/damaged location holds inventory you still want counted, but not sold.

This keeps your storefront normal and your catalog clean.

Option B : remove the product/variant from sales channels (or set it to Draft)

If something truly should never be purchased, don’t rely on “hoping it won’t show up”.

  • Remove it from the Online Store sales channel
  • Or set the product to Draft

You can still track on-hand inventory internally at a location, but the item won’t be offered for sale.

This is common for internal SKUs, marketing collateral, spare parts, etc.

Option C : create a separate internal variant/SKU (like “Sample, Not for resale”)

This is the strict separation method.

Example :

  • Variant A : “250ml, Retail”
  • Variant B : “250ml, Sample, Not for resale”

Now you can track sample usage without muddying the main sellable variant’s inventory history. Reporting is often clearer. The downside is catalog complexity and the need to keep merchandising tight so customers never see the internal variant.

Trade-off summary :

  • Best simplicity : Option A
  • Best “never purchasable” : Option B
  • Best reporting clarity : Option C
Shopify POS Editor: Find Every Setting (Fast)
Learn how the new Shopify POS Editor centralizes all your configurations in one single interface to eliminate menus scavenger hunts and ensure settings consistency.

How to track inventory not used for order fulfillment (location + variant approach)

This is the other half of the puzzle. Even if something is “for sale”, you might have some stock that should not be used to fulfill orders.

The mechanism is mostly location-based :

  1. Set the dedicated location so it doesn’t fulfill online orders
  2. If needed, make sure the location isn’t active/eligible for that variant’s fulfillment

And here’s an important update that trips people up in a good way :

You can now view and update on-hand inventory at any active location, even for variants that don’t fulfill orders from that location.

So for locations that don’t fulfill a variant :

  • On-hand inventory is shown and can be updated
  • Any existing committed or unavailable quantities remain visible until they drop to zero
  • Available quantity won’t be shown, because the location isn’t used to fulfill new orders

How Shopify shows that :

  • On the Inventory page, Available appears as “—” with a warning : “Location doesn't fulfill this variant”
  • On the Product variant page, Available is blank, and the location shows the same warning

That warning sounds scary. Sometimes it’s exactly what you want.

One more subtle point : on-hand inventory in a non-fulfillment location still won’t be used to fulfill new orders, but it can continue to be used for fulfilling existing committed orders. So if something got committed there historically, it may remain visible and relevant until those commitments are resolved.

Sanity check for committed orders

If you see committed quantity touching your non-fulfillment location and you didn’t intend that, check :

  • Which location the order is assigned to
  • Whether your routing rules consider that location eligible
  • Whether the location was previously eligible and got changed later

Where to see this inventory in Shopify (Inventory page vs Product variant page)

You’ll bounce between two places.

Inventory page

This is where you can work fast.

  • Filter by location
  • Search by SKU
  • See per-location quantities for a variant

If you’re using a non-fulfillment location, expect the “Available” column to be weird (the “—” behavior) because Shopify is basically saying : “I’m tracking on-hand here, but I’m not offering this as sellable/allocatable for new fulfillment.”

Product variant page

This is where you confirm details.

Open a product, click into the variant, and scroll to the inventory by location section. You’ll see the location list and quantities per location.

This is also where people realize : “Oh. This variant is stocked at three locations and I forgot one exists.”

Common confusion : “I added stock but my available quantity didn’t increase”

This is almost always one of these :

  • You added stock to a non-fulfillment location, so “Available” is not shown or doesn’t contribute to what’s sellable online
  • The stock is there, but it’s committed somewhere else
  • The stock is unavailable due to a transfer/hold/system constraint

Don’t guess. Check the per-variant, per-location breakdown.

How to update on-hand inventory for non-fulfillment locations (without affecting sellable stock)

This is the practical workflow part. You want to update counts without accidentally changing what customers can buy.

Manual adjustments

Use adjustments when inventory changes without a movement from another Shopify location, or when you’re doing a correction.

Examples :

  • Writing off damaged units you found during a count
  • Consuming internal use items
  • Adding newly created marketing kits that weren’t tracked elsewhere

High-level flow :

  1. Choose the location (your Samples/Damaged/Quarantine location)
  2. Find the variant/SKU
  3. Adjust on-hand
  4. Add a reason or note (do it, even if you’re in a rush)

Transfers vs adjustments (this matters for auditability)

If you’re moving units from sellable stock into non-sellable stock, do a transfer when possible.

Example : you have 50 units in Warehouse. 5 get damaged. Don’t just adjust Warehouse down 5 and adjust Damaged up 5 with two separate mysteries.

Transfer 5 from Warehouse to Damaged. Now you have a cleaner trail.

Key checkpoint after any update

After you update on-hand in a non-fulfillment location, verify :

  • The on-hand number changed in the right place
  • Your sellable warehouse location’s available quantity did not change unexpectedly
  • The storefront still shows the correct “in stock” status (or whatever you intend)
Shopify Balance Domestic Wire Transfers (No Guesswork)
Discover what domestic wire transfers mean within Shopify Balance, how they work for US merchants, and how they differ from ACH and card payments.

Understanding committed and unavailable quantities for variants (especially when stock isn’t meant to ship)

Committed is created when orders are placed and inventory is allocated. So if :

  • Warehouse on-hand : 10
  • Committed : 3
  • Available : 7

That’s normal.

What you don’t want is committed coming out of your Samples location unless you intentionally fulfill something from there (rare, but maybe you do for influencer kits or PR boxes).

If committed is showing on a non-fulfillment location, check the assigned location on the order and your location eligibility settings.

Unavailable is trickier. It can make inventory feel like it disappeared. If you see unavailable sitting around, ask :

  • Is there an in-progress transfer ?
  • Is an app placing inventory on hold ?
  • Was something partially received or partially moved ?

Two quick examples (so your brain can relax)

  1. You have 20 on-hand in the Samples location and 0 available online.
  2. That can be totally correct. Samples are tracked, but not sellable.
  3. You have 10 on-hand in Warehouse, 3 committed, so 7 available.
  4. Also correct, and this is the number that should drive what customers can buy if Warehouse is your fulfillment location.

Troubleshooting mindset : always check the per-location breakdown before deciding Shopify is broken.

Common setups that work well (pick one based on your workflow)

Setup 1 : One warehouse + one non-fulfillment location

Simple brands. One fulfillment point, one bucket for samples/damaged/internal.

This is the easiest to train a team on.

Setup 2 : Multiple warehouses + one shared non-fulfillment location

You fulfill from multiple places, but you want one consistent internal bucket. It’s still clean, but you need naming discipline so people don’t create six versions of “Damaged”.

Setup 3 : Separate internal variants/SKUs for non-resale items

Best when you need strict reporting and separation.

This is common if you report on sample spend, internal consumption, or want “sellable stock” to be painfully accurate without exceptions.

What to document internally (seriously, write it down)

  • Location naming conventions
  • When to transfer vs when to adjust
  • Who has permission to edit inventory
  • How often you reconcile physical counts

If you don’t document it, you’ll end up with someone “fixing” counts in the wrong location because they thought they were helping.

Final checks to keep your storefront and fulfillment accurate while tracking non-sellable stock

Before you trust the setup, do these quick checks :

  • Confirm your online fulfillment is coming from the right location(s) and that your non-fulfillment location is not eligible for new order routing.
  • Spot-check a few variants to confirm on-hand stock exists in the non-fulfillment location and that customer-facing availability is driven by your fulfillment location(s), not the internal bucket.
  • If you see "Location doesn't fulfill this variant", treat it as an informational prompt. Ask whether that is intentional — if yes, move on.
  • Reconcile regularly by comparing physical counts against on-hand totals per location. Transfer or adjust as needed to keep numbers believable.

Conclusion

Tracking inventory that isn't for sale or fulfillment in Shopify is mostly a locations game. You're not fighting Shopify — you're just separating realities : stock that exists versus stock that should be used to sell and ship.

Create a dedicated non-fulfillment location (or a few), move the right units there, and let Shopify show you on-hand counts without letting those units leak into storefront availability or fulfillment routing. Then keep an eye on committed and unavailable quantities, because that's where the "wait, why is this happening" moments usually come from.

Once it's set up, it's honestly calm. Inventory stops being a single messy number and starts looking like the business you actually run.

FAQs (Frequently Asked Questions)

Why should I track inventory that isn't for sale or fulfillment in Shopify ?

Tracking non-sale and non-fulfillment inventory like samples, damaged units, marketing kits, or quarantine stock ensures accurate counts for internal management, accounting, and operational purposes. Shopify recognizes these as inventory but requires you to decide how they affect customer purchasing and fulfillment processes.

How does Shopify handle inventory tracking for items not intended for sale ?

Shopify tracks inventory per variant and location. Items not for sale are typically managed through product or variant availability settings such as sales channels or draft status. Non-fulfillable stock is controlled via location settings that determine whether a location can fulfill orders.

What is the best method to manage non-sellable or non-fulfillable inventory in Shopify ?

The cleanest approach is to create dedicated non-fulfillment locations (e.g., Samples, Damaged, Internal Use) in Shopify where you park stock that you want counted but never used for new orders. These locations are configured not to fulfill online orders, protecting customer-facing availability and fulfillment workflows.

Can you explain key Shopify inventory terms like On-hand, Available, Committed, and Unavailable ?

Sure! 'On-hand' is the physical count of stock at a specific location. 'Available' typically means on-hand minus committed units and indicates what can be sold now. 'Committed' refers to units reserved for orders. 'Unavailable' represents inventory present but temporarily unusable due to system constraints like transfers or holds.

Why are locations crucial in managing Shopify inventory effectively ?

Locations determine where inventory physically resides and which stocks can fulfill orders. Normal warehouse locations fulfill orders, while non-fulfillment locations serve as buckets for counting inventory without participating in order routing. Inventory tracking operates per variant per location, making location setup essential.

How can I prevent non-sale inventory from affecting my storefront's availability ?

By placing non-sale or non-fulfillment stock in dedicated locations configured not to fulfill online orders, these units won't inflate customer-facing availability. This ensures customers only see sellable stock linked to active fulfillment locations, maintaining accurate storefront representation without accidental sales of restricted items.

About the author

Updated on Jun 16, 2026