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 · 24 pack

Aspedan Supply · SKU BCT-24

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.

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.