Hide your wholesale catalog from retail customers
You have one Shopify store, two audiences, and one set of prices you cannot let the wrong audience see.
Prime Lock hides an entire collection behind a customer tag and enforces the rule at checkout, not just in the theme.
The problem
The first attempt is almost always a second store. You duplicate the catalog, pay a second subscription, sync inventory with a spreadsheet or a $40/month app, and discover a month later that the two stores have drifted apart. Trade buyers keep ordering discontinued SKUs because the wholesale store never got the update.
The second attempt is theme code. Someone wraps the wholesale collection template in `{% if customer.tags contains 'wholesale' %}` and calls it done. It holds until the collection appears in the store's search results, the sitemap, a Google index of `/collections/wholesale`, or the JSON endpoint at `/collections/wholesale/products.json`, which ignores your Liquid entirely and returns every product with its price. A competitor does not need to be clever to find that.
The third attempt is Shopify's store password. It works, and it protects everything, including the retail storefront you need to keep selling. That is the wrong tool when only part of the catalog is confidential.
How Prime Lock does it
Five minutes in the Prime Lock admin. No theme edits, no duplicate store, no manual price lists.
- 1
Lock type → Hide price and add to cart
Products stay in the catalog and stay indexable, but the price and the buy button are removed server-side for anyone who does not qualify.
- 2
Applies to → Collection → Wholesale
Pick the collection once. Every product you add to it later inherits the lock automatically: that is the whole reason to lock a collection rather than a product list.
- 3
Who can unlock → Customers with tags → wholesale, distributor
Any customer carrying either tag sees trade pricing. Tags come from your approval queue, a CSV import, or whatever CRM already tags your accounts.
- 4
Also allow a secret link → Off
Leave this off for a permanent catalog. Secret links are for time-boxed access, not for your standing trade price list.
- 5
Schedule → Always on
A wholesale catalog is not a campaign. No date window.
- 6
Storefront behavior → Replace price with "Log in to see price"
Write the sentence your buyers should read. Merchants running a vetted programme usually go with something like “Trade pricing: approved accounts only”.
- 7
Hide price from Google too → On
This strips the price from the product's structured data and from the Shopping feed. If you have MAP agreements with your brands, this is the setting that keeps you compliant while the page stays indexable.
What the customer sees
Switch the customer state to see what a retail shopper, a signed-in-but-unapproved account, and an approved trade buyer each get on the same URL.

Bulk Cotton Tee · Case of 24
Northfield Apparel Co. · SKU NF-TEE-C24
Trade pricing: approved accounts only
The product page is still indexable by Google, only the price is withheld.
Why enforcement matters here
Suppose a retail shopper guesses the handle, or a trade buyer forwards a cart permalink like `/cart/44821994:1` to a friend. With a theme-level or CSS-level hide, that link works perfectly: the cart is built by Shopify's cart endpoint, which never reads your Liquid conditionals, so the variant lands in the cart at the trade price and checkout completes. You find out when the order confirmation arrives.
Prime Lock validates the cart inside a Shopify Function at checkout. The Function reads the same lock rules and the same customer tags, sees no `wholesale` or `distributor` tag on the session, and blocks the order with a message. The permalink still resolves; it just cannot be paid for. That is the difference between hiding a price and enforcing a price.
Running retail and trade from one catalog
The setup above assumes a separate Wholesale collection, which is the cleanest arrangement and the one to prefer if you are starting fresh. But plenty of stores sell the same physical product to both audiences, at different prices, and do not want two product records competing for the same search term.
In that case, lock by product rather than by collection, and pair Prime Lock with a pricing app that reads the same tags. The product page stays single and indexable, the retail price shows to the public, and the trade price replaces it for customers carrying your tag. Discount Prime is our sibling app for exactly this and reads the identical tags, so one tag decides both who sees what and what they pay.
- One product record keeps your ranking history and your reviews in one place rather than splitting them.
- MAP obligations usually apply to the publicly displayed price, so the public retail price is the one that must stay compliant.
- Enable Hide price from Google too on the locked variant so the trade price never reaches structured data or the Shopping feed.
The mistake that costs you the channel
The most common error is locking the whole collection page rather than the prices on it. A retail shopper who cannot see the products at all has no reason to apply for a trade account, and Google has no catalog to index. Keep the products visible, withhold the number, and put the application link exactly where the price used to be. The gate becomes your lead-generation form instead of a dead end.
Related
Blog
Hiding prices on Shopify: what is actually built in
What the platform gives you for free, and the exact point where it stops.
ReadBlog
Locked pages and SEO
Keeping a gated collection indexable without leaking prices to the crawler.
ReadDocs
How customer tags work
Where tags come from, how they sync, and how the Function reads them.
ReadDecide who gets to see your store.
Early access opens with the free plan. Unlimited locks, enforced at checkout.
No newsletter. One email when Prime Lock is live.