Table of Contents

Shopify Variant Inventory Policy: DENY vs CONTINUE and How to Change It

Table of Contents

The Shopify variant inventory policy decides whether customers can still buy a product variant after its stock reaches zero. It has two values. DENY, the default, stops sales when the variant is out of stock. CONTINUE lets customers keep ordering, which is how you sell backorders, quick restocks and made-to-order items. In the admin it’s the “Continue selling when out of stock” checkbox, in the product CSV it’s a column with deny or continue, and in the GraphQL Admin API it’s the inventoryPolicy field on each variant.

Below I cover what each value does, where to change it, the API details developers need, and when overselling is a smart choice rather than a mistake.

What the Shopify variant inventory policy controls

Every variant (each size, color or other option) carries its own policy. Shopify’s API reference defines the two values plainly:

Value What Shopify says Typical use
DENY (default) Customers can’t buy the variant after it’s out of stock Normal stocked products
CONTINUE Customers can buy the variant after it’s out of stock Backorders, quick restocks, pre-orders, made-to-order

The policy only matters when Shopify is tracking inventory for that variant. Tracking lives on the variant’s inventory item, as a setting called “Track quantity” (Shopify’s pages also call it “Inventory tracked”). Shopify’s help center says you can select “Continue selling when out of stock” only when tracking is on.

If tracking is off, Shopify isn’t counting stock, so there’s no zero to stop at. Shopify notes that made-to-order items, services and digital goods may not need tracking at all. In practice, an untracked variant stays available to buy regardless of the policy, which is why I’d keep tracking on for anything physical and use the policy deliberately.

How to change it in the Shopify admin

For one product:

  1. Go to Products and open the product.
  2. Open the variant you want to change, or edit the product if it has no variants.
  3. In the Inventory section, turn on Track quantity.
  4. Under selling when out of stock, tick Continue selling when out of stock to allow orders at zero, or leave it unticked to stop sales.
  5. Click Save.

For many products at once, use the bulk editor. Shopify’s steps: select the products, click Bulk edit, then Columns > Continue selling when out of stock to add that column. Tick or untick each row and click Save. It’s the quickest way to switch a whole collection to backorder before a busy season.

Two caveats from Shopify’s help pages:

  • Shopify POS ignores it. Staff can sell past zero in person, and POS warns them before they sell an item that isn’t available.
  • Locations matter. With several locations, a variant can show as out of stock online if the location that fulfills online orders has none, even when another location has stock.

Changing it with a product CSV

Shopify’s current product CSV template has a column called Continue selling when out of stock, with two values:

CSV value Meaning
deny Default. The variant can’t be bought once inventory reaches 0
continue Customers can keep buying at 0

The related Inventory tracker column takes shopify when Shopify tracks stock, or a fulfillment service name, and blank means not tracked. Older exports used the header Variant Inventory Policy for the same field. Shopify says older templates may have different column names and stays compatible with them, so an old file should still import. I’d still export a fresh template before a big edit, change only the columns you need, and import a small test file first.

Changing it with the GraphQL Admin API

Developers should use the GraphQL Admin API. Shopify made the REST Admin API legacy on October 1, 2024, and the REST product variant endpoints were deprecated from API version 2024-04. New App Store submissions had to use the new GraphQL product APIs from January 6, 2025, all public apps had to migrate by February 1, 2025, and new public apps must be GraphQL-only from April 1, 2025.

In GraphQL, the field is inventoryPolicy on ProductVariant, using the ProductVariantInventoryPolicy enum (DENY or CONTINUE). To change it, use productVariantsBulkUpdate, which needs the write_products scope and handles up to 2,048 variants at a time.

mutation SetInventoryPolicy($productId: ID!, $variants: [ProductVariantsBulkInput!]!) {
  productVariantsBulkUpdate(productId: $productId, variants: $variants) {
    productVariants { id inventoryPolicy inventoryItem { tracked } }
    userErrors { field message }
  }
}

With variables like:

{
  "productId": "gid://shopify/Product/123",
  "variants": [
    { "id": "gid://shopify/ProductVariant/456",
      "inventoryPolicy": "CONTINUE",
      "inventoryItem": { "tracked": true } }
  ]
}

Swap in your own IDs. Always read userErrors: a mutation can return successfully while rejecting some variants. My rule for scripts is to log every error and re-query the variants afterward to confirm the change actually stuck.

Legacy REST. If you maintain an older integration, the REST field is inventory_policy with lowercase deny (default) or continue, and tracking is shown by inventory_management (shopify when tracked, null when not). Plan the migration rather than adding new REST code.

Themes. In Liquid, variant.inventory_policy returns continue or deny, and variant.available tells your theme whether the variant can be bought. That’s how themes decide whether to show “Add to cart” or “Sold out”.

A worked example: one popular size

Say you sell a hoodie in five sizes, and medium sells out every few weeks while your supplier restocks within four days. With DENY, the medium page flips to “Sold out” for those four days, and shoppers who wanted medium simply leave. With CONTINUE on the medium variant only, orders keep coming in, stock goes negative for a few days, and you ship as soon as the restock arrives.

The other four sizes can stay on DENY. That’s the strength of a per-variant setting: you aren’t forced into one rule for the whole product. Small, extra-large and the rarer colors often sell slowly, so overselling them would leave customers waiting for stock you might never reorder.

