A price test charges each group a different price for the same product. It is the most valuable question most stores can ask — a few percent on price moves more margin than almost any layout change — and the one with the least room for error, because the failure mode is a shopper being charged something other than what they were shown.
Everything below follows from one rule we hold ourselves to: never show a price we cannot charge. When anything is uncertain, the shopper sees your ordinary price and pays it.
Price tests are on the Growth plan and above, and in the 14-day trial.
Up or down, on any plan
How the price is charged depends on your store. You do not choose — it is decided when you create the test, stamped onto it, and shown on the panel.
- Shopify Plus
- The line price is set directly at checkout. Prices go up or down, and the shopper sees no discount anywhere.
- Every other plan
- Shopify only lets an app charge less than the list price, so each group is charged as a discount from it. A price cut needs nothing else.
- A rise, without Plus
- The product’s price in Shopify is raised to the highest test price while the test runs, and every other group — the control included — is discounted back down from there. The original price is put back when the test is paused or ended.
What a rise means for your store, said before you start:
- Other sales channels, POS and product feeds show the raised price while the test runs.
- Every change we make to a price is recorded before it is made, and an hourly check puts back anything a failure left raised.
- If you change a tested price by hand meanwhile, the test pauses and your price is left alone.
- If you uninstall the app while a test is raising prices, they stay raised. End the test first.
Setting one up
Approve the pricing permissions on Settings, Store connection. A rise also needs the permission to change product prices; the builder asks for it only when a group goes above the list price.
Choose the products first. That happens once, above the groups, because which products are under test cannot honestly differ between arms. Search your store, add what you want — up to 50 variants — and each one’s current price is captured as the baseline.
Then set a price per group for each product:
- Bulk helpers — −5%, −10%, −15%, −20% and back to list — with rounding to .99, .95 or a whole number.
- Compare-at per group, if you want a struck-through price. It shows only where your theme already strikes one through.
- CSV download and upload, for a catalogue too long to price by hand.
- An empty box means that group pays the list price for that product. That is how a control is usually expressed.
Large changes ask for confirmation
Anything more than 25% away from your list price stops and asks whether you meant it. A decimal point in the wrong place — 8.90 instead of 89.00 — looks exactly like a deliberate clearance price, and orders placed at the wrong price cannot be undone.
You can confirm and carry on. A merchant clearing old stock at 60% off is doing something real, and a cap that could not be lifted is one people route around by lowering their list price instead — which is permanent, and worse.
Do not touch your prices while it runs
Every group’s price was worked out against the list price at the moment you configured it. Change that in Shopify and the arithmetic no longer matches what shoppers see.
We check hourly and pause the test if a price has moved, rather than warning and carrying on. A warning nobody reads means shoppers continuing to be charged from a figure that has changed; a pause costs you a restart you can control.
Who is in the test
Every market, in its own currency. You set prices in your store currency; a shopper in another market gets the same percentage change on the price their market already shows — after Shopify's conversion, any market price adjustment, and any price you fixed for that market by hand.
Their market's rounding is kept. Test £89 against £99, and a shopper in Ireland who normally sees €114.99 sees €102.99 — and is charged exactly that at checkout. If you would rather set a market’s test price yourself, open Market prices on the panel.
Subscribers too. A product sold on subscription is tested like any other, and the plan’s own saving stays on top of the test price. You choose whether a subscriber keeps their group’s price on every renewal or on the first order only. Ending the test does not change what an existing subscriber pays.
Crawlers are never included. Google Merchant Center crawls your product pages and compares what it sees to your product feed; a mismatch disapproves the product, and across a catalogue it can suspend the ads account. Bots see exactly what your theme rendered, which is your feed price.
What happens on the page
No theme edits. Prices are found by their value — the number your theme rendered — rather than by selectors, so the product page, collection cards, quick views and the cart drawer are all rewritten without anyone telling us they exist.
- The test price appears only once the visitor’s group is on their cart, where Shopify reads it. If that cannot be confirmed, the page keeps your normal price and the visitor is left out.
- “Buy it now” is hidden on tested products, for every group. It builds a checkout without the cart, so it would charge the list price whatever the page said.
- If your theme draws a price the scan does not find, point at it with the picker under “Elements that show a price”.
- Custom code can ask what this visitor pays with
zinxSignal.priceFor(variantId).
If you run a bundle or volume-discount app
Those apps draw their own prices on your product pages, from their own data. We cannot tell that widget’s price from your theme’s — so without help, a page can end up showing two prices that disagree.
The Modifications tab has a place to point at that widget and say “leave this alone”, with the same visual picker the content tests use. Do it before you start.
On Plus there is a second interaction: only one app’s change applies to a given cart line, and a bundle app installed before us wins. We check for that when the test is built and fall back to the discount mechanism, which is unaffected — you will see the explanation on the panel.
Check it before you start
Open a preview link per group. On a tested product, every price is outlined: green where it changed, amber where it did not, with the reason on hover.
Then run Check setup on the Preview tab. It loads each tested product page from your live store, runs our price code against it, and tells you whether the price was found and changed — with what to fix where it was not.
What the shopper sees at checkout
On the discount mechanism, the £89 group sees a clean £89 on the product page and then £99 struck through with £10 off at the cart. During a rise, that includes the control: it is discounted from the raised price back to your original one.
A discount and a low price are not quite the same offer to a shopper. So strictly, you have measured “£99 with a discount” rather than “£89”. The add-to-cart decision happens on the product page where the price was clean, so the effect shows up in checkout completion rather than earlier — but it is real, and we would rather say so than let you find out from a result that does not replicate.
On Plus none of this applies: the price simply is the price.
Reading the result
Profit per visitor is the primary metric, falling back to revenue per visitor where product costs are not set. Revenue per visitor on its own is misleading here: dropping a price reliably lifts it and can destroy margin at the same time.
Conversion rate carries a note for the same reason. The cheaper group converting better is arithmetic, not a finding. Read it next to profit per visitor, which is what says whether the extra orders were worth the margin.
The two discount metrics are switched off for a price test on the discount mechanism, with the reason stated rather than silently hidden: our own price change lands in them, so the cheaper group would appear to be giving money away for doing exactly what you told it to.
When it wins
Change the price in Shopify yourself, then end the test.
A test never makes a price permanent. Anything it raised is put back when it ends, so a forgotten test cannot quietly become your pricing — and the deliberate step of changing it yourself is the one that makes the new price really yours.