Writing

Price tests and offer tests: what a shopper is charged, tested

Zinx Signal now tests prices and offers as well as pages. Two new test types in a category of their own, how the charge is kept equal to the page, and which plans include them.

22 September 2026 · 7 min read

Until now, Zinx Signal tested what a page looks like: content, styles, templates, themes and redirects. From today it also tests what a shopper is charged. Two new test types, in a category of their own:

Price tests
Each group pays a different price for the same product, higher or lower than today’s.
Offer tests
Each group gets a different offer: a percentage off, an amount off, free shipping, or nothing.

Both report which group made the most money, the same way every other test does.

Why pricing is its own category

The five content tests and the two pricing tests differ in kind.

  • A content test changes the page. It runs in the shopper’s browser. If it fails, the shopper sees the wrong words.
  • A pricing test changes the charge. No script on the page can reach what Shopify charges, so these run through Shopify Functions at the cart. If one fails, the shopper pays the wrong amount.

So they need a Shopify permission the content tests do not, and safeguards that have nothing to do with how a page renders. Grouping them separately in the app keeps that difference in view.

The one rule

Never show a price we cannot charge. Every part of the design follows from it.

  • The test price appears on the page only after the visitor’s group is on their cart, where Shopify reads it. If that cannot be confirmed, they see and pay your normal price, and are left out of the test.
  • “Buy it now” is hidden on tested products for every group, because it builds a checkout without the cart.
  • If you change a tested price in Shopify while the test runs, the test pauses rather than charging from an old number.
  • If another app starts customising the cart in a way that would override ours, the test pauses and says why.
  • Search and shopping crawlers are never put in a test. Google Merchant Center compares your product pages with your feed, and a mismatch can disapprove the product.

Price rises, on any Shopify plan

Shopify only lets an app charge less than a product’s price, except on Shopify Plus. So:

On Shopify Plus
The price is set directly at checkout, up or down. The shopper sees no discount anywhere.
On every other plan
A price cut is charged as a discount from your price. A rise lifts the product’s price in Shopify to the highest test price while the test runs, and every other group is discounted back down from it.

When a rise is running without Plus:

  • Your original price is put back when the test is paused or ended.
  • Every price change is recorded before it is made, and an hourly check restores anything a failure left raised.
  • Other sales channels, POS and product feeds show the raised price meanwhile.
  • Groups below the raised price, the control included, see a discount line at checkout.
  • Uninstalling the app mid-test leaves the price raised. End the test first.

Every market, and subscribers

  • Markets. You set prices in your store currency. A shopper in another market gets the same percentage change on the price their market already shows, with its rounding kept. Test £89 against £99, and a shopper who normally sees €114.99 sees and pays €102.99. You can also set a market’s test price by hand.
  • Offers abroad. An amount off and a minimum order value are converted at Shopify’s own rate. A percentage and free shipping need no conversion.
  • Subscriptions. Products sold on subscription are tested like any other, and the plan’s own saving stays on top. You choose whether subscribers keep the test price on every renewal or get it on the first order only.

No theme edits, no onboarding call

Prices on your pages are found by their value — the number your theme rendered — rather than by theme-specific tags. The product page, collection cards, quick views and the cart drawer are rewritten without anyone configuring them.

  • Where a theme draws a price the scan cannot find, you point at it with the element picker.
  • A compare-at price per group, if you want one struck through.
  • CSV download and upload for a long list of products.
  • Bulk percentages, rounded to .99, .95 or a whole number.
  • Previews outline every price on a tested product: green where it changed, amber where it did not, with the reason.
  • For custom code, zinxSignal.priceFor(variantId) returns what this visitor pays.

Check setup

Also new today, and for every test type. Check setup, on the Preview tab, loads the real storefront pages a test runs on and runs our shopper code against them. No AI, so the same store gives the same answer.

For a price test it reports, per product:

  • whether the product is on your online store;
  • whether its price has changed in Shopify since you set up the test;
  • whether the price on its page was found, and how many will change;
  • whether our pricing extension is on your store;
  • whether a running test is actually being served.

Each finding is a pass, a warning or a problem, with what to change and a link to where.

Reading the result

Pricing tests are judged on profit per visitor, or revenue per visitor where product costs are not set. A lower price almost always lifts conversion. The question is whether it earned more than it gave away, and only a margin-aware number answers that.

What it does not do

  • Bundles, quantity breaks and shipping rates are not tested.
  • A tested price is never made permanent by us. When a price wins, you change it in Shopify and end the test.
  • Two price tests cannot test the same product at once. Their discounts would stack on one line.

Which plans include it

  • Growth, Scale, Pro and Enterprise include price and offer tests.
  • The 14-day trial includes them too, so you can see one work before paying.
  • Starter covers the five content test types.

Plans are now enforced. When the trial ends without a plan, running tests pause until you pick one. When a paid plan ends or a payment fails, running tests pause a day later. Over the month’s tested visitors, new tests wait; running ones carry on. Nothing measured is ever deleted.

How to start

  1. Open Settings, Store connection, and approve the new permissions. Nothing is disconnected, and your other tests are unaffected either way.
  2. Create a test and choose Prices or Offers, under Pricing.
  3. Set each group, then run Check setup on the Preview tab.
  4. Start it.

The guides go through each type in detail:

Keep reading

All writing