Overview
For years, hiding a single variant on Shopify meant duplicating the product, deleting SKUs, or hacking the theme with Liquid. In May 2026, Shopify shipped variant-level publishing, giving you native, per-channel control over each variant. This guide walks you through staging unreleased variants, restricting region-specific SKUs like plug types, keeping bulk-quantity variants B2B-only, and managing limited editions: all without losing sales history or duplicating products.
Contents
- What changed in May 2026
- When should you use variant-level publishing?
- Step 1 - Audit your catalog and publications
- Step 2 - Stage an unreleased variant before launch
- Step 3 - Restrict region-specific variants to the right markets
- Step 4 - Keep bulk variants B2B-only
- Step 5 - Manage limited editions and channel exclusives
- Step 6 - Automate with the GraphQL Admin API
- Tips for rolling this out cleanly
- FAQ
What changed in May 2026
On May 7, 2026, Shopify released variant-level publishing for sales channels and catalogs. It helps merchants control exactly which product variants are visible to buyers in each channel or catalog without having to delete variants or create duplicate products, and you can now unpublish individual variants from the product details page, the variant details page, or the bulk editor.
Under the hood, variants can be published or unpublished per publication (channel or catalog) in API version 2026-07, giving merchants and your apps fine-grained control over where each variant is visible without deleting variants, duplicating products, or hiding them via storefront code. The change is additive: product-level publishing is unchanged and still takes precedence, and a product must be active and published to a channel for any of its variants to render there.
Defaults are merchant-friendly. Variants default to published (opt-out model), and existing apps that publish at the product level continue to work without modification.
When should you use variant-level publishing?
Shopify's own documentation lists four canonical use cases. Product launches let you prepare new colorways or sizes without exposing them to buyers until you're ready; region-based restrictions hide variants from certain markets due to regulatory or shipping constraints; channel-specific catalogs show different variant selections on different sales channels; and lifecycle management lets you retire variants from storefronts without deleting them, preserving historical data and analytics.
If you've ever set a variant's inventory to zero just to hide it, duplicated a product to gate access for wholesale buyers, or kept a "pre-release" SKU in a separate draft product, this feature replaces all of those workarounds. It also fills a gap merchants have been requesting in Shopify Community threads for years.
Side note - Variant publishing is not yet supported everywhere. Publishing and unpublishing product variants isn't yet available for Point of Sale, so plan around that limitation if you sell in physical retail.
Step 1 - Audit your catalog and publications
Before flipping any switches, map out the publications you'll be working with. The publishing framework is built on catalogs and publications: AppCatalog represents sales channels like the Online Store, Point of Sale, or custom channels; MarketCatalog represents international markets such as North America or Europe; and CompanyLocationCatalog represents B2B company locations.
Why this matters: every place a buyer can see your products (online store, Google channel, EU market, a specific B2B company location) is a publication you can toggle independently for each variant. Without a clear inventory of those publications, you'll end up hiding the wrong variant in the wrong place.
- In your Shopify admin, go to Settings > Apps and sales channels to list every channel that has a publication.
- Go to Settings > Markets and list every active market.
- If you're on Shopify Plus with B2B, go to Customers > Companies and note the company locations that have their own catalogs.
- Write down which variants should appear in each. You'll use this as your single source of truth.
What if I have dozens of publications?
For complex catalogs, manage publishing through the GraphQL Admin API or the bulk editor rather than the per-variant UI. We cover the API approach in Step 6.
Step 2 - Stage an unreleased variant before launch
This is the cleanest use case. You're launching a new colorway next Friday, but the product page is live today. Previously you'd either duplicate the product or wait until launch day. Now you can create the variant in an unpublished state.
Variants can be created in an unpublished state in order to prevent early exposure to buyers, and variant publishing state persists across product publishing changes, so you can configure variant visibility before publishing the product.
- From your Shopify admin, go to Products and open the parent product.
- Add the new variant in the Variants section.
- Before saving, follow Shopify's guidance: when you add a new variant to a product, you can set the variant to be initially unpublished on specific sales channels or catalogs, and you need to set your new variant's sales channel and catalog publishing availability before you save your changes to the product.
- Click Manage publishing on the new variant and deselect the Online Store (and any other public channels) until launch.
- On launch day, reopen the variant, click Manage publishing, and re-enable the channels.
What if the variant leaks anyway?
Check the parent product's status first. A product must be active and published to a channel for any of its variants to render there, but the opposite holds too: if the product is active and the variant is published, it will show. Confirm the variant is unpublished from the specific channel, not just hidden by inventory or theme code.
Step 3 - Restrict region-specific variants to the right markets
Plug types, voltage, regulated ingredients, oversized items: every global merchant has variants that only make sense in certain regions. The old workaround was a duplicate product per region with confusing SKU mappings. Now you can keep one product and gate variants by market.
- Go to Products and open the product with regional variants (for example, a hairdryer with US, EU, UK, and AU plug variants).
- Click the variant you want to restrict, then click Manage publishing.
- In the dialog, deselect the markets where this plug type isn't sold. To manage publishing for multiple variants, select the relevant variants, and then click ... > Manage publishing, then in the Manage publishing dialog, deselect the Sales Channels or Catalogs that you want to unpublish your variants from.
- Repeat for each region-specific variant. Save.
Tip - Pair this with Shopify Markets pricing so the visible variant also has the correct local currency and tax behavior.
What about catalogs with custom pricing?
Be explicit. If you use catalogs which have custom pricing for the products that a catalog contains, then any variants that aren't published to the catalog don't receive the custom pricing adjustment. In practice, an unpublished variant simply won't appear; just make sure the variants you do publish have the right price list assignment.
Step 4 - Keep bulk variants B2B-only
A common Plus pattern: you sell a 12-pack on the consumer storefront and a 144-pack case to wholesale buyers. With variant-level publishing, both variants live under the same product, but the case-pack variant is only visible to B2B company locations.
- Open the product in your admin.
- Click the bulk-quantity variant (for example, "Case of 144").
- Click Manage publishing.
- Deselect the Online Store and any consumer-facing channels. Keep the B2B catalog (CompanyLocationCatalog) selected.
- Save. Repeat in reverse for any DTC-only variant you want to hide from wholesale buyers.
This is exactly the scenario Shopify highlights in the changelog: retire discontinued options, restrict region-specific variants like plug types to the right markets, offer bulk-quantity variants only to B2B customers, or keep limited-edition variants exclusive to your online store.
What if I accidentally unpublish every variant?
The product disappears from that channel. A product is displayed on a channel or catalog only when at least one of its variants is published; if you unpublish every variant, then the parent product is no longer displayed, and if you republish any variant, then the product is displayed again. Re-enable at least one variant to bring the product back.
Step 5 - Manage limited editions and channel exclusives
For drop culture brands, channel-exclusive variants are a merchandising lever. A "Black Friday Exclusive" colorway might be online-only; an "In-store Only" variant might be POS-only (once that surface ships); a podcast collab might be limited to one custom storefront app.
- Create the limited-edition variant on the parent product.
- Click Manage publishing and select only the channel you want to expose it on.
- After the drop ends, either unpublish from that channel to remove it from view, or leave it unpublished but in your admin for historical analytics.
Why keep it instead of deleting? Lifecycle management: retire variants from storefronts without deleting them, preserving historical data and analytics. You retain SKU references for returns, reorders, and reporting.
Step 6 - Automate with the GraphQL Admin API
If you're a developer or running an app, you can manage variant publishing programmatically. The Publishable interface is implemented by Product, ProductVariant, and Collection, giving you the same publishing controls across all three resource types, and you use publishablePublish when managing a single product's channel presence.
Use API version 2026-07 or later. A minimal mutation to publish a single variant to one or more publications looks like this:
mutation PublishVariant($id: ID!, $input: [PublicationInput!]!) {
publishablePublish(id: $id, input: $input) {
publishable {
... on ProductVariant {
id
title
}
}
userErrors { field message }
}
}
Pass a ProductVariant GID (for example, gid://shopify/ProductVariant/123) and an array of publication IDs. If the variant is already published to that publication, the mutation succeeds with no change.
To create new variants in an unpublished state, create both include a variant.published: false field to create variants as unpublished. To query state, use resourcePublicationsV2 and unpublishedPublications on the ProductVariant object.
What if I'm building a sales channel app?
Read variant publication state, don't just rely on the product. Channels or pseudo channels that do not use product feeds and rely on reading publication state via the admin graphql API should implement support by reading the respective publication state of variants via ProductPublicationsV2. For feed-based channels, product feed webhooks fire with a product update for variant added and deleted when variants are published to the feed's channel.
Tips for rolling this out cleanly
- Tip - Audit existing "duplicate product" workarounds first. If you previously created two versions of a hairdryer (US/EU), consolidate them into one product with variant-level publishing per market.
- Tip - Use the bulk editor for migrations. You can now unpublish individual variants from the product details page, the variant details page, or the bulk editor.
- Tip - Don't rely on inventory-to-zero tricks anymore for permanent hides. Native unpublishing is cleaner, doesn't confuse your reporting, and persists across product publishing changes.
- Tip - For agencies, document which publications each client uses and which variants are gated where. Variant-level state is easy to misread when there are many markets and catalogs.
FAQ
Does variant-level publishing work on all Shopify plans?
The feature is live in the admin and through API version 2026-07 for sales channels and catalogs. B2B catalogs (CompanyLocationCatalog) are a Shopify Plus feature, so the wholesale use case requires Plus. The market and channel use cases work on standard plans.
Will unpublished variants still show up in storefront search or collection filters?
No. For your online store, unpublished variants also don't display in search results or collection filtering results, and only your published variants, and their options and pricing, are displayed.
Can I schedule a variant to go live on a specific date?
Not yet at the variant level. You can't set a publishing date for individual product variants. Use a Shopify Flow workflow or a manual launch to publish the variant on your target date.
What happens to my existing apps that publish products?
They keep working. Existing apps that publish at the product level continue to work without modification; apps that publish products require no changes and should continue calling publishablePublish on products as before. Newly created variants default to published on the parent product's publications.
Does variant-level publishing override product-level publishing?
No. The two are independent, with product-level taking precedence for visibility. Variant and product publishing states are independent: publishing or unpublishing a variant doesn't affect the parent product's publication state, and publishing or unpublishing a product doesn't change any variant's publication state. The product must be active and published to the channel before any variant can render there.
How do I check a variant's current publication state through the API?
Query the ProductVariant object using the Publishable interface fields. The ProductVariant object includes all fields from the Publishable interface, and you can check whether a variant is published to a specific channel, list all of its publications, or count its available publications. The most common fields are resourcePublicationsV2, unpublishedPublications, and publishedOnPublication.