Skip to main content
Use product availability controls to decide how unavailable products affect recurring orders and which products customers can select in the customer portal. Products can be unavailable because they are marked unavailable in Firmhouse or, for eligible Shopify-connected projects, because their Shopify inventory is out of stock.

Configure product availability rules

This section appears only after the feature is enabled for your project.
  1. Go to New Features
  2. Enable Product availability & stock rules
  3. Go to Settings > Subscription model
  4. Find Product availability & stock rules
  5. Choose how Firmhouse should handle orders containing unavailable products
  6. Click Update project

Choose the order creation behavior

When Keep creating orders is selected, Firmhouse keeps creating recurring orders and Shopify billing attempts even when a product in the next order is unavailable. When Skip order and advance billing date is selected, Firmhouse checks the products in the next local order before creating the order or Shopify billing attempt. If one of those products is unavailable:
  • Firmhouse does not create the recurring order or Shopify billing attempt
  • the subscription moves to the next cycle
  • one-off add-ons included in the next order are checked too
With this behavior selected, manually creating an order from the admin with Ship now checks the products that would be included. Shipping all active products is blocked if any included product is unavailable. Shipping an individual product is blocked only when that selected product is unavailable. Firmhouse shows an error listing the unavailable products instead of creating the order.

How Firmhouse determines availability

Firmhouse uses the product’s availability in Firmhouse as the source of truth. This is the product availability shown and managed in the Firmhouse admin, or via making product unavailable in Shopify for projects with automatic product sync enabled.

Use Shopify stock levels

For Shopify-connected projects with automatic product sync enabled you can additionally let Firmhouse respect Shopify inventory levels. This is useful when products stay active in Shopify and only their stock drops to zero. The setting is only available when your project uses automatic product sync, since stock levels are kept up to date by the sync. The same Product availability & stock rules section also exposes this option:
  1. Go to New Features
  2. Enable Product availability & stock rules
  3. Go to Settings > Subscription model
  4. Find Product availability & stock rules
  5. Check Treat out-of-stock Shopify products as unavailable for new orders
  6. Click Update project
When enabled, the automatic product sync keeps each product’s stock level up to date and marks a product as out of stock when its tracked Shopify inventory is depleted. Out-of-stock products:
  • are excluded from the customer portal, so customers cannot add or swap to them
  • are treated as unavailable by the order creation behavior above, so orders are skipped when Skip order and advance billing date is selected
  • show an Out of stock label on the products page in the Firmhouse admin
  • remain available when adding a product to an existing subscription in the Firmhouse admin, where the Out of stock label makes the stock status clear before selection
  • show an Out of stock badge next to the product in the subscription’s Active Products list in the Firmhouse admin and on the customer portal dashboard, for subscriptions that already contain the product. Themes rendering their own Liquid can use the out_of_stock attribute on the ordered product drop to render an equivalent badge in a customized dashboard template.
The product’s availability set in Firmhouse is not changed; as soon as the product is back in stock in Shopify, it becomes orderable again after the next product sync. Adding an out-of-stock product to a subscription from the admin does not override its stock status. The customer portal and recurring-order behavior continue to respect the Shopify inventory level.

When is a product considered out of stock?

Firmhouse follows Shopify’s own sellability rules: a product is marked out of stock only when Shopify itself would refuse to sell it. All of the following must apply to the product variant in Shopify:
  • Track quantity is enabled for the variant
  • Continue selling when out of stock is disabled for the variant
  • the quantity sellable through online channels is zero or below — this counts inventory at locations that fulfill online orders, not the total across all locations. Note that availability shown to an individual customer can still differ when Shopify limits inventory by customer location, for example with Shopify Markets.
This means two per-variant Shopify settings can override the feature: products with untracked inventory, or with Continue selling when out of stock enabled, always remain in stock in Firmhouse — even when their inventory shows zero. If you want out-of-stock products to pause ordering, make sure quantity tracking is on and overselling is off for those variants in Shopify.

Warn customers in the upcoming order notice

The default Upcoming order notice email warns customers when a product in their next order is out of stock, and marks the affected products in the order summary with a one-click Swap this product link. The link is a hotlink: it logs the customer in automatically and opens the swap flow for that product in the customer portal, so they can pick a replacement before their renewal date and their order is not skipped. New projects get this text out of the box. If you customized your upcoming order notice before this was added, you can add the same warning to your own template with Liquid:
And label each out-of-stock product inside the products loop, linking straight to its swap flow:
The project.product_replacements_enabled? check makes sure the link only renders when the replacement flow is actually available in your customer portal, so customers are never sent to a page they cannot reach. product.replace_url points to the replacement flow for that specific product, and the ssc_hotlink filter turns any customer portal URL into a login link that is valid for one week by default. Pass a custom ISO 8601 duration to change the validity, for example {{product.replace_url | ssc_hotlink: "P2W"}} for two weeks. If your project uses the variant swap flow instead — where customers exchange a product for another option, scoped to the same product group when Product swapping is configured that way — link to product.swap_variant_url instead:
Both URLs work with ssc_hotlink, so the customer lands directly in the flow without logging in. Use replace_url when customers should pick any replacement from the catalog (requires product changes to be enabled in the customer portal), and swap_variant_url when they should switch between variants of the same product. These are the same flows behind the replacement and swap buttons on the dashboard product listings. The out_of_stock variable is only true when Shopify stock levels are enforced as described above, so the warning never shows for projects that don’t use this feature. See Edit transactional email templates for how to edit the template.

Get notified about stock changes

When Shopify stock levels are enforced, outgoing webhooks and the upcoming order notice email let you and your customers react at each stage of a product going out of stock:
  • When the product goes out of stock: the product_out_of_stock and subscription_product_out_of_stock webhook events fire immediately, so you can trigger a customer notification (for example via Klaviyo) as soon as it happens.
  • Before the next renewal: the subscription_upcoming_billing webhook exposes an in_stock field per product so you can branch on it in your own automations, and the default upcoming order notice email above already warns the customer directly.
  • At renewal, if the order is skipped: the recurring_order_skipped webhook fires with reason: out_of_stock, so external systems and merchant-side automations know why the order didn’t happen. If you enable the native Recurring order skipped email, Firmhouse also tells the customer that no order was placed and asks them to review their subscription.
See Product stock availability webhook events, Subscription upcoming billing webhook event, and Recurring order skipped webhook event for setup and payload details.

Enable the recurring order skipped email

The skipped-order email is separate from the Upcoming order notice. The upcoming notice warns the customer before renewal; the skipped-order email confirms that Firmhouse did not create the order.
  1. Go to Settings > Email configuration.
  2. Open Order Activity > Recurring order skipped.
  3. Switch the email from Off to On.
  4. Customize the template if needed, then click Save changes.
Repeated skips send at most one email per subscription per day. See Supported customer emails overview for the other skip reasons and delivery limits.