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. 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. 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. 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. 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. 5

    Schedule Always on

    A wholesale catalog is not a campaign. No date window.

  6. 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. 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

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.

Decide 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.