Two habits make this safe. First, add a short line to the product description or email confirmation when an item ships later than usual, so nobody is surprised. Second, watch the negative numbers. A variant sitting at minus forty tells you the restock you planned isn’t big enough, and it’s far better to spot that early than after a wave of refund requests.

CONTINUE is not the same as a pre-order

This trips up a lot of stores. Setting a variant to CONTINUE simply lets the order through at zero stock. The customer sees a normal product page, pays the full price and expects normal shipping, with no label telling them the item is on backorder.

Shopify’s real pre-order feature works differently:

Variant set to CONTINUE Shopify pre-orders
Setup One checkbox or field Needs a pre-order app built on selling plans
Payments Any checkout Shopify Payments or PayPal Express (plus some other gateways per developer docs)
Customer messaging None by default App shows pre-order wording and timing
Inventory reservation Not applicable Selling plan sets when stock is reserved (on sale or on fulfillment)
Limits Few Not available on Shopify POS, draft orders or B2B

Don’t confuse the variant inventoryPolicy with the selling plan’s own inventory policy. The selling plan setting, reserve, takes ON_SALE or ON_FULFILLMENT and controls when inventory is reserved, not whether a sold-out variant can be bought.

Honestly, if a customer will wait more than a few days, I’d use a proper pre-order app so the wait is clear before they pay. A plain CONTINUE setting is better for items you can restock quickly.

When to use CONTINUE, and when not to

Shopify itself suggests continuing to sell for quick restocks, pre-orders and made-to-order items. Here’s how I’d decide for each product:

Situation Policy I’d choose Why
Stocked item, slow or uncertain restock DENY Avoids selling what you can’t ship
Supplier restocks within days CONTINUE Keeps sales running through short gaps
Made to order or print on demand CONTINUE, or tracking off There’s no real stock to run out of
Limited edition or drop DENY Overselling a fixed quantity breaks promises
Long wait for new stock Pre-order app Customers need to see the wait before paying
Products also sold on Amazon or other channels DENY Shared stock oversells fast on several channels

The last row matters for multichannel sellers. If the same inventory feeds Shopify and a marketplace, CONTINUE on Shopify can quietly oversell stock that already left through another channel. In my view, that’s where inventory software earns its fee; see our guide to Amazon inventory management for the wider workflow.

Auditing the policy across your catalog

Settings drift over time. Staff tick a box for a promotion, an app changes variants during an import, or a supplier feed overwrites fields. Every few months I’d export the products CSV and filter the “Continue selling when out of stock” column for continue. Any variant on that list should have a clear reason: a short restock time, made-to-order production or an active backorder plan. Anything else goes back to deny.

The same check matters after you install or remove an inventory, pre-order or dropshipping app. Some apps change variant settings to do their job, and they don’t always restore them when you uninstall. A five-minute export is cheaper than a week of oversold orders.

Common mistakes

  • Leaving CONTINUE on after a promotion. Check your settings once a backorder period ends.
  • Turning tracking off by accident. Without tracking, the variant never sells out.
  • Using CONTINUE as a pre-order system. Customers get no warning about the wait.
  • Forgetting POS. In-store staff can sell past zero regardless of the online policy.
  • Writing new REST code. The product REST endpoints are deprecated, so build on GraphQL.

For more on running a Shopify store, see when Shopify pays out, how to find your Shopify best sellers URL, and Shopify dropshipping suppliers. If you’d like a team to set this up properly, that’s our Shopify store development service.

FAQ

What is the Shopify variant inventory policy?

It’s the per-variant setting that decides whether customers can buy after stock hits zero. DENY stops sales; CONTINUE allows them.

What is the default inventory policy in Shopify?

DENY. Shopify’s API and CSV both default to stopping sales when a tracked variant is out of stock.

Where is the inventory policy in the Shopify admin?

In the product or variant’s Inventory section, as the “Continue selling when out of stock” checkbox. It’s only available when inventory tracking is on.

How do I change the inventory policy with the API?

Use the GraphQL Admin API mutation productVariantsBulkUpdate and set inventoryPolicy to DENY or CONTINUE for each variant. It needs the write_products scope.

Is “continue selling when out of stock” the same as pre-orders?

No. It just lets orders through at zero stock. Shopify pre-orders need an app built on selling plans and show customers the wait.

Does the inventory policy apply to Shopify POS?

No. Shopify says the setting doesn’t apply to POS, where staff are warned but can still sell past zero.


Last updated: October 11, 2026. Sources: Shopify, ProductVariantInventoryPolicy enum; Shopify, ProductVariantsBulkInput; Shopify, productVariantsBulkUpdate; Shopify, REST product variant (legacy); Shopify changelog, new GraphQL product APIs; Shopify Liquid, variant object; Shopify Help, set up inventory tracking; Shopify Help, selling out of stock products; Shopify Help, product CSV; Shopify Help, pre-orders; Shopify, deferred purchase options; Shopify, SellingPlanInventoryPolicyInput.

We reduce your TACoS by 20% in 60 days

Joined by 200+ top-tier Amazon brands

Free Strategy Session

Personalized guidance and answers by speaking directly with experienced experts