Home Guides How to hide prices on Shopify

How to hide prices on Shopify

Every way to stop a price showing to the public: theme edits, customer accounts, the password page and gating apps. Which one fits which problem.

By Monochrome · Last updated 12 August 2026

There are four ways to stop a price showing on a Shopify storefront, and they solve genuinely different problems. Picking the wrong one is how people end up with a store nobody can find, or a "hidden" price that anybody can read in two clicks.

First, decide what you are actually hiding from

Be precise about this, because it changes the answer completely.

Hiding from the public, permanently. A trade catalogue, a private label, a wholesale range. Nobody sees a price without being approved first.

Hiding until a moment. A drop, a launch, a seasonal collection. Everyone gets in eventually; the question is when.

Hiding from some people. Retail customers see one thing, trade customers another. Two audiences, one storefront.

Hiding while you build. The store is not finished and you would rather nobody saw it yet.

Only the last of those is a job for the password page.

Option 1: edit the theme

You can wrap the price in a Liquid condition and be done in ten minutes:

{% if customer %}
  {{ product.price | money }}
{% else %}
  <a href="/account/login">Log in to see prices</a>
{% endif %}

This is the right answer more often than app companies like to admit. If your rule really is "logged-in customers see prices, nobody else does", and you are comfortable in your theme, stop reading. You do not need an app.

What it does not handle, and what tends to bring people back:

  • The buy button. Hiding a price does not stop a purchase. /cart/add still works, and so does a direct link. You have hidden a number, not closed a door.
  • Everywhere else the price appears. Collection pages, search results, the cart drawer, quick view, structured data in the page head, the JSON blob most themes print for their own JavaScript. Themes print prices in more places than anybody expects.
  • The lines around the price. "Tax included." "Shipping calculated at checkout." The instalments banner, which states the price outright, divided by four, and is drawn by an app you do not control.
  • Approving people. Every customer who wants access now has to be handled by you, by email, by hand.

Option 2: customer accounts and tags

A step up: require an account, tag the approved ones, condition the theme on the tag. Now you have retail and trade on one storefront.

This works, and it is how a lot of stores run for years. The costs are real though. Tag checks in Liquid run on every template that shows a price, so you are maintaining that logic in six places. Anyone can register an account, so "has an account" is not "is approved", and you still need a process. Customer tags are also readable in the browser on the storefront, so this is merchandising, not security.

Option 3: the password page

Shopify's built-in option, and the bluntest. It hides everything from everyone, including Google.

That last part is the part people discover late. A store behind the password page is not indexed, so it accumulates no search presence while it is up, and starts from nothing when it comes down. If you are pre-launch and nobody is looking for you yet, that costs you nothing. If you have an audience, it costs you all of them.

We wrote about when it is the right tool and when it is not separately.

Option 4: a gating app

An app that hides the price and the buy button, everywhere they appear, and gives you a way to let people in.

The thing worth checking before you install any of them, ours included, is whether the price flashes. The naive implementation hides prices with JavaScript after the page has loaded, which means the price is visible for a few hundred milliseconds and permanently visible in the page source. Ask how it works. The answer should involve CSS written into the page head before the theme paints anything, not a script that tidies up afterwards.

The second thing to check is what happens when the app's servers are down. There are two possible designs and both are defensible: fail closed, and your storefront breaks during their outage; or fail open, and prices become visible during it. What is not defensible is not knowing which one you bought.

Inner Circle fails open after four seconds, deliberately. An outage on our side must not take your store offline. It does mean hidden prices can become visible during one, which is exactly why we describe it as a merchandising control and not a security system.

What none of these do

None of this is security. A determined person with developer tools can make a hidden button reappear in any of these designs, including ours. What matters is whether the purchase goes through, and that decision has to happen on a server, not in the browser.

So the question to ask of any approach is not "can the price be revealed" but "can someone who was not approved actually check out". If the answer is yes, you have styling, not a gate.

Choosing

  • Pre-launch, nobody looking yet → password page. It is free and it is enough.
  • Logged-in customers only, simple rule, comfortable in Liquid → theme edit.
  • Retail and trade on one storefront, growing → accounts and tags, until the maintenance stops being worth it.
  • You need people to request access, and you need to approve them → a gating app, because the request-and-approve part is the actual work and none of the first three do it at all.

If you are somewhere between the last two, the honest test is how many access requests you handle a week. Under five, do it by hand. Over twenty, you are running a process, and a process wants software.

Whichever way that lands, test the flash before you commit to anything. Ours has a free plan with no card and no time limit, which is enough to put a lock on one product and watch your own theme paint it.

Inner Circle gates prices and buy buttons for you

It does the gating described above without a theme rebuild or a second store. The free plan is one lock and five codes, with no time limit and no card.