How to add a back in stock button to your Shopify product pages
Three real routes for adding a notify-me button when a variant sells out: theme code, Shopify's native workarounds, and a purpose-built app block, plus what to check before you trust any of them.
07/05/2026

You have a product page with a sold-out variant, and you want a button there today that lets a customer say “tell me when this is back.” That is a small ask, but the actual options for building it range from a five-minute theme editor step to a multi-day custom build, and most of what you find searching for this mixes the two up. Here is what each route actually involves.
The three routes, honestly compared
Route 1: theme code, written or pasted in yourself. You add a Liquid snippet to your product template that checks variant availability and swaps the Add to Cart button for a form when the selected variant is out of stock. This is fully free and fully yours. It is also the option with the most ongoing cost, just not a cost you pay in dollars. Every theme update risks breaking the snippet if it touches the same template file. Every new product template (a different layout for a collaboration drop, a wholesale page) needs the same code added again by hand. And you still need somewhere for the emails to go: a spreadsheet, a basic email tool, or a database you build yourself, plus logic to actually detect the restock and trigger a send. The button is the easy 20 percent. Reliable detection and delivery is the harder 80 percent, and theme code alone does not give you either.
Route 2: Shopify’s native workarounds. Shopify does not ship a built-in back in stock notification feature as of mid-2026. What people mean when they ask about “native” options is usually one of two things. First, Shopify’s own customer management tools let you track whether a customer agreed to receive marketing emails, which is useful bookkeeping but is not a restock trigger by itself. Second, some merchants wire up a generic contact form (Shopify Forms, or a form block) to collect an email address on the product page, then manually email everyone on that list when the item restocks. This works at very small volume and falls apart fast: nothing ties the signup to the specific variant, nothing fires automatically when inventory changes, and you are the one remembering to check the list and send the email. It is a stopgap, not a system, and it is worth being honest with yourself about which one you are building.
Route 3: a purpose-built app added as a theme app block. This is the option most merchants land on once they realize routes 1 and 2 both dead-end at “now I need automated detection and sending,” which is a different problem than “now I need a button.” A back in stock app handles the button, the signup capture, the restock detection, and the send, as one connected piece, and it installs through Shopify’s theme app extension system rather than by editing your theme’s code directly. That distinction matters more than it sounds: an app block lives outside your theme files, so a theme update does not silently break it, and removing the app cleanly removes the block.
Step by step: adding the app-block button
If you go the app-block route, the actual setup looks roughly like this, though exact labels vary slightly by app:
- Install the app from the Shopify App Store and complete whatever onboarding it asks for (usually just connecting your store, no code).
- Open the theme editor. Go to Online Store > Themes > Customize.
- Navigate to a product template, since that is where the button needs to render.
- Add the app’s block. Click “Add block” inside the product information section, then look under the Apps tab for the block the app provides. Shopify’s own instructions for this walk through the same steps for any app block, not just this category.
- Position it where the Add to Cart button normally sits, since that is the moment a customer is already looking at.
- Save, then check a genuinely sold-out product page to confirm the button actually shows.
The step people skip is the last one, and it is the step that catches the most common configuration mistake. The button is supposed to appear only when the currently selected variant is out of stock, not whenever any variant of that product is unavailable. A product with five sizes where only Small is sold out should show the normal Add to Cart button for every other size and the notify button only when a shopper has Small selected. If your test shows the notify button sitting there for in-stock variants too, or missing entirely on the genuinely sold-out one, the block is not reading variant-level inventory correctly, and that is worth fixing before you rely on it, because a notify button that shows up on in-stock items trains customers to ignore it.
What to check before you trust any solution
The button rendering correctly is necessary and is also the smallest part of whether the whole system works. Before you commit to an app, or before you trust a theme-code build you or a developer wrote, ask these:
Does it detect restocks two ways, or one? Most apps watch for Shopify’s inventory update webhook and trigger a send from that. Webhooks are not guaranteed to fire every single time, so an app that only listens for the webhook can miss a restock silently, with no error, no alert, nothing. A more resilient setup also runs a periodic check that polls actual inventory levels on a schedule, independent of whether any webhook arrived, so a missed webhook is not a missed customer notification. Ask directly whether detection is webhook-only or webhook-plus-polling.
Does it pace sends, or blast them all at once? A popular item restocking can trigger hundreds or thousands of emails within the same minute. Sending that volume in one burst looks, to a receiving mail server, like the kind of pattern spam filters are built to catch, which can tank deliverability at the exact moment it matters most. A system with pacing controls releases a large batch in waves instead of all at once. Ask what happens, specifically, when a restock triggers two thousand notifications simultaneously.
Can you see an audit log? When a customer says “I never got my alert,” you need to be able to look up that specific subscriber and that specific product and see what actually happened: queued, sent, bounced, or never triggered at all. Without that record, every complaint is a guess. Ask the app to show you one real example from your own store’s send history before you assume the feature exists.
None of these three checks require technical knowledge to ask about. They just require asking, since a pricing page or a feature list will not tell you the answers on its own.
A note for EU stores: consent matters here
If you sell into the EU or UK, collecting an email address for restock alerts is a marketing consent question, not just a signup form question. The general practice under GDPR-adjacent rules is double opt-in: the customer submits their email, then confirms it through a follow-up email or link before they start receiving alerts. A single checkbox on a popup is thinner cover than a confirmed opt-in, and it is worth checking whether your back in stock tool supports double opt-in as a setting rather than assuming a plain signup form clears the bar. This is a genuine compliance question, and if you operate at any real volume in the EU, it is worth a few minutes with whoever handles your store’s privacy policy rather than guessing.
The short version
A back in stock button is easy to add. A back in stock system, one that detects restocks reliably, sends without tanking your deliverability, and gives you a record when something goes wrong, is the part worth being careful about. Kelso is built as a theme app block for exactly this: the button installs in a few minutes, detection runs on webhook plus a scheduled reconciliation check, and every send is logged per subscriber so a “did they get it” question has an actual answer. Whichever app you pick, ask the three questions above before you turn it on for real customers.