Configure product availability rules
This section appears only after the feature is enabled for your project.- Go to New Features
- Enable Product availability & stock rules
- Go to Settings > Subscription model
- Find Product availability & stock rules
- Choose how Firmhouse should handle orders containing unavailable products
- 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
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:- Go to New Features
- Enable Product availability & stock rules
- Go to Settings > Subscription model
- Find Product availability & stock rules
- Check Treat out-of-stock Shopify products as unavailable for new orders
- Click Update project
- 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_stockattribute on the ordered product drop to render an equivalent badge in a customized dashboard template.
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.
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: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:
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_stockandsubscription_product_out_of_stockwebhook 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_billingwebhook exposes anin_stockfield 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_skippedwebhook fires withreason: 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.
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.- Go to Settings > Email configuration.
- Open Order Activity > Recurring order skipped.
- Switch the email from Off to On.
- Customize the template if needed, then click Save changes.