Home
Build your offer

Fulfillable inventory and preorders

How STOQ uses Shopify's available inventory and fulfillable locations to decide when the Preorder button appears.

The Preorder button doesn't react to your raw stock count: it reacts to what Shopify calls available inventory, which is already adjusted for reservations and for which locations can actually ship to online customers. This article explains that Shopify concept, then explains exactly how STOQ reads it to decide when a variant is out of stock (or in stock) for preorder purposes.

Note

On-hand, committed, and fulfillable quantities, and which locations fulfill online orders, are Shopify platform features managed in your Shopify admin (Products → Inventory, and Settings → Locations). STOQ doesn't create or change these numbers, it only reads them to decide when to show the Preorder button.

The Shopify concept: on hand vs. available

For each variant, at each location, Shopify tracks several inventory quantities. The two that matter for preorders are:

QuantityWhat it means
On handThe physical count of units at a location, regardless of whether any are already promised to a customer.
AvailableOn hand minus committed (units already tied to an unfulfilled order). This is the number Shopify actually offers for new sales, and it's what determines whether checkout treats a variant as in stock or out of stock.

A variant can show 10 units on hand but 0 available if 10 are already committed to open orders: in that case, Shopify already treats the variant as out of stock for new purchases, even though the on-hand shelf count is positive. STOQ's out-of-stock detection is built on this available figure, not the on-hand count, so it matches what Shopify's own checkout would do. Shopify also aggregates a "fulfillable" quantity, available inventory at locations that fulfill online orders; STOQ's logic mirrors this directly (see Fulfillable locations, below).

Fulfillable locations: not every location counts

Each location in your Shopify admin has a Fulfill online orders setting (Settings → Locations → location detail). Retail-only locations (for example, a store counter that only serves in-person POS sales) typically have this switched off, because their stock can't ship to an online customer.

STOQ filters out locations where Fulfill online orders is off before summing a variant's available inventory for storefront preorder decisions. This means:

  • Stock sitting at a POS-only or fulfillment-ineligible location is not counted when STOQ decides whether a variant is in stock or out of stock for the online Preorder button.
  • A variant can look "in stock" in your Shopify admin's total inventory count while still correctly showing the Preorder button on your storefront, because most of that stock lives at a location that can't fulfill the order.
  • This filter is skipped for POS-originated requests specifically, so a cashier at a physical location isn't blocked from selling stock that's genuinely on the shelf in front of them, even if that location wouldn't count for an online sale.
Warning

This fulfillable-locations filter is a backend behavior, there's no switch for it in the STOQ dashboard. If your store's preorder eligibility looks like it's ignoring stock at a specific location, contact STOQ support and mention the location name; this is the setting they'll check.

How STOQ layers location filtering

STOQ narrows down which locations count for a variant's inventory in a fixed order:

1

Fulfillable locations (baseline)

Keep only locations with Fulfill online orders on and marked active. Skipped for POS-originated checks.

2

Market locations (if you use Shopify Markets)

If your shop has multiple markets configured with market-specific locations, narrow further to the locations tied to the market the shopper is browsing in.

3

Preorder location filter (if configured, single-market shops)

If you've turned on Filter locations for preorders (in the offer's Locations & Markets settings) and are on a single-market setup, narrow further to the specific locations you selected there. This step and the market-locations step are mutually exclusive: market filtering takes over when multiple markets are set up.

Whatever locations remain after these filters are summed, using each location's available quantity, to get the number STOQ treats as "this variant's stock" for preorder eligibility and the in-stock/out-of-stock metafields.

What this means for the Preorder button

The offer's inventory provider setting decides the rule (show the button when out of stock, or show it while in stock); the fulfillable/available inventory described above decides the number the rule is checked against.

Inventory providerButton appears when (using the filtered, available quantity)
Out-of-stock (default)Filtered available quantity is 0 or less, and Shopify's Continue selling when out of stock is enabled for the variant
In-stockFiltered available quantity is greater than 0

Because the quantity is already net of committed inventory and non-fulfillable locations, a variant can flip to (or from) preorder-eligible without any on-hand count changing at all, for example when an existing order's items become committed against the last available units, or when stock shifts between a fulfillable and a non-fulfillable location.

What customers will see

Customers never see "available," "committed," or "fulfillable" as such: they only see the Preorder button appear or disappear (or, for in-stock offers, remain as normal Add to cart when available stock exists and switch to Preorder once it doesn't). The underlying inventory math is invisible; only its outcome, which button shows, is customer-facing.

Verify it worked

  • In Shopify admin, open the variant's inventory detail and check the Available column at each location, not just On hand: this is the number STOQ is actually reacting to.
  • Confirm the location's Fulfill online orders setting (Settings → Locations) matches whether you expect that location's stock to count toward the online Preorder button.
  • If you use the single-market Filter locations preorder setting, confirm the locations selected there match your intent: stock at unselected locations won't count.
  • Remember STOQ caches inventory and variant data for a short window (a couple of minutes) before rechecking, and location settings can take up to an hour to refresh; Collection/All-products tracking also only scans every 15 minutes. A change may not be reflected on the storefront instantly. See Preorder inventory settings for the Collection/All-products polling details.

FAQ

Why does my variant show as out of stock for preorder purposes when Shopify's total inventory count looks positive?

Two common reasons: the remaining stock is committed to other unfulfilled orders (so available is 0 even though on hand isn't), or the stock lives at a location where Fulfill online orders is turned off, so STOQ doesn't count it toward the online storefront figure at all.

Does this fulfillable-locations behavior apply to POS preorder sales too?

No. It's specifically skipped for POS-originated inventory checks, so a location that can't fulfill online orders can still sell its stock in person through POS. See Preorders on Shopify POS for POS-specific preorder behavior.

Can I turn the fulfillable-locations filter on or off myself?

Not from the STOQ dashboard, there's no merchant-facing switch for it. It's a backend setting. If you think your shop needs it toggled, contact STOQ support.

How is this different from the 'Filter locations' option I see in Locations & Markets?

Filter locations is a manual, merchant-configured list:

  1. You pick it yourself, and it's layered on top of (after) the fulfillable-locations baseline.
  2. It only applies when your shop uses a single market.
  3. If you use Shopify Markets with multiple markets, market-to-location mapping is used instead of the manual filter.
Will a change to a location's 'Fulfill online orders' setting show up on my storefront immediately?

Not instantly. STOQ refreshes different data on different schedules:

  1. Inventory and variant data are cached for a couple of minutes at a time.
  2. Your shop's location list (including each location's Fulfill online orders setting) is cached for up to an hour before refreshing.
  3. Collection/All-products tracking only rescans every 15 minutes.
  4. Give it some time, up to an hour in the worst case, before assuming something is wrong; see Preorder inventory settings for the Collection/All-products polling cadence.