# Engagement Metrics: Measure How a Variant Affects a Page Source: https://docs.abconvert.io/analytics/engagement-metrics Understand whether a variant makes a page or template more engaging: how often visitors click through, how often they bounce, and how long they actively stay. Engagement metrics show whether a variant keeps visitors interested. You see it in days, long before you have enough sales to call a winner. An engaging page is one where the visitor clicks through to another page, doesn't bounce, and stays longer. ABConvert measures this on the pages your test changed, so it complements your [traffic and conversion metrics](/analytics/metrics), which cover the whole funnel. ## When to use it * **Landing-page redirect tests.** Run a [URL redirect test](/experiments/url-redirect-test) between two landing pages and see which one keeps visitors clicking through instead of bouncing. * **Template and theme tests.** When a [template test](/experiments/template-test) changes a product or collection layout, check whether the new layout earns more scroll, more clicks, and longer active time. * **Visual editor changes.** After a [visual editor test](/experiments/visual-editor-test) rearranges a page, confirm the change helped engagement on exactly the pages it touched. * **Guarding against side effects.** When a price test changes what shoppers see, check that browsing engagement on the tested product pages didn't drop. ## When NOT to use it * **Measuring revenue or conversion lift.** Engagement tells you whether visitors stayed and clicked, not whether they bought. Use [traffic and conversion metrics](/analytics/metrics) instead. * **Reconciling against GA4.** These are measured per page and won't line up with GA4's session numbers. See the FAQ for why. * **Tests with no page or template target.** Shipping, payment, and checkout tests don't change a specific page, so an engagement number for the whole store mixes the test in with everything else and tells you nothing. Judge those on conversion and revenue instead. ## The three metrics Each metric is measured per page view, then totaled for the page or template in scope. | Metric | What it means | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Click-Through Rate | How often visitors click through to another page on your store, as a share of page views. Higher is usually better. | | Bounce Rate | Share of page views with no engagement. A view counts as engaged if the visitor scrolled, clicked through, or stayed active for over 10 seconds. Lower is usually better. | | Avg Time on Page | Average active time visitors spend on the page, not counting time the tab sits in the background. Longer usually means more interest. | The breakdown table also shows two supporting counts: * **Page views** are how many times visitors in this test loaded a page inside the scope you picked. The three rates above are all measured out of this number, so a small page-view count means the rates are still noisy. * **Clicks** are how many times visitors clicked through to another page on your store. **Example.** Your redirect test sends visitors to Landing B. Control bounces 62%, Variant B bounces 48%, and Variant B also lifts click-through from 22% to 31% and keeps visitors longer on average: three signals pointing the same way. Click the **Destination** tab to see where click-throughs went. ## How scope works Scope is the set of pages you want this test judged on. It matters because if you measure the whole store, the few pages your test changed get drowned out by all the pages it didn't, and a real improvement can vanish into the average. The scope button reads **Storewide**, or a count like **3 pages** or **2 templates**. Click it to view the pages in scope, or to open the **Edit scope** modal. (A template is the shared layout behind a group of pages, like the layout every product page uses.) Try it: open a redirect test's Engagement section and click the scope button. Engagement section of the Analytics dashboard with a 4 pages scope button, showing Click-Through Rate, Bounce Rate, and Avg Time on Page cards that each compare Control and Variant A ### Default scope per test type When a test launches, ABConvert seeds a default scope from what the test actually changes, so engagement points at the right pages from day one. | Test type | Default scope | | ----------------------------------------------------- | ------------------------------------------------------------------------------ | | [Price test](/experiments/price-test) | The tested products' product pages (`/products/{handle}`, exact match) | | [URL redirect test](/experiments/url-redirect-test) | Each rule's trigger and destination URLs, using that rule's own match type | | [Template test](/experiments/template-test) | The templates assigned to control and variants, matched as templates | | [Visual editor test](/experiments/visual-editor-test) | The page URLs each modification targets, matched as a pattern (glob supported) | | Shipping, offer, theme, checkout tests | Storewide (these don't target specific pages) | For the storewide-by-default types you can still narrow scope by hand. A **Reset to default** action restores the launch-derived default at any time. ### Edit the scope Open the **Edit scope** modal and pick a mode: * **Storewide** measures every page. * **By URL** takes one or more URL rules. Each rule has a match type: **Exactly matches**, **Starts with**, or **Contains**. (Visual editor tests, which support glob URLs, also offer **Matches pattern**.) * **By template** lets you pick templates, so engagement rolls up by template instead of by URL. Rules seeded from the test's launch default are tagged **from test**, so you can tell them from ones you added by hand. Edit scope modal in By URL mode, with a match-type dropdown set to Exactly matches and a field to search pages or paste a URL, listing four URL rules with Contains, Starts with, and Exactly matches badges, each tagged from test, plus Reset to default, Cancel, and Apply ### Break engagement down Breakdown tabs read the metrics across a dimension: * **All** totals the whole scope. * **Page** lists one row per URL (URL scope only). * **Template** lists one row per template (template scope only). * **Destination** shows where click-throughs went (available whenever your scope is narrower than the whole store). * **Country**, **Device Type**, and **Traffic Source** split by audience. * **Custom** combines two dimensions, for example page by destination. Engagement breakdown table for a template-scoped test, with tabs for All, Template, Destination, Country, Device Type, Traffic Source, and Custom, and columns for CTR, Bounce, Avg time, Page views, and Clicks per test group A click-through counts whenever a visitor moves to another page on your store, by a link, a button, or submitting a form, not just tracked link clicks. Going to another website doesn't count. ## Common mistakes * **Benchmarking against GA4.** GA4 measures engagement per session with proxies; ABConvert measures it per page directly. The numbers are built differently and won't match. Compare variant against control inside ABConvert. * **Leaving scope at Storewide on a redirect or template test.** A few changed pages get diluted by every untouched page, and the lift disappears. Use the launch-derived default, or scope by URL or template to the pages the test changes. * **Expecting data for anonymous visitors.** Engagement is only collected after a visitor is assigned to a test, so unassigned traffic never appears. * **Comparing Click-Through Rate across different scopes.** A rate measured over product pages and a rate measured storewide aren't the same denominator. Keep the scope fixed when you compare. ## FAQ A visitor moving to another page on your store, by a link, a button, or submitting a form, not just tracked link clicks. Going to another website doesn't count. When the visitor scrolled, clicked through, or stayed active for over 10 seconds. A view with none of those counts as a bounce. Click-Through Rate is onward navigations divided by page views. Bounce Rate is 1 minus engaged page views divided by page views. Avg Time on Page is the average active (foreground) time per page view, including the last page a visitor saw. No. It counts only active, in-focus time. Time the tab sits in the background is excluded. The exit page is included in the average. They are not meant to. ABConvert measures engagement per page at page grain; GA4 measures it per session with proxies. Use ABConvert's numbers to compare variant against control, not to reconcile with GA4. See [GA4 integration](/configuration/ga4-integration). ABConvert seeds it from what the test changes at launch. Edit it any time; **Reset to default** restores the seeded scope. See [How scope works](#how-scope-works). Yes. In the Edit scope modal choose **By template** and pick your templates. The breakdown then shows a **Template** tab with one row per template. With a non-storewide scope, open the **Destination** breakdown tab. It lists where click-throughs went, so you can read flows like homepage to a specific product page. For how to read whether a difference is real rather than noise, see [statistical significance](/analytics/statistical-significance) and the [Analytics overview](/analytics/overview). # How to Interpret Analytics Results and Choose a Next Action Source: https://docs.abconvert.io/analytics/interpret-results Learn how to read an ABConvert analytics dashboard, choose one primary metric, check guardrails, and decide what to do next. Use this tutorial when you need to turn one Analytics dashboard into a clear decision: ship the variant, keep running the Experiment, or revise the Experiment. ## If you remember only four things * Pick exactly **one primary metric** before the Experiment starts. * Use guardrail metrics to catch side effects, not to create a second primary winner rule. * Check visitor count, run time, and traffic split before you decide. * Do not ship if guardrails show a business risk that matters. ## Start by choosing one primary metric Your primary metric is the one number that decides whether the Experiment worked. Choose it before the Experiment starts. | Your goal | Choose one primary metric | | ---------------------------------------- | ------------------------------------------------- | | Increase purchase likelihood | **Conversion Rate** | | Increase user spending in a single order | **Average Order Value** | | Increase value per visitor | **Revenue per Visitor** or **Profit per Visitor** | For metric definitions, see [Analytics metrics](/analytics/metrics), [Traffic and conversion metrics](/analytics/metrics-traffic-conversion), and [Revenue and profit metrics](/analytics/metrics-revenue-profit). ## Choose guardrails after the primary metric Guardrails are the checks that stop you from shipping a harmful variant. Pick them from the business goal and the risk you expect. Use two or three guardrails. They do not need to beat control. They need to stay healthy enough for the decision to make business sense. * If the goal is more purchases and the primary metric is **Conversion Rate**, guardrails may include **Revenue per Visitor** or **Profit per Visitor**. This checks that more purchases are not coming from lower-value or lower-margin orders. * If the goal is higher order value and the primary metric is **Average Order Value**, guardrails may include **Conversion Rate** and **Profit per Visitor**. A higher threshold or bundle can raise order value while reducing purchase likelihood or profit per visitor. ## Check whether you have enough data to decide Review the sample before you choose the next action. | Check | What to look for | What to do if it looks wrong | | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | Visitor count | Each variant has enough visitors for your store's normal purchase volume. As a rough starting point, wait until each variant has at least 100 converted orders when the primary metric depends on purchases. Small effects or high-risk decisions need more data. | Keep running until each variant has more exposure and enough converted orders. | | Run time | The Experiment has covered at least one normal business cycle, such as weekdays and a weekend. | Keep running unless the primary metric or a guardrail is moving sharply negative. | | Traffic split | Visitor share is close to the expected distribution, such as 50/50 or 34/33/33, and matches the observed data well enough to compare variants. | Check the Experiment setup before rollout. Keep running if the split is still settling. | Running for 1-2 weeks helps include weekday and weekend behavior. High-traffic stores may reach a useful visitor count sooner. Low-traffic stores often need more time. There is no universal visitor number that makes every Experiment ready. Use your store's normal traffic volume as the sanity check. ## What not to do when reading results * Do not end an Experiment in the first two days only because confidence shows 95%. Early confidence can jump around when the sample is small. * Do not change the primary metric after the Experiment starts just to make a variant look better. * Do not ignore guardrails. A variant can win the primary metric and still hurt profit, order value, or purchase likelihood. ## Convert the dashboard into a decision Use this matrix after you check visitor count, run time, and traffic split. | Result | What it looks like | Next action | | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | Winner | One variant leads on the primary metric, guardrails are acceptable, and the expected gain is larger than the work and risk of rollout. | Ship the variant or schedule rollout. Record why the gain is worth the change. | | Candidate to ship | One variant leads on the primary metric, but guardrails seem risky or the rollout risk is close to the expected gain. | Review the risk, adjust the rollout plan, or revise the variant before shipping. | | Unclear | The lead is small, the result keeps moving, traffic is imbalanced, or the business impact does not clearly beat rollout cost. | Keep running, segment the result, or stop and test a bigger change. | Rollout cost includes implementation work, QA, customer support risk, operational changes, and margin or brand tradeoffs. As a default, do not ship a variant for a tiny projected lift if rollout needs theme edits, checkout QA, pricing policy changes, new support macros, or extra fulfillment work. Ship when the gain is clearly worth those changes for your store. ## Example: Revenue per Visitor winner The Holiday Pricing Experiment dashboard uses **Revenue per Visitor** as the primary metric. The Experiment uses a 34/33/33 traffic split across control and two variants. The sample includes 25,540 visitors. Variant B leads. It is up 13.3% in Revenue per Visitor versus control. The estimated monthly revenue uplift is 6,420. The estimated monthly profit uplift is 2,775. Profit is positive, with 13.05% estimated profit uplift. Variant B is a winner when the run time is long enough for your store and the gains beat normal rollout cost. ## Example: Conversion rate winner but profit loser Suppose your primary metric is **Conversion Rate** because you want more visitors to purchase. Variant A increases Conversion Rate by 8%, but **Profit per Visitor** drops by 12%. The variant used a larger discount, so more visitors bought, but each visitor produced less profit. This is a candidate to ship only if the profit risk is acceptable. In most stores, a better next Experiment would use a smaller discount, a higher free-shipping threshold, or a bundle offer that protects margin. # Analytics Metrics: How ABConvert Groups and Calculates Them Source: https://docs.abconvert.io/analytics/metrics See how Analytics v2 groups metrics in ABConvert and jump to detailed guides for traffic, conversion, revenue, profit, and discount metrics. ABConvert Analytics v2 groups metrics by role so you can evaluate each test from multiple angles: traffic quality, conversion behavior, business impact, and discount cost. ## How are metrics grouped in Analytics v2? | Group | Includes | | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | Traffic | Visitors, Sessions | | Funnel | Product Viewed, Added to Cart, Reached Checkout, Contact Submitted, Address Submitted, Shipping Submitted, Payment Submitted, Completed Checkout | | Conversion | Conversion Rate (Visitors), Conversion Rate (Sessions), Add to Cart Rate, Reached Checkout Rate | | Abandonment | Cart Abandonment Rate, Checkout Abandonment Rate, Shipping Step Drop-off Rate | | Revenue / Profit | Orders, Average Order Value (AOV), Revenue per Visitor (RPV), Profit per Visitor (PPV) | | Discount | Discounted Order Rate, Average Discount Value, Revenue Discount Percentage, Profit Discount Percentage | | Engagement | Click-Through Rate, Bounce Rate, Avg Time on Page | ## Where should you start? Learn how visitor and session counts are derived, how funnel steps map to Shopify events, and how conversion and abandonment rates are calculated. Understand ecommerce impact metrics such as Orders, AOV, RPV, and PPV, and how COGS settings affect profit accuracy. See how product, order, and shipping discounts roll up into discount KPIs, and why they are critical for offer tests. See whether a variant makes a page or template more engaging: click-through, bounce, and active time on the page. ## How are these metrics calculated? All metric formulas in these pages match ABConvert's Analytics v2 metric definitions in the app code. If you want to choose one primary metric and decide what to do next, see [How to interpret Analytics results](/analytics/interpret-results). If you want to interpret p-values, confidence intervals, and probabilities alongside these metrics, see [Statistical significance](/analytics/statistical-significance). # Discount Metrics in Analytics v2 Source: https://docs.abconvert.io/analytics/metrics-discount Understand where discount values come from in ABConvert Analytics v2 and how to use discount metrics to evaluate offer test impact. Discount metrics quantify how much margin your variant gives away. They are essential for offer tests where discount behavior is the main lever. ## Where do discount values come from? ABConvert calculates total discounts from Shopify order data using discount allocations. For each order, discount value is aggregated from: * **Product discount value** from line-item discount allocations. * **Order discount value** that Shopify allocates across line items. * **Shipping discount value** from shipping-line discount allocations. In Analytics v2, these roll up into `total_discounts`, which powers all discount KPIs. ## What do discount metrics mean? | Metric | Definition | Formula | | --------------------------- | --------------------------------------- | --------------------------------------- | | Discounted Order Rate | Share of orders that used any discount. | `Discounted Orders / Orders × 100` | | Average Discount Value | Average discount amount per order. | `Total Discounts / Orders` | | Revenue Discount Percentage | Total discounts as a share of revenue. | `Total Discounts / Total Revenue × 100` | | Profit Discount Percentage | Total discounts as a share of profit. | `Total Discounts / Total Profit × 100` | ## Why are these metrics critical for offer tests? In offer tests, conversion or revenue lift is only half the story. You also need to measure discount cost. Use these metrics together to decide whether a variant is truly better: * Use **Discounted Order Rate** to see how broadly the offer is being used. * Use **Average Discount Value** to see the typical cost per order. * Use **Revenue Discount Percentage** and **Profit Discount Percentage** to quantify margin impact. # Revenue and Profit Metrics in Analytics v2 Source: https://docs.abconvert.io/analytics/metrics-revenue-profit Learn how ABConvert calculates revenue and profit metrics in Analytics v2 and how to use them for ecommerce decisions. Revenue and profit metrics show whether a variant is good for your business, not just good for click-through or checkout progression. ## Why do revenue and profit metrics matter in ecommerce? Conversion lift alone can be misleading. A variant can increase conversion rate while lowering basket value or margin. Revenue and profit metrics help you answer the questions that matter most: * Are you earning more money per visitor? * Are you earning more profit per visitor after costs? * Are larger order values driving the result, or only higher order counts? ## What do revenue and profit metrics mean? | Metric | Definition | Formula | | ------------------------- | ------------------------------------------------------- | -------------------------- | | Orders | Distinct completed orders attributed to the experiment. | `COUNT(DISTINCT order_id)` | | Average Order Value (AOV) | Average revenue per order. | `Total Revenue / Orders` | | Revenue per Visitor (RPV) | Average revenue generated per visitor. | `Total Revenue / Visitors` | | Profit per Visitor (PPV) | Average profit generated per visitor. | `Total Profit / Visitors` | ## How is profit calculated? ABConvert computes order-level profit as: `Revenue - Product Cost - Shipping Cost - Transaction Fee` These values come from your COGS settings (product costs, shipping cost per order, and transaction fee rules). If you want accurate PPV and other profit metrics, configure COGS before analyzing winners. See [COGS settings](/configuration/settings#cogs-settings). # Traffic and Conversion Metrics in Analytics v2 Source: https://docs.abconvert.io/analytics/metrics-traffic-conversion Understand how ABConvert derives visitor and session metrics, maps funnel steps to Shopify standard events, and calculates conversion and abandonment rates. Traffic and conversion metrics tell you whether a variant improves shopper behavior through the funnel, not just final orders. ## How are visitors and sessions derived in ABConvert? ABConvert computes traffic metrics from experiment-attributed event data: * **Visitors** = distinct `visitor_id` values in experiment events. * **Sessions** = distinct `session_id` values in experiment events. A visitor can create multiple sessions, so Sessions is usually higher than Visitors. ## Which Shopify events power funnel tracking? ABConvert's funnel steps map to Shopify Web Pixels standard events. See Shopify's full event reference at [Shopify Web Pixels standard events](https://shopify.dev/docs/api/web-pixels-api/standard-events). | Funnel step in ABConvert | Shopify standard event | | ------------------------ | ---------------------------------- | | Product Viewed | `product_viewed` | | Added to Cart | `product_added_to_cart` | | Reached Checkout | `checkout_started` | | Contact Submitted | `checkout_contact_info_submitted` | | Address Submitted | `checkout_address_info_submitted` | | Shipping Submitted | `checkout_shipping_info_submitted` | | Payment Submitted | `payment_info_submitted` | | Completed Checkout | `checkout_completed` | **Client-side vs. server-side tracking:** Funnel-step metrics on this page are derived from experiment-attributed events, including Shopify Web Pixel events such as `checkout_started` and `checkout_completed`. Browser-side events can occasionally be blocked or dropped by ad blockers, privacy features, or network interruptions, so middle-funnel steps may be slightly underreported. Order-backed metrics come from confirmed Shopify order data, which reaches ABConvert server-to-server and is not affected by the visitor's browser environment. As a result, order-backed metrics such as conversion rate, average order value, and revenue per visitor are less affected by missed browser-side events. ## What do traffic, conversion, and abandonment metrics mean? | Metric | Definition | Formula | | --------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | Visitors | Distinct visitors attributed to the experiment. | `COUNT(DISTINCT visitor_id)` | | Sessions | Distinct sessions attributed to the experiment. | `COUNT(DISTINCT session_id)` | | Product Viewed | Sessions where a product view event occurred. | `COUNT(DISTINCT session_id where event_type = product_viewed)` | | Added to Cart | Sessions where an add-to-cart event occurred. | `COUNT(DISTINCT session_id where event_type = product_added_to_cart)` | | Reached Checkout | Sessions where checkout started. | `COUNT(DISTINCT session_id where event_type = checkout_started)` | | Contact Submitted | Sessions where contact info was submitted. | `COUNT(DISTINCT session_id where event_type = checkout_contact_info_submitted)` | | Address Submitted | Sessions where address info was submitted. | `COUNT(DISTINCT session_id where event_type = checkout_address_info_submitted)` | | Shipping Submitted | Sessions where shipping info was submitted. | `COUNT(DISTINCT session_id where event_type = checkout_shipping_info_submitted)` | | Payment Submitted | Sessions where payment info was submitted. | `COUNT(DISTINCT session_id where event_type = payment_info_submitted)` | | Completed Checkout | Sessions where checkout completed. | `COUNT(DISTINCT session_id where event_type = checkout_completed)` | | Conversion Rate (Visitors) | Share of visitors with at least one completed order. | `Visitors with orders / Visitors × 100` | | Conversion Rate (Sessions) | Share of sessions with at least one completed order. | `Sessions with orders / Sessions × 100` | | Add to Cart Rate | Share of sessions that reached add to cart. | `Added to Cart / Sessions × 100` | | Reached Checkout Rate | Share of sessions that reached checkout start. | `Reached Checkout / Sessions × 100` | | Cart Abandonment Rate | Share of add-to-cart sessions that did not reach checkout. | `(1 - (Reached Checkout / Added to Cart)) × 100` | | Checkout Abandonment Rate | Share of checkout-started sessions that did not complete checkout. | `(1 - (Completed Checkout / Reached Checkout)) × 100` | | Shipping Step Drop-off Rate | Share of sessions that dropped between address and shipping submission. | `(1 - (Shipping Submitted / Address Submitted)) × 100` | Funnel display is customizable in Analytics v2. Sessions stays as the baseline, and you can choose up to five additional steps in the funnel card. See [Custom funnel steps](/analytics/overview#custom-funnel-steps). # Analytics Overview: Understanding Your A/B Test Results Source: https://docs.abconvert.io/analytics/overview Learn how ABConvert tracks your store's conversion funnel and how to use the analytics dashboard to interpret experiment results. The analytics dashboard is where you see whether your experiments are working. Every time a visitor loads a page, adds something to their cart, reaches checkout, or completes checkout, ABConvert records that event and attributes it to the correct test group. You can review these results at any time as snapshots refresh throughout the day. ## Accessing your analytics To view analytics for an experiment, go to the experiment table on your ABConvert homepage and open the analytics page for that experiment. From there you can see a breakdown of results for each test group, filter the data by date range or visitor segment, and track statistical confidence over time. ABConvert experiment table showing test rows and where to open analytics for a specific experiment Analytics v2 overview page showing date filter, comparison selector, performance summary, and chart area To turn this dashboard into a decision, see [How to interpret Analytics results](/analytics/interpret-results). ## What does the conversion funnel track? ABConvert tracks the purchase journey for every experiment. By default, most experiments show a standard 4-step funnel: A distinct session in your experiment. Sessions is always the top of the funnel and serves as the 100% baseline for all conversion rate calculations. The visitor adds the product to their cart. This is the first indicator of purchase intent. The visitor reaches the checkout page. This shows they moved past browsing and are actively considering buying. The visitor completes a purchase. This is the final conversion event and triggers all revenue metrics. Every stage is tracked per test group, so you can compare how each variant performs at each point in the funnel — not just at the order level. ### Custom funnel steps In Analytics v2, you can customize the funnel stages to track more granular events like *Shipping Information Submitted* or *Payment Submitted*. This lets you identify exactly where visitors drop off in your specific flow. With custom funnel steps, Sessions remains fixed as the baseline, and you can select up to **5 additional stages** from the available tracked events to display in the Conversion Funnel card. To configure your funnel: 1. Navigate to the **Conversion Funnel** card on your analytics dashboard. 2. Click the **Customize** icon in the top right of the card. 3. Select up to **5 custom steps** from the available event types in addition to Sessions. 4. Click **Apply Changes**. Customize funnel dialog showing selected stages for Added to Cart, Reached Checkout, and Completed Checkout, along with controls to reorder stages, add another stage, reset to default, or apply changes **Session-based configuration:** Funnel customization is currently session-based. Your changes only affect your current browser view and reset to the default on page refresh. Other team members see the default funnel unless they customize it themselves. ## Which revenue and discount metrics can I review? Analytics also includes revenue and discount metrics so you can evaluate business impact alongside conversion results. * **Revenue and profit metrics** show order value, revenue per visitor, and profit per visitor. See [Revenue and profit metrics](/analytics/metrics-revenue-profit). * **Discount metrics** show how much discount cost contributes to each variant's result. See [Discount metrics](/analytics/metrics-discount). ## What can I see in the breakdown table? The **Breakdown** table lets you review the metrics you care about across test groups and dimensions. Use **Metrics** to choose which values to compare, such as visitors, conversion rate, orders, or average order value. Then select a dimension to see how variant performance changes across an audience or traffic segment. ### How do I add dimensions to the breakdown table? Select **Country**, **Device Type**, **Visitor Type**, or **Traffic Source** to group the table results by one preset dimension. Breakdown table with tabs for All, Country, Device Type, Visitor Type, Traffic Source, and Custom above variant results To combine two dimensions in the same table: Click **Custom** in the **Breakdown** table. Select the first level used to group results, such as **Landing Page**. Optionally select a nested level, such as **Visitor Type**, to compare segments within each primary group. Click **Apply** to update the table. Use the swap button to reverse the primary and secondary order when needed. Custom Breakdown controls with Landing Page as the primary dimension and Visitor Type as the secondary dimension above nested variant results ## Filtering your results You can narrow your data to focus on specific audiences or time windows. The following filters are available on the experiment analytics page: Set a start and end date to focus on a specific period. Useful for isolating the impact of a promotion or seasonal change. Filter by one or more countries to see how a variant performs in specific markets. Choose between **Desktop**, **Mobile**, or **All** to compare behavior across device types. Filter by **New visitors** (visitors whose first recorded visit happened after the experiment started) or **Returning visitors** (visitors who had already visited before the experiment started) to understand how each segment responds to your test. Visitor type is not determined by Shopify's session cookie. ABConvert determines visitor type using each visitor's first-seen timestamp and the experiment start time: If the first-seen timestamp is after the experiment start time, the visitor is counted as new. If the first-seen timestamp is before the experiment start time, the visitor is counted as returning. To segment this data correctly, enable the visitor label script in your theme settings before the experiment starts and keep it enabled. Visitors tracked only after the script is enabled may otherwise be treated as new by default. ## How quickly does analytics update? Analytics data is typically refreshed within about 1 hour. If you want to confirm whether new data is available, click the **Refresh** button in the analytics page. Analytics page toolbar with the Refresh button next to the date range filter and last updated timestamp # Product Groups: Analyze Test Results by Product Source: https://docs.abconvert.io/analytics/product-groups Bring a product-level view to your test: filter the Analytics dashboard to a set of products and see how each one responded. A product group is a named, reusable set of products you can apply as a filter on a test's Analytics dashboard. A test verdict tells you which variant won overall. A product group lets you read the same test through your products: how your hero collection responded, which products drove the lift, whether the win was broad or concentrated in a few items. Build a group from a Shopify collection, a tag, a product type, or a hand-picked list, then reuse it on any test in your store. ## When to use it * **Storewide tests.** See whether a [theme](/experiments/theme-test) or [template](/experiments/template-test) test helped your hero collection, not just the whole store. * **Price tests across many products.** Filter to the tested products, then open the per-product breakdown to see which products drove the lift. * **A recurring focus set.** Build a "Best sellers" group once and apply it to every test. ## How it works The test still splits visitors randomly between control and variants. A product group only filters which sessions and which products in each order count toward the dashboard numbers. 1. Apply a group on a test's Analytics dashboard. 2. A session counts when the visitor viewed a group product; each step (product view, add to cart, checkout, purchase) counts when it involved a group product. 3. Revenue and profit count only the group's products in each order, never the whole order. 4. Collection, tag, and product type groups stay in sync as your catalog changes in Shopify. 5. A **Product** tab appears in the breakdown table with per-product rows. The test splits visitors randomly, not products, and visitors choose what they view, so per-product results are noisier than the test-level verdict. Read them as signals of where the lift came from. ## Setup Price tests come with a built-in group of the tested products, marked **In this test** in the Filters modal. No setup needed. ### Create a group 1. In ABConvert, open [**Settings**](/configuration/settings) and find the **Product Groups** card. 2. Click **Manage Product Groups**, then **Create group**. 3. Pick a source: **Specific products**, **Collection**, **Tag**, or **Product type**. The last three update automatically with your catalog; Specific products is a fixed list. 4. Name the group and save it. Product groups page listing groups with their source badge and product count Create group form with the Collection source selected and a product preview below You can also create a group without leaving the dashboard: the Filters modal has an **Add group** button. ### Apply it on the Analytics dashboard 1. Open the test's Analytics dashboard and click the **Filters** icon. 2. Under **Product group**, pick a group. **All products** means no filter; a price test also shows its built-in group marked **In this test** here. 3. Click **Apply**. A **Filtered to:** pill shows the active group, and the selection is saved per test. Filters modal showing the Product group picker with All products, an In this test group, and a collection group Analytics dashboard header with the Filtered to pill naming the active product group ### Break results down per product While a group is applied, a **Product** tab appears in the breakdown table next to Country and Device Type. Each row is one product in the group, so you can compare control and variants product by product. Breakdown table with the Product tab selected, showing one row per product in the group *Try it: open any running test's Analytics dashboard, click the **Filters** icon, and apply a group. The **Filtered to:** pill and the **Product** tab appear immediately.* ## Common mistakes * **Expecting a group to change who sees the test.** It never does. Groups are an analytics filter; targeting and product selection live in the test setup. * **Comparing filtered revenue with the test total.** Only group products in qualifying sessions count, so filtered numbers won't add up to the total. Compare filtered numbers with each other. * **Looking for the Product tab without a group applied.** The per-product breakdown only appears while a group is applied. * **Hesitating to edit or delete a group.** Your test data isn't affected. If you delete a group a dashboard is filtered to, open **Filters** on that test and pick another group or **All products**. ## FAQ No. Randomization, targeting, and traffic split are untouched. A group only filters which sessions and order line items count toward the dashboard numbers. Price tests (and offer tests that target specific products) automatically get a built-in group of exactly the tested products. It only appears in that test's Filters modal and isn't listed on the Product Groups page. Groups built from a collection, tag, or product type stay in sync automatically. There's nothing to rebuild. Only sessions that viewed a group product count, and revenue is counted per product: an order with one group product and three others contributes only that one line's revenue. Yes. Groups are store-level: define one in Settings and apply it on any test's Analytics dashboard. Per-product comparisons aren't randomized the way the test itself is, because visitors choose which products they view. Expect more noise than the test-level verdict and weigh them accordingly. See [Statistical Significance](/analytics/statistical-significance). # Statistical Significance in A/B Testing Explained Source: https://docs.abconvert.io/analytics/statistical-significance Learn how to read statistical significance in Analytics v2, including p-values, confidence intervals, and Bayesian win probabilities. This page helps you answer one practical question: "How strong is the evidence for this result?" Before you read the statistics, choose the metric that best matches the Test goal. See [How to interpret Analytics results](/analytics/interpret-results) for the full decision workflow. Analytics v2 gives you two statistical views of the same Test: * **Frequentist analysis** for clear pass/fail decision support. * **Bayesian analysis** for early directional guidance when traffic is still low. Use both together when you review the selected metric. ## Key facts * A p-value shows the strength of evidence that the observed difference is unlikely to be random noise. * A confidence interval shows uncertainty around the estimated impact. * Prob. Beat Control and Prob. Be Best estimate how likely a variant is to beat control or be best for the selected metric. * More visitors, conversions or orders, and run time make results more stable. ## Frequentist analysis: clear decision support Frequentist analysis is useful when you need structured evidence for go or no-go decisions. In Analytics v2, this view is represented mainly by **p-value** and **confidence interval**. ### How to read p-value A p-value describes how surprising the observed result would be if there were no real difference between variants. Lower p-values are stronger evidence that the observed difference is unlikely to be random noise under the test assumptions. | P-value | What it means | | ----------- | -------------------------------------------------------------------------------------------- | | > 0.10 | Weak evidence. Usually too early or no clear difference. | | 0.05 - 0.10 | Borderline. Keep running the Test. | | \< 0.05 | Statistically significant. Strong evidence against no difference under the test assumptions. | | \< 0.01 | Very strong evidence. | A p-value below 0.05 does not mean there is a 95% chance your variant is better. It means the observed gap is unlikely to be random noise. ### How to read confidence intervals Confidence intervals show a likely range for the true impact, based on the data and method. A narrow range means a more stable estimate. A wide range means more uncertainty. A range that includes both good and bad outcomes means the result is still mixed. For example, if Revenue per Visitor is 2.40 and the interval is \[1.10, 3.70], the true value could reasonably fall anywhere in that range. Statistical significance table comparing Control and Variant A with uplift percentages and value ranges for each group ## Bayesian analysis: early directional guidance Bayesian analysis is useful when you do not have enough traffic for a strong frequentist result yet. It helps you understand which variant is leading right now and how stable that lead looks. * **Prob. Beat Control**: the model-estimated chance that a variant is better than control for the selected metric. * **Prob. Be Best**: the model-estimated chance that a variant is best among all variants in the Test. These probabilities can change as more data arrives. Read them for the selected metric and model shown in the dashboard. Performance overview chart on the Win chance tab showing Variant A probability trend for Conversion Rate over several dates Do not decide based on one snapshot. Look for a consistent pattern across multiple refreshes. ## How to use frequentist and Bayesian results together ABConvert shows both statistical systems. Read them in this order: Check **Prob. Beat Control** and **Prob. Be Best**. If they are unstable or keep flipping, keep running the Test. Before final rollout, verify that p-value is below 0.05 and confidence intervals are not too wide. Make sure uplift is meaningful for your store, not just statistically detectable. Launch the winning variant when Bayesian trend and frequentist evidence both support the same direction. Run your Test for at least one full business cycle before making a final decision. For most stores, that means around 1-2 weeks so weekday and weekend behavior are both included. You still need enough visitors, conversions or orders, and balanced traffic. ## What to do when results are inconclusive Sometimes the result is still unclear after several days. That is normal. If the statistical result is still mixed, do this: * Keep the current winner (usually control) while you collect more data. * Extend the run window and review again after more traffic arrives. * Check segments such as country, device type, or visitor type to find hidden differences. * If signals stay flat, treat it as "no meaningful difference" and test a bigger idea next. Inconclusive results are still useful. They tell you your current variant is not strong enough to justify a rollout yet. # Changelog Source: https://docs.abconvert.io/changelog/overview Recent updates, improvements, and fixes shipped to ABConvert. Stay up to date with what's new in ABConvert. Entries are grouped by week, with new features first, followed by improvements and bug fixes. ## Updates * **Affiliate portal tier and status guides.** The affiliate portal now surfaces guides that explain each tier and referral status inline, so partners can see what earns each commission rate and what each status means without leaving the page. * **Affiliate commission rate overrides prioritized.** Custom per-affiliate commission rates now take precedence over the default rule-based rate, so negotiated overrides are honored on every commission calculation. * **Faster shipping test setup.** Wizard delivery-profile lookups now roll up into a single backend call, carrier service zone setup batches to one call per delivery profile, and zone loading is parallelized and scoped per location group — shipping test creation is noticeably faster on stores with complex delivery rules. See [Shipping test](/experiments/shipping-test). * **More reliable assignment tracking.** Assignment and exposure events on the storefront are now sent via `sendBeacon`, so exposure data holds up even when a shopper closes the tab immediately after landing. See [Metrics](/analytics/metrics). * **Google Ads ROI pipeline live.** The Google Ads ROI cronjob is now activated in production with a 30-day backfill, so paid-ads ROI numbers reflect real Google Ads spend and attribution end to end. See [GA4 integration](/configuration/ga4-integration). ## Bug fixes * **Storefront script no longer crashes on delayed dict.** The v2 storefront script now waits for a delayed shop dictionary to arrive instead of throwing, eliminating a class of visitor-facing script errors on slow initial loads. * **Tutorial tab back button restored.** Clicking Back from the create-test screen now returns you to the Tutorial tab you launched from, instead of dropping you on the experiments list. See [Onboarding](/onboarding). * **Shipping test config fits Shopify's Function limit.** Shipping test delivery-customization configs are now kept under Shopify's 10 KB Function payload cap, so large shipping tests no longer fail to save or deploy. See [Shipping test](/experiments/shipping-test). * **Analytics demo tour fixed.** The Analytics V2 demo walkthrough no longer stalls on missing steps, and the Back button now works throughout the tour. See [Analytics overview](/analytics/overview). * **Duplicate churn claims prevented.** Fixed a case where a single Shopify subscription churn could be recorded more than once, so lifecycle events and billing state now match one-to-one. * **Recovered churn events in subscription writer.** Subscription churn events that were previously being suppressed are now written through, so subscription analytics reflect actual cancellations. See [Pricing plans](/configuration/pricing-plans). * **Shipping and offer mapper regressions fixed.** Zone rates and widget variables are now lifted correctly when hydrating shipping and offer tests from storage, so drafts and edits load with the values you saved. See [Shipping test](/experiments/shipping-test) and [Offer test](/experiments/offer-test). ## New features * **Autopilot (beta).** A new Autopilot experience ships as a ranked inbox of deterministic recommendations — shipping, price, and offer opportunities scored, filtered, and promoted directly into real draft experiments. Includes conflict guards (same-type active or recently-run tests suppress cards), a price margin floor, per-shop kill switch, and a beta UX pass. See [Experiments overview](/experiments/overview). * **Claude custom connector via OAuth.** The MCP server now runs an OAuth 2.1 (Authorization Code + PKCE) authorization server, so you can connect ABConvert as a Claude custom connector from Claude.ai web, desktop, and mobile. Generate a Client ID and Secret in Settings and paste them into Claude's "Add custom connector" dialog. See [Claude connector](/mcp/claude-connector) and [MCP overview](/mcp/overview). * **Combined test preview widget.** Combined tests now render as a single entry in the storefront preview widget with a group switcher; each stacked modification appears as a collapsible section using its own type-specific preview panel. See [Experiments overview](/experiments/overview). * **Per-group review for combined tests.** The combined-test wizard's Review step is now organized as per-group cards that show exactly which modifications each group of visitors sees and with what value (price deltas per market, shipping rate + threshold, redirect target, template/theme name, offer title, visual editor change counts, checkout blocks). * **Combined-test analytics settings and restricted active edit.** Combined tests get a dedicated Analytics Test Settings tab rendered as per-group cards, and editing a running combined test now opens a restricted edit page — name, hypothesis, and traffic split are editable while modifications stay read-only, matching every other v5 test type. * **Add-to-cart and Reached Checkout in Analytics V2.** The Analytics V2 Performance overview dropdown and Statistical significance table now support Add-to-cart Rate and Reached Checkout Rate as selectable comparison metrics, with daily time series and full frequentist/Bayesian rollups. See [Metrics](/analytics/metrics) and [Interpret results](/analytics/interpret-results). * **Merchant-controlled notification email.** A new Notification email setting on the Help tab is now the single destination for ABConvert product, lifecycle, and support notifications, replacing the behavior where the address could be silently overwritten by the Shopify store email on sync. See [Settings](/configuration/settings). * **Affiliate portal Terms of Service acceptance.** New and migrated affiliates must now explicitly accept the ABConvert Terms of Service during signup or activation (clickwrap consent), with acceptance metadata recorded on the affiliate record. * **Affiliate payout approval workflow.** Adds an internal payout approval flow and richer payout details (stable payout ID, commission IDs, per-commission summaries) so the internal dashboard can review and approve payouts without inferring membership. * **Redesigned onboarding flow.** The onboarding survey has been rebuilt against the approved Built for Shopify redesign: each question now states why it's asked, the recommendation is folded in as step 5 of 5, backgrounds are admin-aligned, and errors surface only after blur or submit. Accessibility and contrast fixes ship in a follow-up (labeled radio groups, alert-role errors, focus moves to the first invalid control). See [Onboarding](/onboarding). * **Homepage theme app embed status.** The homepage now shows a compact status row for your theme app embed connection in both enabled and disabled states, so the embed state is always visible even when no test is running. * **First-landing tutorial banner.** After completing onboarding, new merchants get a dismissible homepage banner pointing to the tutorial tab — capped at one emission per shop and one banner per app load. ## Updates * **Serialized experiment lifecycle.** Every experiment lifecycle mutation now runs under a per-shop distributed lock, so concurrent start, end, and delete requests can no longer interleave Shopify writes with a failed request's cleanup and leave an experiment Active with no storefront config. * **Faster combined-test edits.** New tracing on the unified experiment endpoint measured combined-test edit latency dropping from \~10.2s to \~4.2s in production traces. * **Faster, more reliable price test activation.** Added performance monitoring to the price test activation path so we can catch slowdowns on large catalogs and keep price test launches snappy as your store grows. No action needed on your side. See [Price test](/experiments/price-test). * **Recovered order attribution tightened for Offer and Checkout tests.** Order-derived analytics now only count recovered orders for Offer and Checkout-family tests when the Shopify order itself carries matching attribution evidence, so recovered totals reflect the final order state rather than earlier checkout context. * **Status badge retoning.** Red is now reserved for errors, failures, destructive actions, and hard blocks. Setup-incomplete states move to Attention, Paused and risky/advisory states move to Warning, and factual states move to neutral or subdued — including a fix so the order usage bar only turns red on a real hard cap. Draft and Paused also now render distinct tones (grey vs. orange) across every status renderer. * **Form validation gated on blur or submit.** Validation errors no longer render on pristine fields or while you're typing on current test surfaces (order tag modal, market price, advanced conditions, target URL). Errors appear on blur or submit attempt, and clear as soon as the value becomes valid. * **Nav highlighting on Settings and Billing sub-pages.** Settings sub-pages (COGS, Product groups, Exclusion groups) and Billing sub-pages (Extend trial, Custom plan) now live under their parent routes so the app nav highlights the correct top-level item. Old paths redirect automatically. See [Settings](/configuration/settings) and [Pricing plans](/configuration/pricing-plans). * **Connection banners now render inside the page.** Script and theme status banners now render inside each page below the title instead of floating above it, restoring correct reading order for screen readers and matching Polaris conventions. * **Affiliate portal preview UI revamp.** The affiliate portal preview (overview, referrals, commissions, payouts, reports) is aligned with the Partner Portal reference design. Payouts are ordered newest-first with collapsible included-commission lists and clearer partner-facing status copy. * \*\*Affiliate minimum payout raised to $500.** The default affiliate payout threshold moves from $50 to \$500 across the backend eligibility flow, internal payout creation, and portal UI. Persisted overrides still apply. * **Affiliate commissions use net revenue.** Affiliate commission calculation now uses net revenue instead of gross, and referrals convert to paid commissions once eligibility is met (with automatic cancellation for uninstalled referrals). * **Announcement editor upgrades.** Announcements now support a Retire operation (immediately stops rendering, reversible on re-publish), a Retired status, 16:9 media on grid cards and hero images, publish-time ordering (newest first, drafts last), multi-segment audiences with an append-only fanout log, and an optional version label in the grid modal footer. * **Homepage announcement banner without layout shift.** The announcement banner decision now piggybacks on the shop-settings payload the home page already loads, eliminating the second async hop that caused a visible layout shift on load. * **Pricing plan and FAQ docs refresh.** The [Pricing plans](/configuration/pricing-plans) page has been updated with revised monthly fees, included experiment orders, overage rates, new test types in the plan matrix (multi-market price test, checkout UI extension test), new support tiers, and clearer explanations of order limits and overage. ## Bug fixes * **Embedded app "refused to connect" on back button.** Fixed a case where clicking the browser back button inside the Shopify admin could leave the embedded app dead because the iframe reloaded without shop parameters. The admin now correctly frames the app in that state, and the catch-all route no longer returns a hard 500. * **Welcome Back banner trap.** Fixed a churned-resubscribe case where shops with a stale Shopify subscription ID could be pinned on the "You're on the new ABConvert" migration banner with no way to reach plan selection. Eligibility is now derived from an active Shopify subscription rather than a stored field. See [Pricing plans](/configuration/pricing-plans). * **Visual Editor market language and geo redirects.** Fixed a Shopify Markets issue where the storefront proxy returned English-US pages for stores that geo-redirect from US IPs. The proxy now forces the resolved market via the country query param (re-applied on every redirect hop), so previews render in the URL's market language. See [Visual editor test](/experiments/visual-editor-test). * **Notification banner cap.** Dismissing an announcement banner no longer chains straight into the next unseen banner in the same app load — the queued row keeps its turn on the next load. * **Affiliate portal payout profile save.** Saving PayPal payout email or details on the affiliate portal no longer fails when the affiliate has a legacy negative outstanding commission value. Payout profile updates now scope to the payout fields only. * **Storefront error reporting scoped.** Uncaught storefront errors are no longer reported to browser error tracking unless they come from ABConvert scripts, so unrelated third-party errors stop crowding out signal. * **Uninstall webhook deduplicated.** Fixed a case where the Shopify uninstall event could trigger multiple times for a single uninstall. * **Reporting reliability.** BigQuery transfer lookups now fail closed on errors, experiment performance rollups tolerate wide float metrics, the BigQuery monitor freshness query is fixed, and paid-ads attribution sync now fails cleanly when the GA4 daily export table is missing. See [GA4 integration](/configuration/ga4-integration). ## New features * **Combined test creation flow.** The combined-test experiment type now has an end-to-end creation flow, so you can stack multiple modifications into a single test from a guided wizard. See [Experiments overview](/experiments/overview). * **Affiliate partner dashboard.** Partners in the affiliate program can now sign in to a dedicated dashboard to view attributed shops, referrals, commissions, and payouts, backed by scoped partner report APIs. * **In-app feature announcements.** A new announcement surface delivers targeted product updates inside the app, with audiences resolvable from Customer.io segments so the right cohort sees the right message. * **Launch and revert previewed experiments via MCP.** Ask Claire and other MCP clients can now activate a previewed experiment and revert it back to draft through the MCP server, closing out the preview-to-launch loop end to end. See [MCP tools](/mcp/tools). ## Updates * **Faster analytics dashboards.** Analytics V2 now computes overall and date-range metrics eagerly and defers demographic breakdowns to on-demand loading, so the main dashboard renders faster and breakdowns still resolve when you open them. See [Analytics overview](/analytics/overview). * **Product-scoped cart abandonment.** Analytics V2 now shows a dedicated cart-abandonment metric under product scope and hides checkout and shipping abandonment where they don't apply, so product-scoped funnels reflect what actually happened. See [Metrics](/analytics/metrics). * **Historical results readable from V1 snapshots.** Experiment results now read from V1 analytics snapshots, so older experiments render consistent numbers alongside newer runs on the results page. See [Interpret results](/analytics/interpret-results). * **GA4 attribution for paid-ads installs.** A new GA4 attribution pipeline captures install source for paid-ads campaigns, feeding cleaner acquisition data into reporting. See [GA4 integration](/configuration/ga4-integration). * **Affiliate outstanding vs. payable separated.** Affiliate ledgers now distinguish outstanding commissions from balances that are actually payable, so partners and finance see clearer figures on each side of the payout cycle. * **Historical affiliate data imported from Mantle.** Prior affiliate commissions and payouts have been backfilled from Mantle so partner reports reflect full history from day one. ## Bug fixes * **Announcements wait for onboarding.** Announcements no longer surface until a shop has completed plan selection and the onboarding survey, so new stores aren't interrupted mid-setup. * **Billing sync ignores 401s.** The billing sync job now skips Shopify 401 Unauthorized responses per shop, matching how 402 and 403 are already handled, so a single unauthorized store no longer noises up the run. See [Pricing plans](/configuration/pricing-plans). * **Cleaner engagement counts during redirect tests.** Engagement events are now suppressed on forced redirect trigger pages, so redirect-test destinations get accurate engagement numbers without duplicated hops. See [Engagement metrics](/analytics/engagement-metrics) and [URL redirect test](/experiments/url-redirect-test). * **Storefront script crash fixes.** Added null guards, a stale-percentage fallback, and safer fetch response handling in the browser script to eliminate several ABConvert V1 crash reports on live storefronts. * **Affiliate portal now ships in the app image.** The affiliate portal is now built into the deployed app image so the partner dashboard loads reliably in production. ## New features * **Combined tests (early access).** A new combined-test experiment type lets you stack multiple modifications — price, offer, checkout, and more — in a single test, with a wizard that walks you through each modification in an accordion step and shared analytics across the bundle. See [Experiments overview](/experiments/overview). * **Affiliate program MVP.** The affiliate portal now resolves `mref` attribution from GA4, tracks referral installs in a partner ledger, and calculates commissions per rule so partners can see attributed shops and earnings. Identity tokens and the referral ledger schema are also live. * **MCP tools for offer and checkout tests.** Ask Claire and other MCP clients can now create, edit, and inspect offer tests and checkout tests through the MCP server. See [MCP tools](/mcp/tools). * **MCP reliability and security hardening.** The MCP server picks up phase 1 of its maturity work: improved error handling and retries, structured logging and metrics for every tool call, and tightened auth and input validation. See [MCP overview](/mcp/overview) and [MCP security](/mcp/security). * **Redesigned checkout placement card.** The checkout test editor's placement card has been redesigned for clearer hierarchy, and resting placement pins now pulse to cue that they're hoverable. See [Checkout test](/experiments/checkout-test). * **Experiment ID in the action menu.** The public experiment ID has moved into the experiment row's action menu as a Copy ID action, so it's available when you need it without crowding the table. See [Experiments overview](/experiments/overview). ## Updates * **V3 access state synced to growth tools.** When a shop gains V3 access, that state is now pushed to Intercom, Customer.io, and PostHog so lifecycle messaging and analytics reflect the right cohort immediately. See [Pricing plans](/configuration/pricing-plans). * **Engagement scope persisted with match-type awareness.** Engagement page scope now persists per experiment and respects match-type rules (exact, prefix, contains) when resolving which pages count, so breakdowns stay consistent across sessions. See [Engagement metrics](/analytics/engagement-metrics). * **Analytics V2 demo at full feature parity.** The Analytics V2 demo walkthrough now mirrors the live dashboard, including engagement metrics, product-group scoping, and the updated filters panel. See [Analytics overview](/analytics/overview). * **Customer.io charge rejection event.** A Customer.io event now fires when a Shopify charge is rejected, so dunning and recovery messages can be wired up to the right trigger. * **Cleaner theme test connect step.** The redundant connect-themes banner has been removed from the theme test variants step, since each variant card already shows its own connection badge and action. See [Theme test](/experiments/theme-test). * **Checkout placement limits are clearer.** Checkout placement options that already hold three blocks are now disabled in the picker instead of overflowing into the next slot. See [Checkout test](/experiments/checkout-test). * **Single-product upsell layout choice respected.** Single-product upsell tiles now follow the vertical or horizontal layout you pick in the editor, with aligned quantity and add-button controls. See [Checkout test](/experiments/checkout-test). * **Trimmed checkout block configuration.** Benefit and trust-badge blocks no longer show unused divider controls, image link URLs render as clickable anchors, and duplicate max-image copy has been removed. See [Checkout test](/experiments/checkout-test). ## Bug fixes * **Open theme editor unblocked during theme connect.** Clicking Open theme editor during the theme test connect flow now works as expected instead of being suppressed by the connect modal. See [Theme test](/experiments/theme-test). * **V5 price test percentages from metadata.** V5 price tests now resolve variant percentages from the experiment metadata, fixing cases where the displayed percentages didn't match the configured test. See [Price test](/experiments/price-test). * **Single-string URL redirect cart attribute.** URL redirect tests now handle the cart attribute when Shopify returns it as a single string rather than an array, so attribution holds for those redirects. See [URL redirect test](/experiments/url-redirect-test). * **Engagement breakdown freshness.** Engagement breakdown rows now honor the 1-hour freshness window used by the rest of the dashboard, so cached and live numbers line up. See [Engagement metrics](/analytics/engagement-metrics). * **Create-test badge and experiment table header stabilized.** The Create test badge and the experiment table header no longer shift or flicker on load. See [Experiments overview](/experiments/overview). * **Migration modal gated on V3 access.** Step 1 of the legacy V2 → V3 migration modal now gates on real V3 access state instead of the migration timestamp, so the checklist reflects what's actually enabled. See [Pricing plans](/configuration/pricing-plans). * **Shared theme test snippets preserved.** Closing one theme test no longer strips snippets that another active theme test still depends on. See [Theme test](/experiments/theme-test). * **Save to preview stays clickable on error.** The checkout test editor's Save to preview button no longer locks up after a save error, and its banner text size now matches the rest of the editor. See [Checkout test](/experiments/checkout-test). * **Non-placeable Inside delivery slot removed.** The checkout placement picker no longer lists the "Inside delivery" slot, which couldn't actually host a modification. See [Checkout test](/experiments/checkout-test). * **Mobile-only placement note in checkout editor.** Placements that only render on mobile now surface a note in the editor so you don't expect them on desktop preview. See [Checkout test](/experiments/checkout-test). * **Checkout editor scrolling restored.** Long checkout test configurations now scroll inside the editor again. See [Checkout test](/experiments/checkout-test). * **Checkout preview parity for buttons and icons.** Buttons and icons in the checkout test preview now render with the same sizing and spacing as live checkout. See [Checkout test](/experiments/checkout-test). * **Control group pricing initialization.** Price tests now initialize the control group with complete variant pricing data, fixing draft saves where some variants were missing prices. See [Price test](/experiments/price-test). * **Visual editor proxy geo redirects.** The visual editor proxy now follows Shopify geo redirects correctly, so previews in markets that geo-redirect resolve to the right storefront. See [Visual editor test](/experiments/visual-editor-test). * **Reliable staying-time delivery.** Time-on-page is now sent via an unload-safe beacon, so engagement numbers capture the last page view even when shoppers close the tab quickly. See [Engagement metrics](/analytics/engagement-metrics). * **Quieter storefront error reporting.** Storefront error reporting now scopes capture to ABConvert scripts and disables session tracking, so unrelated third-party errors no longer crowd out signal. * **Cross-origin iframe queue error fixed.** A cross-origin SecurityError in the embedded admin iframe queue has been resolved, so iframe-backed views load reliably. * **Shopify API request resilience.** Verify-request, screenshot capture, and BigQuery sync now retry transient Shopify and pipeline errors instead of failing the job, reducing background error noise. * **GA4 retry noise suppressed for unconfigured shops.** GA4 impression retries no longer exhaust and log errors for shops that haven't configured GA4. See [GA4 integration](/configuration/ga4-integration). * **Affiliate sync supports deployed Mongo env.** Affiliate sync now reads connection settings from the deployed Mongo environment, so production syncs run reliably. * **Revenue snapshot rejection non-fatal.** A Customer.io rejection during the revenue snapshot job is now treated as a warning instead of failing the run. * **Visual editor preview saves recover after errors.** A failed Save to preview now leaves the visual editor button enabled and shows an error toast so you can retry. See [Visual editor test](/experiments/visual-editor-test). * **Contextual save bar stays hidden during preview saves.** The Shopify contextual save bar no longer briefly appears when you click Save to preview in the visual editor. See [Visual editor test](/experiments/visual-editor-test). ## New features * **Engagement metrics in V2 Analytics.** The V2 analytics dashboard has a new Engagement section with click-through rate, bounce rate, and average time on page, plus a breakdown table that slices by page or template. Engagement isn't shown for checkout, shipping, or payment tests. See [Analytics overview](/analytics/overview). * **Page-scope control for analytics.** Each test type now seeds a sensible default page scope at launch (URL redirect destinations, template names, visual editor target pages, price test product handles), and you can override the scope per experiment from the analytics dashboard. See [Analytics overview](/analytics/overview). * **Checkout test edit page.** Checkout tests now have a dedicated edit page reachable from the Edit row action, so you can update a live checkout test without going through the draft path. See [Checkout test](/experiments/checkout-test). * **Checkout test settings tab in analytics.** The analytics dashboard for checkout tests now has a read-only Test settings card that groups each variant's modifications by app block (Checkout functions, ABConvert checkout block, Cart control block) with a collapsible row per modification. See [Checkout test](/experiments/checkout-test). * **Checkout test tutorial flow.** New stores get a guided checkout test walkthrough that takes you through the editor, placement, and analytics dashboard using mock data, so you can learn the flow before launching a real test. See [Checkout test](/experiments/checkout-test). * **Win-back offer for churned legacy shops.** Churned shops that previously held a legacy V2 plan can come back on their old plan name at their old price, with full V3 feature access and no V3 overage. The offer surfaces on the welcome-back page after the grace period ends, and as a Reactivate banner on the homepage while a cancelled plan is still inside its paid grace period. See [Pricing plans](/configuration/pricing-plans). * **Legacy V3 access for grandfathered shops.** Active legacy-plan shops can now opt in to V3 features without changing their subscription. A confirmation modal walks you through enabling the app embed, polls embed status in the background, runs the test migration, and lands you on a success state. See [Pricing plans](/configuration/pricing-plans). * **Redesigned pricing page.** The in-app pricing page has been rebuilt to match the new design: a store-orders slider and testing-intensity picker drive a per-plan cost estimate, the recommended plan is highlighted, and an explainer plus FAQ walk you through how billing works. No price or tier changes. See [Pricing plans](/configuration/pricing-plans). * **Experiment ID in admin UI.** Experiments now display their public ID in the admin UI so support can identify a specific test at a glance. ## Updates * **Consolidated legacy V2 → V3 migration modal.** The standalone migration page and separate confirm step have been replaced by a single reopenable modal that walks both the migration and theme reconnect steps on one screen, with inline actions and in-modal app-embed polling. See [Pricing plans](/configuration/pricing-plans). * **Polished migration flow on mobile.** The legacy billing entry, migration checklist, and variant-theme reconnect now stack cleanly on mobile, and the global variant-theme banner is suppressed on the migration page so it no longer stacks on the checklist. See [Pricing plans](/configuration/pricing-plans). * **Measure by moved into Filters.** The analytics dashboard's Measure by control now lives inside the Filters panel alongside Product group and Outlier filter, all collapsible with one-line summaries when closed. A "Filtered to" pill surfaces a non-default basis. See [Analytics overview](/analytics/overview). * **Clearer product-group filter copy.** The product-group filter in V2 analytics has clearer event-grain wording and links directly to the product groups documentation. See [Product groups](/analytics/product-groups). * **Cleaner pricing CTA hierarchy.** Only the recommended plan's CTA uses the primary button style, so the recommended choice stands out from the other plan cards. See [Pricing plans](/configuration/pricing-plans). * **Updated pricing slider copy.** The pricing slider and overage copy have been refined to talk about experiment order count, matching the underlying billing model. See [Pricing plans](/configuration/pricing-plans). * **Frontend uses experiment order count for usage.** The usage cap and overage display on the billing page now read from the cleaned-up experiment order count contract, so the numbers you see match what's billed. See [Pricing plans](/configuration/pricing-plans). * **Legacy price test method settings removed.** Old, unused price test method settings have been removed from the price test configuration to simplify the form. See [Price test](/experiments/price-test). * **Polaris Badge for original-price tag.** The original-price tag on price test cards now uses Shopify Polaris Badge styling for visual consistency, and the plans CTA copy has been relabeled. ## Bug fixes * **Exposure events with multiple experiment IDs.** Exposure and funnel events that carry an `experimentIds` array now resolve the correct shop, instead of being rejected with a missing-shop error and silently dropped. See [Analytics overview](/analytics/overview). * **V5 analytics group name mismatch.** Fixed a V5 analytics issue where group-name mismatches and missing variants caused rows to disappear from the dashboard. See [Analytics overview](/analytics/overview). * **Price test draft preserves empty original price.** Saving a price test draft with no test price set no longer falls back to the original variant price, so empty fields stay empty in the draft. See [Price test](/experiments/price-test). * **Cart Transform instruction limit for multi-market stores.** Compressed the per-variant price metafield payload so stores selling into many markets no longer trip the Cart Transform instruction limit. See [Price test](/experiments/price-test). * **Visual editor proxy locale.** The visual editor proxy now resolves locale from the URL instead of cached state, so localized previews match the locale you're viewing. See [Visual editor test](/experiments/visual-editor-test). * **Index page no longer jumps to top.** Fixed an unexpected scroll-to-top on the index page that interrupted navigation. * **Win-back V3 access tied to active subscription.** Legacy V3 access from the win-back flow is now granted only after the subscription webhook reports ACTIVE, so opening or declining the confirmation page no longer grants access without payment. See [Pricing plans](/configuration/pricing-plans). * **Win-back page renders reliably.** The welcome-back offer now renders straight from the churned-resub offer response, so churned legacy shops no longer briefly see the standard pricing grid before the offer loads. See [Pricing plans](/configuration/pricing-plans). * **Billing sync skips churned stores.** The billing sync job now skips churned stores, eliminating noisy sync errors for shops that have already left. See [Pricing plans](/configuration/pricing-plans). * **Customer.io install status.** Fixed the Customer.io install status flag so it correctly reflects fresh installs. ## New features * **Multiple redirect rules per URL redirect test.** URL redirect tests now support multiple redirect rules in a single experiment, so you can route different source paths to different variants without splitting them across separate tests. See [URL redirect test](/experiments/url-redirect-test). * **Consolidated checkout test editor.** The checkout test editor now shows one card per modification with drag-to-set placement, so you can reorder and place blocks without leaving the canvas. See [Checkout test](/experiments/checkout-test). * **Product-group scope selector in V2 Analytics.** The V2 analytics dashboard now has a scope selector that filters metrics down to a specific product group, so you can read results for the exact set of products you care about. See [Product groups](/analytics/product-groups). * **Product-group breakdown rows in V2 snapshots.** Scheduled V2 snapshots now include per-product-group breakdown rows alongside experiment-level numbers, so emailed digests reflect the same scoping you use on the dashboard. See [Product groups](/analytics/product-groups). * **Auto-grouping for price and product-scoped offer tests.** New price tests and product-scoped offer tests now bootstrap their own product group automatically from the products you select, so the test, its analytics, and any follow-up experiments stay in sync without manual setup. See [Product groups](/analytics/product-groups). * **Affiliate referrals list and commission rates.** The affiliate portal now shows a list of crawled referral installs alongside the commission rate that applies to each, so partners can see which stores were attributed and what they'll earn. * **Clickable Ask Claire sample questions.** Sample questions in Ask Claire are now clickable shortcuts, so you can launch a question into the assistant in one tap instead of retyping it. See [FAQ](/help/faq). ## Updates * **Refreshed affiliate portal design.** The affiliate portal has been re-skinned to match ABConvert's brand guidelines, with updated colors, typography, and component styling across every page. * **Cleaner checkout test placement.** Checkout test placements are now grouped by merchant block in the picker, making it easier to find the right slot when a theme exposes several blocks in the same area. Block IDs also persist a per-experiment suffix so renamed or duplicated tests don't collide. See [Checkout test](/experiments/checkout-test). * **Polished checkout preview panel.** The checkout test preview panel has clearer copy and a simplified modification configuration, removing options that didn't apply to the block you were editing. See [Checkout test](/experiments/checkout-test). * **Outlier filter applied to product-group metrics.** The V2 outlier filter now also applies to product-group metrics, so per-group numbers use the same trimmed-order treatment as experiment-level metrics. See [Metrics](/analytics/metrics). * **Order-count-based overage on V3 billing.** V3 billing overage is now calculated from experiment order count, so usage charges line up with the orders your experiments actually influenced. See [Pricing plans](/configuration/pricing-plans). * **Upsell tile preview matches checkout.** Offer test upsell tiles now render in the editor with the same layout as the checkout storefront, so what you see while editing matches what shoppers see. See [Offer test](/experiments/offer-test). * **Better support ticket follow-ups.** In-app support tickets now identify the merchant on the outbound email so replies thread correctly, and the success banner uses a clearer in-banner action instead of a small dismiss control. See [FAQ](/help/faq). ## Bug fixes * **Billing page now shows current plan price.** Fixed a bug where the Billing page could show a stale or default plan price instead of the price you're actually paying. See [Pricing plans](/configuration/pricing-plans). * **Stale visual editor metafield cleanup.** Closing the last active visual editor test now clears its theme metafield, so storefronts no longer carry leftover variant data after a test ends. See [Visual editor test](/experiments/visual-editor-test). * **Connection banner no longer flashes.** The "connect your storefront" banner no longer flashes against a stale app-embed status while the live status loads, so first-run navigation feels steadier. See [Installation](/installation). * **Cart control editor parity.** Cart control offer tests now render the same stepper behavior in the editor preview as on the storefront, and a race that could double-fire the live stepper has been fixed. See [Offer test](/experiments/offer-test). * **Compose checkout editor reopens after discard.** Discarding changes in the checkout test compose editor now reliably reopens the editor in its prior state, instead of leaving you on a blank canvas. See [Checkout test](/experiments/checkout-test). * **Path conditions reject empty strings.** Audience targeting path conditions now reject empty-string values at validation time, preventing rules that would silently match every URL. See [Audience targeting](/experiments/audience-targeting). * **Frozen product scope filtering.** Analytics filters for frozen product scopes now strip the Shopify GID prefix before querying, so product-scoped breakdowns return the rows you expect. See [Metrics](/analytics/metrics). * **Analytics start time preserved on background updates.** Experiment updates that don't trigger a sync now preserve the original start time, preventing gaps in analytics for long-running tests. See [Analytics overview](/analytics/overview). * **Original error reported on tag retries.** When tag updates exhaust their retries, ABConvert now surfaces the original error instead of a generic retry-exhausted message, making real failures easier to debug. ## New features * **Product groups in Settings.** A new account-level Product Groups entity lets you create, rename, edit, and delete reusable groups of products. Groups can be defined manually or sourced from a Shopify collection, tag, or product type. Use them to scope experiments and analytics to a consistent set of products across launches. See [Settings](/configuration/settings). * **Product-grained metrics in V2 Analytics.** The V2 analytics query layer now surfaces eight product-level metrics — including product sessions, add-to-cart rate, reached-checkout rate, conversion rate, revenue per visitor, profit per visitor, AOV, and average units per order — so you can break results down by product or product group inside a single experiment. See [Metrics](/analytics/metrics). * **Tailored retention offers in the exit flow.** When you start to cancel, the exit flow now resolves a primary best-fit retention offer plus up to two alternatives based on the cancellation reason you selected and your current plan, trial, and billing interval. Eligible offers include retention discounts, downgrades, trial extensions, or a direct support handoff. See [Pricing plans](/configuration/pricing-plans). * **Pricing-aware retention discounts.** Cancellers on V2 pricing now see a retention offer that routes them to a discounted V3 plan, with a confirmation step and a clear warning when an active subscription discount is already in place. The applied discount takes effect immediately on migration, not at the next billing cycle. See [Pricing plans](/configuration/pricing-plans). * **Active retention discount on the billing page.** The Billing page now shows the active retention discount alongside your current plan, and exit-flow returns deep-link back to Billing so you can confirm what was applied. See [Pricing plans](/configuration/pricing-plans). * **Refreshed statistical significance table.** The Analytics V2 statistical significance table now includes a dedicated p-value column and cleaner confidence interval formatting, making it easier to read at a glance which variants have hit significance. See [Statistical significance](/analytics/statistical-significance). * **GA4 impression tracking rolled out to V3.** GA4 impression tracking is now live for all V3 and V2-UI stores, so impressions flow through to your GA4 property without extra setup. See [GA4 integration](/configuration/ga4-integration). * **In-app support requests.** The Help page now opens tickets through a guided form that routes directly to the support team, replacing the previous email-only flow. See [FAQ](/help/faq). ## Updates * **Smarter theme-connect banner.** The "connect your theme" banner now only appears where it's actionable — on the homepage when you have an active experiment, or on an analytics dashboard when that specific test depends on a theme connection. It's also hidden until you've selected a plan, so new installs see a cleaner first run. See [Theme test](/experiments/theme-test). * **Cancellation feedback persisted end-to-end.** Cancellation reasons and follow-up details captured in the exit flow are now persisted to the uninstall record and instrumented as a funnel, so the team can act on the feedback you leave. See [Pricing plans](/configuration/pricing-plans). * **Exit-flow copy and confirmations polished.** Step 1 copy now matches Shopify's deferred-cancellation timing, the confirmation step calls out live-subscription discounts before you proceed, and assorted UX rough edges have been smoothed out. ## Bug fixes * **URL redirect exposure path matching.** Fixed an edge case where URL redirect tests could mis-match the exposure path on certain storefront URL patterns, causing exposure events to be dropped. See [URL redirect test](/experiments/url-redirect-test). * **URL redirect preview group switching.** Switching between groups while previewing a URL redirect test now clears the redirect marker, so the next page evaluates the freshly selected group instead of falling through to a plain reload. See [URL redirect test](/experiments/url-redirect-test). * **Price test decimal display.** Removed a leftover flag that could suppress decimals in price test V2 storefront prices, ensuring prices render with the store's normal precision. See [Price test](/experiments/price-test). * **Retention discount timing for migrations.** Fixed two related issues so that retention discounts applied during a V2→V3 migration are marked as live for the current cycle and are reflected immediately on the Billing page, rather than appearing only after the next renewal. * **Billing sync error visibility.** Removed swallowed errors from the billing sync's network calls, so genuine failures are now surfaced instead of silently retried. ## New features * **"Measure by" control in V2 Analytics.** URL redirect and template tests now have a Measure by toggle in the analytics toolbar that switches the denominator between visitors who actually saw the variant (exposure) and everyone assigned. Exposure is the new default for these test types, giving you a more accurate read on impact. See [Analytics overview](/analytics/overview). * **Exposure-based snapshots by default.** Scheduled analytics snapshots for exposure-enabled tests now compute on the exposure basis automatically, so dashboards and emailed digests line up with the new Measure by default. * **Cancellation value reminder.** When you start to cancel your plan from Billing or Settings, ABConvert now shows a value reminder modal with one-click shortcuts to test types you haven't tried yet, so it's easier to spin up a new experiment instead of churning. See [Pricing plans](/configuration/pricing-plans). * **Cancellation reason collection.** If you proceed past the value reminder, a follow-up step asks why you're cancelling with a multi-select list and an optional details field. Feedback is stored alongside the uninstall record so support can follow up. ## Updates * **More resilient exposure tracking.** Template, theme, and URL redirect tests now replay exposure events on each in-session page load, recovering data that would previously be lost if the initial landing-page request was dropped. No setup required. * **Integer-only traffic splits in the unified flow.** Traffic allocation across experiment groups is now enforced as whole-number percentages on both new launches and v5 edits, eliminating rounding drift that could push group totals over 100%. * **Uninstall feedback in customer.io.** When a store uninstalls ABConvert, the captured reason and free-text details are now forwarded to customer.io and persisted, so retention workflows can use real reasons instead of a single generic event. ## New features * **Custom events dashboard.** A new Custom Events management page lets you view, enable, disable, and create scroll-based custom events with a 3-step wizard. Rules are now backed by a single source of truth, with server-derived rule IDs that stay stable for the lifetime of the event. * **Offer test discounts are live.** The offer test type's discount engine is now fully enabled in production on V3 plans, so you can launch offer tests with volume and threshold discount tiers end-to-end. See [Offer test](/experiments/offer-test). * **Checkout test preview widget panel.** The floating storefront preview widget now includes a dedicated panel for checkout tests, showing per-variant block details alongside other test types. See [Checkout test](/experiments/checkout-test). * **In-editor variant picker for checkout tests.** Each checkout content block now renders a live preview for the selected variant directly in the editor, with a dropdown to switch variants without leaving the block. A new global variant selector keeps every block on the page in sync so you can preview an entire checkout variant in one click. * **Collapsible preview header in the checkout editor.** Each block's preview chrome (avatar, badge, Block ID, variant select) can now be collapsed to a thin summary row so you can see the checkout canvas the way customers will. See [Checkout test](/experiments/checkout-test). * **Group share in the analytics info bar.** When an experiment belongs to a mutual exclusion group, the analytics top bar now shows the group's traffic allocation alongside the existing traffic split, so you can see at a glance how much of total traffic the experiment is eligible for. See [Analytics overview](/analytics/overview). * **Experiment history records namespace updates.** Adding or removing an experiment from a mutual exclusion group is now captured in the experiment history timeline, so you can audit exactly when group membership changed. See [Settings](/configuration/settings). * **Exposure tracking groundwork.** Template, theme, and URL-redirect experiments now emit a standardized exposure event after assignment, laying the foundation for more accurate cross-channel reporting in upcoming analytics releases. ## Updates * **Mutual exclusion groups renamed to exclusion groups.** "Experiment group" has been renamed to "exclusion group" across the UI for clearer language. Copy, hints, and empty states throughout the mutual exclusion flow have been polished, and exclusion groups now cap at 5 experiments to keep traffic math predictable. See [Settings](/configuration/settings). * **Automatic Block IDs in checkout tests.** Block IDs in the checkout test editor are now derived automatically from the placement you pick, so you no longer need to type or manage them. The placement-confirmed checkbox now persists across wizard remounts, and the Copy button uses a Shopify toast instead of a transient label. See [Checkout test](/experiments/checkout-test). * **Checkout content block preview parity.** The trust badge content block now hides multi-item display options (layout, divider) when only one badge is configured, matching what visitors see on the storefront. * **Improved offer test validation.** The offer wizard now surfaces inline errors next to the field that needs attention instead of generic submission failures, and edited control offers can be removed from the wizard. The shipping rate picker is now grouped by profile and zone with clearer validation when a rate becomes invalid. See [Offer test](/experiments/offer-test). * **Decluttered offer storefront components.** The storefront component editor has been simplified: the "Pill" shape option is now labeled "Floating badge," and unused configuration has been trimmed for a cleaner setup flow. * **Price test product limit warning.** The price test product selector now flags when you exceed the supported product limit, so you can adjust the selection before launch. See [Price test](/experiments/price-test). * **Theme connection warning on variants.** Theme tests now warn you when a variant theme isn't connected to ABConvert, so you can fix the connection before launching instead of seeing missing assignments after the fact. See [Theme test](/experiments/theme-test). * **Market-aware price test view links.** Product preview links on non-primary market tabs in price tests now include the market's country code, so the preview opens in the correct market context. * **Custom event contract simplified.** Scroll-based custom event rules now use a single depth value and a stable `scroll:{ruleId}` event name, making rules easier to read and reference. * **Softer migration verify toast.** The migration verification toast has been toned down so it's less disruptive while the script is being checked. * **Settings script section cleanup.** The Settings page's script connection sections have been tidied up with clearer copy around theme connection state. ## Bug fixes * **Preview interference between exclusion groups.** Fixed a bug where previewing an experiment in one mutual exclusion group could affect assignment for experiments in a different group. * **Namespace weight rebalancing.** Fixed two related issues where adding or removing an experiment from a mutual exclusion group could push group percentages over 100% or drop the experiment ID from rebalanced weights. * **Profit uplift without COGS.** Analytics V2 no longer shows a profit uplift number when COGS isn't configured for the store, removing a misleading zero/negative figure. * **Lost assignment recovery.** The assignment tracking endpoint now resends on every visit when a previous assignment wasn't recorded, recovering data for sessions that would otherwise be missing. SRM-related dedup windows and resend timestamps have also been tightened so traffic split checks stay accurate. * **Checkout V2 gating.** The checkout V2 route and UI extension cards are now properly gated so they only appear for stores eligible for Shopify Checkout UI extensions. * **Cart.js noise from kaching script.** ABConvert's cart change calls now include `kaching_cart_ignore=true`, preventing duplicate events when stores also run the Kaching discount app. * **Paused experiment billing cap.** Fixed a billing edge case where paused experiments could be counted against your active experiment limit. * **V5 experiment metadata preservation.** Fixed a regression where saving a V5 experiment could strip metadata from the document; metadata is now preserved through every save. * **Analytics demo script banner.** The "connect your storefront script" banner no longer appears on the analytics demo page, which doesn't depend on a connected script. ## New features * **One-click migration to the unified script.** Eligible stores now see a migration banner in the dashboard with a single button that disables the legacy app embeds and enables the unified ABConvert app embed in one flow. New installs skip the banner entirely. See [Installation](/installation). * **Namespaces (mutual exclusion groups).** You can now create namespace groups from a new settings UI to keep selected experiments from running on the same visitor at the same time. Namespace intent is captured during launch and persists through draft, preview, and active states. See [Settings](/configuration/settings). * **Checkout test v2.** The checkout test type now supports content blocks, upsell tiles, and a placement checklist in the compose step, powered by a new web-component extension. See [Checkout test](/experiments/checkout-test). * **Order-level CSV export in V2 Analytics.** Export per-order analytics data (including a profit column with COGS notes) directly from the V2 Analytics dashboard. File names include the experiment prefix and date range for easier archiving. See [Metrics](/analytics/metrics). * **Customize funnel steps in V2 Analytics.** A new Customize button on the Conversion Funnel card opens a modal where you can reorder, enable, and disable funnel stages with drag-and-drop. The breakdown table now shows dynamic funnel columns that match your configured funnel. See [Metrics](/analytics/metrics). * **Duplicate experiment as draft.** Any experiment — including archived ones — can now be duplicated as a draft from the row overflow menu in the experiments table. * **Storefront install script settings.** A new Storefront integration settings panel surfaces the install script state for your theme and helps detect manual install snippets. See [Installation](/installation). * **Visual editor on V2 plans.** Visual Editor Tests are now available on V2 plans. See [Visual editor test](/experiments/visual-editor-test). * **Per-day churn metrics.** Revenue snapshots now compute per-day churn metrics for finer-grained retention analysis. ## Improvements * **Global script connection banner and redesigned Settings page.** A persistent banner flags stores whose storefront script isn't connected, and the Settings page has been reorganized for clarity. The banner is suppressed until you've completed the onboarding survey on fresh installs. * **Launch guard for script-dependent tests.** Preview and Launch actions on script-dependent test types now route through a shared Connect modal that blocks launch until the script is verified. * **Theme test variant connection check.** Theme tests now verify each variant theme is reachable before allowing preview or launch, catching unpublished or deleted themes earlier in the flow. See [Theme test](/experiments/theme-test). * **Refreshed MCP access tokens UI.** Settings → MCP tokens has a redesigned card layout, per-environment URLs, a revoke confirmation step, and per-token setup instructions. See [MCP quickstart](/mcp/quickstart). * **Branded welcome banner for MCP.** AI assistants connecting via MCP for the first time now receive a branded ABConvert welcome message with onboarding tips. See [MCP overview](/mcp/overview). * **Cleaner offer test wizard.** Redundant minimum purchase options are hidden, offer type picker arrows are aligned, and edited control offers can be removed via a new row overflow action. * **Archived experiments tab.** Delete on Active/Paused experiments is now gated, and archived tests live under a dedicated Archived tab. Copy across the experiments table consistently uses "Archive" instead of "Delete." * **Better metric tooltips and breakdown dropdown.** Metric tooltips now show the full title and description for every metric with a definition. The breakdown metric dropdown uses sentence case and correctly highlights the selected item. * **GA4 integration restricted to V3 plans.** The GA4 integration is now available only on V3 billing plans. See [GA4 integration](/configuration/ga4-integration) and [Pricing plans](/configuration/pricing-plans). * **Deprecated PDP content card removed.** The legacy PDP content card no longer appears in the experiment table. * **Updated migration banner help link.** The migration banner now points to current help content. ## Bug fixes * **Pricing analytics metrics no longer return Infinity.** Pricing analytics now guards against divide-by-zero so calculated metrics always render as finite numbers. * **Bulk-action toast on mixed selections.** Removed a confusing toast that fired when bulk actions ran against a mix of eligible and ineligible rows. * **Billing page "Have questions" button.** Fixed a frontend error when clicking the "Have questions" button on the billing page. * **Analytics demo page crash.** Fixed a crash that affected every visit to the analytics demo page; mock data now includes the discount and SRM fields the page expects. * **Visual editor lazy image replacements.** Visual editor edits no longer break when a page lazy-loads images that match a replacement rule. * **Theme-agnostic swatch price replacement.** Price replacements on color/variant swatches now apply correctly across more themes. * **Shipping rates returning empty.** Fixed a bug where certain shipping zones returned no rates during shipping tests. * **Redirect test country lookup.** Country lookup is now scoped to redirect tests that actually need it, reducing wasted requests and improving the reliability of assignment tracking. * **Duplicate "Reset web pixel" CTA.** Removed a duplicate reset web pixel button from the dashboard. * **Storewide analytics load failures.** The dashboard now degrades gracefully when storewide analytics requests fail instead of getting stuck. * **Customize funnel modal polish.** Several UI/UX issues in the Customize Funnel modal are resolved, including dropdown unselection behavior and selected-row styling. ## New features * **ABConvert MCP server (preview).** A new Model Context Protocol endpoint lets you connect AI assistants and agents directly to your ABConvert data over HTTPS with bearer-token auth. Read, list, and inspect experiments from Claude, Cursor, and other MCP-compatible clients. See [MCP overview](/mcp/overview) and [Quickstart](/mcp/quickstart). * **Offer test edit page.** You can now edit a live offer test's configuration without recreating it, including discount tiers and targeting. * **Volume and threshold discount tiers in the offer wizard.** Build offers with quantity-based ("buy 3, save 15%") or spend-based ("spend $100, get $20 off") tiers directly in the offer wizard. Tiers are reflected in both the wizard preview and the storefront widget. * **Offer test preview.** Preview offer experiments end-to-end before launch — browse mode, password-protected storefronts, and the storefront widget are all supported in the preview flow. * **Discount metrics in V2 Analytics.** The V2 Analytics dashboard now reports discount usage, discount amount, and discount-adjusted revenue alongside existing experiment metrics. See [Metrics](/analytics/metrics). * **Offer test surfacing in app UI.** Offer tests now show a dedicated icon in the experiments table and render their configuration in the analytics test settings tab, so it's easy to spot and review them at a glance. ## Improvements * **"Content Test" renamed to "Visual Editor Test".** The test type is now called Visual Editor Test throughout the app and docs to better match what it does. See [Visual editor test](/experiments/visual-editor-test). * **Unified back button on create test pages.** All create-test flows now return you to the same place when you cancel, making navigation more predictable. * **More complete event metrics.** Five additional event-count metrics are now tracked in analytics snapshots, giving you finer-grained visibility into funnel events. * **Funnel reporting (early access).** Internal funnel data pipeline and reporting APIs are now live, paving the way for a richer funnel report in the analytics dashboard. ## Bug fixes * **Currency display in V2 Analytics.** Fixed a bug where V2 Analytics could show the wrong currency symbol for stores using a non-USD default. Currency now consistently reflects your store settings. * **Device targeting for checkout, payment, and delivery customization tests.** Fixed a regression where device targeting (mobile/desktop) was not being applied to checkout UI, payment customization, or delivery customization tests. * **Filter input crash.** Fixed a crash caused by special characters (`(`, `[`, `*`, etc.) in filter inputs across the dashboard. Filters now handle regex metacharacters safely. * **Cleaner analytics error handling.** Analytics dashboards no longer treat error responses as valid data, preventing misleading numbers when an upstream request fails. ## New features * **Offer test (early access).** End-to-end support for amount-off-product and amount-off-order offer experiments has landed, powered by a unified offer lifecycle and discount engine. Reach out to support if you'd like to pilot offer testing on your store. * **Drop-off metrics in analytics.** Experiment results now include funnel drop-off metrics so you can see exactly where visitors leave between view, cart, checkout, and purchase. See [Metrics](/analytics/metrics). * **Cost-of-goods warnings on the Impact Dashboard.** When COGS data is missing or stale, the homepage Impact Dashboard now flags it inline so profit lift numbers don't quietly mislead you. See [Analytics overview](/analytics/overview). * **Grouped metrics in the analytics breakdown.** The breakdown table now clusters related metrics (revenue, conversion, AOV, funnel) into named groups for faster scanning across variants. * **Auto-launch for pending price tests.** The AI theme compatibility check now auto-launches any price tests that were waiting on theme verification once the check passes — no need to come back and start them by hand. See [Price test](/experiments/price-test). ## Improvements * **Redesigned create-test page.** The new test creation flow groups test types more clearly and merges the standalone checkout chooser into a single, simpler picker. * **Faster, lighter storefront script.** Price, theme, template, shipping, visual editor, and URL redirect tests now all run on the unified ABConvert script runtime. Custom-event tracking, visitor labels, and theme cache clearing are folded into the same embed, which means fewer script tags and a smaller storefront footprint. * **More accurate SRM detection.** Sample-ratio mismatch checks now reset their evaluation window after a traffic split change so a deliberate reallocation no longer trips the alarm. * **Subscription products blocked from price tests.** Subscription items are now filtered out during price test product selection to prevent unsupported configurations. See [Price test](/experiments/price-test). * **API hardening.** The V2 experiment APIs received a round of validation and error-handling improvements as part of the new ABConvert MCP server preview. See [API overview](/api-reference/overview). ## Bug fixes * **Preview widget bucketing.** Fixed a bug where the preview widget could route to the wrong target URL when bucketing visitors into a variant. * **Feature flags on fresh sessions.** Fixed a race where feature flags could be evaluated before the merchant identity resolved on a brand-new session, occasionally hiding features that should have been available. * **Annual billing on V3 plans.** Fixed a billing error by blocking annual subscriptions from attaching usage line items, and prevented annual checkout for V3 plans where it isn't supported. * **Legacy variant cleanup.** Fixed a Shopify GraphQL error caused by empty variant IDs slipping into legacy cleanup runs. * **Embedded admin authentication.** Fixed a regression where some embedded admin requests using App Bridge session tokens could be rejected as "Invalid token" after the new API token middleware was introduced. ## New features * **Self-service script removal.** Merchants on no-plan accounts with leftover ABConvert tests can now clean up active tests and remove storefront scripts on their own from a new **Remove Scripts** page — no support ticket required. * **URL pattern presets in the visual editor.** The "Where should this change appear?" modal now opens with one-click scope presets (Every page, Product pages, Collections, Custom) so you don't have to hand-write glob patterns. Each pattern row shows a plain-English match preview. See [Visual editor test](/experiments/visual-editor-test). * **Multi-URL targeting for visual editor mutations.** A single visual edit can now apply to multiple Shopify routes — useful when the same product appears at `/products/foo` and `/collections/*/products/foo`. Locale handling is now explicit via globs instead of hidden behavior. * **Upgrade-to-unlock prompts for starter plans.** When a recommended test type isn't available on your current plan, you'll now see a clear "Upgrade required" badge and an inline upgrade modal instead of running into dead ends mid-flow. See [Pricing plans](/configuration/pricing-plans). * **Richer experiment table.** The experiments list now surfaces impact metrics directly in the table so you can scan winners and lifts without opening each test. See [Metrics](/analytics/metrics). * **Cumulative added-revenue and added-profit trends.** Experiment results now display cumulative trends for revenue and profit added by the winning variant, so the upside compounds visibly over the run of a test. * **Outlier filtering for analytics.** Shop-level settings now let you exclude revenue outliers from order-based metrics using either z-score exclusion or an absolute cap, producing more stable comparisons on stores with occasional large orders. See [Statistical significance](/analytics/statistical-significance). ## Improvements * **Visual editor error recovery.** The canvas now shows a retry button when a page fails to load, plus a one-click reload next to the URL bar. Timeout messages explain what happened and what to try next. * **URL redirect product-not-found is now a warning.** A missing product handle is reported as a warning instead of a hard error, so a stale handle no longer blocks you from saving the rest of a redirect test. See [URL redirect test](/experiments/url-redirect-test). * **Help banner consolidated.** The dashboard's two stacked help cards collapsed into a single, more compact info banner with clearer copy and region-specific availability windows. * **Cleaner navigation for accounts without a plan.** The sidebar now shows only the relevant entries (Pricing, plus Remove Scripts when applicable), and the brief flicker on dashboard load is gone. ## Bug fixes * Fixed a crash in **experiment history** caused by HTML error responses being parsed as JSON; the modal now surfaces a clean error message instead of failing silently on Safari. * Fixed **currency display** in the price test Target Market selector for stores that inherit the default currency from the shop (previously fell back to USD, even on EUR stores). * Fixed **visual editor mutations leaking across pages** in the canvas — edits made on one product page no longer apply when previewing a different product. * Fixed the **URL pattern modal** so it scrolls correctly when adding many patterns. # GA4 Integration: Track Experiments in Google Analytics Source: https://docs.abconvert.io/configuration/ga4-integration Connect ABConvert to GA4 to receive experiment impression events and analyze test group performance alongside your other Google Analytics data. Connecting ABConvert to Google Analytics 4 lets you analyze experiment performance alongside all of the other behavioral data you're already collecting in GA4. Once connected, ABConvert fires a custom event every time a visitor is assigned to an experiment, so you can build reports that segment any GA4 metric — sessions, revenue, engagement — by experiment and variant. ## What gets tracked When the integration is active, ABConvert sends a `abconvert_experience_impression` event to your GA4 property each time a visitor enters an experiment. The event includes: | Parameter | Description | Example | | ------------------------------ | ----------------------------------------------------------------------- | --------------------- | | `abconvert_experiment_id` | The numeric experiment ID | `1001` | | `abconvert_experiment_name` | The experiment name | `Homepage price test` | | `abconvert_group_index` | The assigned test group index | `1` | | `abconvert_variant_name` | The assigned variant name | `Variant B` | | `abconvert_exp_variant_string` | Combined experiment + group key in the format `experimentId-groupIndex` | `1001-1` | | `abconvert_assignment_reason` | Why this assignment happened | `random_split` | These parameters are available as event parameters in GA4 and can be used to create custom dimensions, apply them to explorations, or build audience segments. ## Setup In Google Analytics, go to **Admin** → **Data Streams** → select your web data stream. Your Measurement ID appears at the top right of the stream details panel. It follows the format `G-XXXXXXXXXX`. Click the copy icon next to the Measurement ID or select the full string (including the `G-` prefix). In ABConvert, go to **Settings** and find the **GA4 Measurement ID** field. Paste your Measurement ID and click **Save**. Run a live experiment and open **GA4 → Reports → Realtime**. You should see `abconvert_experience_impression` appearing in the event stream within a few minutes of a visitor being assigned to an experiment. GA4 Realtime overview showing event count by event name with abconvert_experience_impression listed in the event stream Your Measurement ID must follow the format `G-XXXXXXXXXX` (the letter G followed by a hyphen and alphanumeric characters). ABConvert validates the format when you save — if the field shows an error, double-check that you've copied the full ID from GA4. ## Building reports in GA4 Once the integration is running and impression events are flowing into GA4, you can analyze experiment data in several ways. **Custom dimensions** To use ABConvert event parameters in standard GA4 reports, register them as custom dimensions: 1. Go to **Admin** → **Custom definitions** → **Custom dimensions** 2. Click **Create custom dimension** 3. Set the scope to **Event** 4. Set **Event parameter** to one ABConvert parameter (for example `abconvert_experiment_name` or `abconvert_variant_name`) 5. Repeat for other parameters you want to report on After registering, GA4 will start populating the dimension in reports going forward (historical data won't be backfilled). GA4 edit custom dimension dialog showing scope set to Event and event parameter field for an ABConvert parameter **Explorations** GA4 Explorations give you the most flexibility for analyzing experiment results. To compare variants correctly, create one **user segment** per test group. In GA4, go to **Explore** and choose **Segment overlap**. Add a **User segment** with an event condition where event name equals `abconvert_experience_impression`, then filter the same event by: `abconvert_experiment_id = ` `abconvert_group_index = 0` Duplicate the control segment and change `abconvert_group_index` to `1`, `2`, or other variant indexes used in your experiment. Add business metrics like purchases, revenue, or engagement and compare segments side by side. GA4 custom segment setup screen with User segment selected as the segment type GA4 user segment condition builder filtering abconvert_experience_impression by ABConvert experiment and variant fields If you want a single filter field per segment, use `abconvert_exp_variant_string` (for example `1001-0` for control and `1001-1` for Variant 1). **Funnel exploration** Build a funnel exploration with steps for page view → add to cart → purchase, then apply variant segments as breakdowns. This lets you see exactly where in the purchase funnel each variant performs differently. ## Things to know * GA4 impression events are fired client-side by the ABConvert script. If a visitor has an ad blocker or has opted out of tracking, the event may not be sent. * The integration supplements ABConvert's own analytics — it does not replace them. Use ABConvert's dashboard for statistical significance calculations and conversion metrics; use GA4 for deeper behavioral and cross-channel analysis. * There is no additional cost in ABConvert or GA4 for enabling this integration. GA4's standard event limits apply. # Pricing Plans Source: https://docs.abconvert.io/configuration/pricing-plans Find the plan that best fits your needs ## ABConvert plans All plans are order-based pricing, designed to align with your store's performance. Choose a plan based on your monthly order volume, run experiments risk-free with a free trial, and scale as your store grows. | **Plan** | **Monthly subscription fee** | **Included experiment orders** | **Overage per 1,000 extra experiment orders** | | :------------ | :--------------------------- | :----------------------------- | :-------------------------------------------- | | **Starter** | \$99/mo | 1,000 | \$59 | | **Growth** | \$199/mo | 5,000 | \$39 | | **Scale** | \$399/mo | 15,000 | \$29 | | **Pro** | \$599/mo | 30,000 | \$24 | | **Unlimited** | \$2,499/mo | Unlimited | \$0 | For all first-time users, all plans include a **14-day free trial**. You can run experiments and evaluate results before committing. (Exception: **Unlimited** plan has no free trial) ## What each plan includes | | **Starter** | **Growth** | **Scale** | **Pro** | **Unlimited** | | :-------------------------- | :---------- | :--------- | :-------- | :------ | :------------ | | **Test Types** | | | | | | | URL test | ✅ | ✅ | ✅ | ✅ | ✅ | | Template test | ✅ | ✅ | ✅ | ✅ | ✅ | | Theme test | ✅ | ✅ | ✅ | ✅ | ✅ | | Visual editor test | ✅ | ✅ | ✅ | ✅ | ✅ | | Offer test | ✅ | ✅ | ✅ | ✅ | ✅ | | Price test | ❌ | ✅ | ✅ | ✅ | ✅ | | Multi-market price test | ❌ | ❌ | ✅ | ✅ | ✅ | | Shipping test | ✅\* | ✅\* | ✅\* | ✅\* | ✅\* | | Payment customization test | ✅ | ✅ | ✅ | ✅ | ✅ | | Delivery customization test | ✅ | ✅ | ✅ | ✅ | ✅ | | Checkout UI extension test | ✅\*\* | ✅\*\* | ✅\*\* | ✅\*\* | ✅\*\* | | **Support** | | | | | | | 24/7 AI Chat | ✅ | ✅ | ✅ | ✅ | ✅ | | Email Support | ✅ | ✅ | ✅ | ✅ | ✅ | | Priority Tech Support | ❌ | ❌ | ✅ | ✅ | ✅ | | Dedicated Slack Support | ❌ | ❌ | ❌ | ✅ | ✅ | | Theme Integration Support | ❌ | ❌ | ❌ | ✅ | ✅ | Some test types require a specific Shopify plan due to technical limitations, regardless of your ABConvert plan: * Shipping test (\*): Requires Shopify Plus for Carrier Service API * Checkout UI extension test (\*\*): Requires Shopify Plus ## How order limits and overage work Each plan includes a number of **experiment orders** per billing cycle. For example, the Growth plan includes 5,000 experiment orders. An experiment order is any order that participated in one of your tests during that billing cycle. You pay overage only when your **experiment orders** exceed your plan limit. Orders that never enter a test do not create overage charges. **Key insight:** There is no minimum test duration requirement. The old 7-day rule no longer applies. If an order participated in a test during the billing cycle, it counts toward your billing usage. You can monitor your experiment orders and overage status anytime from the **Billing** page in the ABConvert dashboard. ## FAQs **Starter**: New or low-volume stores starting with A/B testing **Growth**: Growing stores running consistent experiments (most popular) **Scale**: High-volume stores optimizing multiple funnels **Pro**: Advanced teams needing deeper support and collaboration **Unlimited**: Enterprise stores running continuous, large-scale testing For billing, ABConvert counts **experiment orders**, not all store orders. An order counts when it participates in one of your tests during the billing cycle. If the same order touches multiple tests, ABConvert still counts it only once for billing. Orders that never enter a test do not count toward overage billing. Overage charges apply when your **experiment orders** exceed your plan limit during the billing cycle. If your store has high total order volume but only a small number of those orders participated in tests, ABConvert charges based only on experiment orders. Overage is billed per 1,000 **experiment orders** over your limit, rounded up. *Example:* You're on the Growth plan (5,000 order limit), and 6,800 orders participated in your tests this month. * Experiment orders over limit: 1,800 * Billable units: 2 (rounded up from 1.8) * Overage charge: 2 × $39 = _$78\_ * Total for the month: $199 + $78 = *\$277* Every plan has a **maximum overage charge** per billing cycle, and you can check your cap on your billing page. Once you hit this cap, no additional overage is charged for the rest of that billing cycle, though new experiments will be paused until the next cycle begins. The cap resets automatically each cycle. Overage is calculated and charged through Shopify's standard 30-day billing cycle. It appears on the same invoice as your subscription renewal, on the same billing date every 30 days from your activation date. You can switch your plan anytime by going to **ABConvert > Billing > View plans**. Find the plan that best fits your needs and select **Choose this plan**. # App Settings: Configure ABConvert for Your Store Source: https://docs.abconvert.io/configuration/settings Control how ABConvert runs on your store — from tracking scripts and order tagging to COGS configuration and Google Analytics. The Settings page is where you control the core behavior of ABConvert across your store. Most settings apply globally to all experiments, so it's worth reviewing them before you launch your first test. ## Theme connection The ABConvert unified script must be activated in your theme for experiments to run. This app embed loads the tracking and experiment logic on every page of your storefront. You can check connection status or change methods here. Connect status ### Connect method 1: Theme embed app (recommended) 1. Click **Change method** 2. Choose **Use app embed** Use app embed 3. Follow the steps to enable in Shopify theme editor and click **Verify status** to check Enable app Once enabled, the unified script loads automatically on all pages. You don't need to re-enable it unless you switch to a new theme. ### Connect method 2: Manual installation (for edge cases) If your theme has a unique pattern or needs special configuration for better performance, you can install the script manually by adding a code snippet to your theme's `theme.liquid` file. This method requires manual management to your theme files, only change to this method when needed. Manual installation requires editing your theme code manually. If you're not comfortable with Liquid or HTML, contact ABConvert support for assistance. **Steps for manual installation:** 1. Click **Change method** 2. Choose **Add script to theme code** Add script to theme code 3. Follow the steps to add scripts to your Shopify theme.liquid file Manual connect After finishing, when you update or change your theme, you still need to re-add this snippet to the new theme's `theme.liquid` file. ## WebPixel status ABConvert uses a Shopify web pixel to track visitor events — page views, add-to-cart, checkout — with high accuracy. The web pixel is required for accurate analytics. Without it, ABConvert cannot collect and show experiment data correctly in analytics dashboard. If the web pixel is not enabled, please create Webpixel before start a test. If it becomes misconfigured, use the **Reset** option to recreate it. WebPixel ## Carrier service Carrier service configuration is required for shipping rate experiments. When a carrier service is registered, ABConvert intercepts Shopify's shipping rate requests and returns the test rates for visitors in the experiment group. The Settings page shows whether a carrier service is currently configured. You can delete the carrier service from this page if you no longer need shipping tests. Carrier service You cannot delete the carrier service while a shipping experiment is running. Stop all active shipping tests first. ## Order tag ABConvert can automatically tag orders with experiment data, making it easy to segment orders by test group in your Shopify admin or in reports exported from ABConvert. Order tags Click **Configure order tags** in Settings to open the tag configuration panel. For each experiment type, you can choose one of three tagging modes: | Mode | Example tag | | -------- | ------------------------------------------------------------ | | No tag | *(no tag added)* | | Plain | `ABConvert Price Test` | | Detailed | `ABConvert Price Test: Group 0`, `ABConvert Price Test: 123` | | Custom | Your own tag text (up to 40 characters) | Order tags are available for: Price Test, Shipping Test, URL Redirect Test, Template Test, Theme Test, and Checkout Test. Order tags configuration Use the Detailed tag mode if you want to filter orders by specific experiment variant in your Shopify admin or third-party reporting tools. ## Price test method ABConvert evaluates your store during setup and assigns the optimal price test method. Currently, you cannot switch your method on your own, and all stores will be using Shopify function by default. Price test method ## Order outlier filter The order outlier filter excludes unusually large orders from your Analytics dashboard, preventing them from skewing your experiment results. Outlier filter You can choose from three filtering methods: | Method | How it works | | ----------------------------- | --------------------------------------------------------------------------------------- | | **No filter** | All orders are included in analytics (default) | | **Maximum revenue per order** | Excludes orders above a specific dollar amount you define | | **Z-score exclusion** | Excludes orders that are statistical outliers based on standard deviation from the mean | ### Maximum revenue per order Set a dollar threshold (e.g., \$500). Any order above this amount is excluded from analytics. Use this when you know the upper bound of typical orders for your store. ### Z-score exclusion Define a threshold between 1 and 5 (typical range: 2 to 4). Higher values keep more orders; lower values exclude more outliers. A threshold of 3 excludes orders more than 3 standard deviations from the mean. If your store occasionally receives large wholesale or bulk orders that aren't representative of typical customer behavior, use the outlier filter to get clearer experiment results. ## COGS settings ABConvert uses your COGS (cost of goods sold) data to calculate profit metrics in analytics, including **Profit per Visitor**, **Profit Uplift**, and other profit-based comparisons. COGS Click **Manage COGS settings** to configure these fields: Configure COGS **Product Costs** * **Automatic mode**: Sync product costs directly from Shopify. Choose daily sync frequency if your costs change often. * **Manual mode**: Upload a CSV file with product costs for more control **Shipping Costs** * Set your average shipping or fulfillment cost per order **Transaction Fees** * Configure payment processing fees as percentage + fixed amount (e.g., 2.9% + \$0.30) **Tier Costs** (optional) * Override base product costs by quantity tier for wholesale or bulk order scenarios * Define cost breaks at different quantity thresholds If product costs are missing, ABConvert cannot calculate profit metrics correctly. Profit per Visitor and related metrics may show as zero or inaccurate until COGS data is properly configured. Use Automatic mode with daily sync if your product costs fluctuate frequently. This keeps your profit calculations up to date without manual CSV uploads. ## Product groups Product groups are reusable sets of products you can apply as a filter on a test's Analytics dashboard. Build one from a collection, tag, product type, or a hand-picked list. Click **Manage Product Groups** to create and edit them. See [Product Groups](/analytics/product-groups) for how to use them in analytics. ## GA4 Measurement ID Enter your Google Analytics 4 Measurement ID here to connect ABConvert to your GA4 property. When configured, ABConvert fires a custom event in GA4 each time a visitor is assigned to an experiment, letting you analyze experiment data alongside your other GA4 metrics. See [GA4 Integration](/configuration/ga4-integration) for setup instructions. ## Settings FAQs Yes. We recommend keeping the ABConvert app embed turned on, even when you are not running tests. It will not affect your store if there are no active tests running, and it keeps your store ready for future tests and helps ABConvert confirm your storefront is connected. Confirm the ABConvert app embed is enabled on the theme where your tests should run. Modifying a theme will not affect the embed app, but changing to a new theme will require you to enable the ABConvert app embed in the new theme before starting a test. You can still view existing test data and historical analytics. However, ABConvert will ask you to reconnect before you can preview, launch, or continue tests that need the storefront script. The app embed is recommended for most stores, but some custom themes may perform better with manual installation. If you notice slower loading or flickering, contact ABConvert support and we can help check whether manual setup is a better fit. # Audience Targeting: Filter Who Sees Your Experiments Source: https://docs.abconvert.io/experiments/audience-targeting Learn how the traffic system works in ABConvert, including traffic allocation, audience targeting, and group assignment rules Before a visitor ever sees a variant, ABConvert determines exactly who qualifies. To ensure your analytics remain perfectly clean, every visitor goes through a deterministic evaluation flow before they see a final variant. ABConvert traffic flow with Exclusion Group before Traffic Allocation When creating a test, you can configure these rules in **Step 2: Audience**. Audience step configuration in test setup ## Exclusion Group (optional) If you add an experiment to an **Exclusion Group**, ABConvert ensures each visitor can enter only one experiment in that group. This prevents experiment overlap from contaminating your results. ABConvert uses a deterministic group-level hash and preconfigured ranges to decide which experiment a visitor can enter. Once assigned, that visitor stays in the same Exclusion Group assignment for consistency. ABConvert Exclusion Group configuration where one visitor can only join one experiment in the same exclusion group You can create, edit, and delete Exclusion Groups in **Settings**. ABConvert Settings page where merchants can create, edit, and delete exclusion groups ## Traffic allocation When a visitor arrives at your store, ABConvert first decides whether they should enter the test at all. You control this with the **Traffic allocation** percentage (1–100%). * **100%** — All eligible visitors enter the test (recommended) * **Lower percentages** — Useful for cautious rollouts or limited inventory For example, if you set traffic allocation to 50%, half of your visitors will enter the test and half won't. This decision is **sticky** — once a visitor is included or excluded, they stay that way for the duration of the test. Traffic allocation control for deciding how many visitors enter the test ## Audience filters (optional) After passing traffic allocation, visitors go through audience filters. These let you narrow down exactly who sees your test. Filters only apply to visitors who haven't been assigned yet. Audience filter builder with country, traffic source, device, and visitor type options ### Basic filters * **Countries** — Target specific geographic regions * **Traffic Sources** — Filter by where visitors came from (paid ads, organic search, social, email, etc.). See *Understanding Traffic Sources* below for full details. * **Devices** — Target desktop or mobile visitors * **Visitor Type** — Target new visitors or returning visitors. **Note:** Enable ABConvert Visitor Label in your embedded apps at least 2 weeks before using this filter. ### Advanced filters You can use **Advanced filters** to expand these options: * **Referral Domain** — Filter by the referring website domain * **Landing Page URL** — Target visitors arriving at specific pages * **URL Parameters (UTM)** — Target visitors with specific UTM parameters * **Cookie Values** — Target based on existing cookie data Advanced filters support complex logic, for example: Landing Page URL **starts with** /products **and contains** /A or /B or /C. Advanced filter example showing combined landing-page conditions ### Understanding traffic sources ABConvert detects where a visitor came from using two signals on their first page load: * **Click IDs in the URL** — When someone clicks a paid ad, the ad platform automatically appends a unique ID to the landing URL (e.g. `gclid` for Google Ads, `fbclid` for Facebook Ads, `ttclid` for TikTok Ads). ABConvert reads this to identify paid visitors reliably. * **Referring page** — When a visitor clicks a link on another site, the browser passes along where they came from. ABConvert uses this to detect organic search, organic social, and referral traffic. Once detected, the traffic source is saved for the entire session, so navigating to other pages won't change the visitor's classification. ### Channels Channels group visitors by acquisition type: * **Paid Search** — Clicked a Google Ads or Bing Ads link (detected by `gclid` or `msclkid` in the URL) * **Organic Search** — Clicked an organic result from Google, Bing, Yahoo, DuckDuckGo, etc. * **Paid Social** — Clicked a paid social ad on Facebook, TikTok, Instagram, etc. (detected by `fbclid`, `ttclid`, or `utm_medium=cpc/paid`) * **Organic Social** — Clicked an organic post on Facebook, Instagram, TikTok, Twitter/X, or YouTube * **Email** — URL contains `utm_source=email` or `utm_medium=email` * **SMS** — URL contains `utm_source=sms` or `utm_medium=sms` * **Affiliate** — URL contains `utm_medium=affiliate` * **Referral** — Came from another website (not a search engine or social platform) * **Direct** — No referrer and no UTM params (typed URL, bookmark, or unknown source) ### Platforms Platforms let you target a specific source within a channel. For example, selecting **Google** captures all Google visitors, both paid (Google Ads) and organic (Google Search). Available platforms: Google, Facebook, Instagram, TikTok, Twitter/X, YouTube, Bing. ### How filters work together A visitor must pass **all** enabled filter groups to proceed to group assignment. **Example configuration:** * Country: United States OR Canada * Device: Mobile * Traffic source: Facebook OR Instagram **Result:** Only mobile visitors from US/Canada arriving from Facebook or Instagram will enter the test. ## Targeting rules (optional) Targeting rules let you force-assign specific visitors to a particular group, instead of random assignment. Rules are evaluated in order, the first matching rule wins. 1. **Add a rule**\ Click **+ Add rule** to create a condition 2. **Set conditions**\ Choose from: Country, Traffic Source, Referral Domain, Landing Page, Device, UTM parameter, Cookie 3. **Set the action**\ Choose what happens when the rule matches: * **Assign to group** — Send matching visitors directly to Control or a Variant * **Random split** — Pass to the normal random assignment step * **Exclude** — Remove from the test entirely (not tracked in analytics) Targeting rules panel with assign, random split, and exclude actions **Example:** "IF Device is Desktop → Assign to Control" **Default:** Visitors who don't match any rule are randomly split according to your group percentages. ## Random group assignment If a visitor passes all filters and doesn't match any targeting rules, they are randomly assigned to a test group based on your split percentages. ABConvert uses a deterministic hash so the same visitor always lands in the same group across sessions, even if they clear cookies or return days later. **Example:** For a 50/50 split, visitors with hash 0–49 see Group 0 and hash 50–99 see Group 1. ## Audience targeting FAQs Even with a 50/50 split, analytics may show 52/48 or similar. This is normal for two reasons: 1. **Smaller sample = more variance**\ Audience filters reduce the visitor pool. With 100,000 visitors you'll see near-perfect 50/50. With 1,000 visitors after filtering, 48/52 is statistically normal. 2. **Short-term randomness**\ Like flipping a coin — you might get 6 heads and 4 tails in a short run. It evens out over time. **What to do:** Let the test run longer. As sample size grows, the distribution naturally balances. Each test assigns visitors independently. The same visitor can be in different groups across different tests — this is by design. Each test's assignment is isolated and based on its own experiment ID. **Example:** * Price Test A → Visitor in Group 0 (Original) * Theme Test B → Same visitor in Group 1 (Variant) * Shipping Test C → Same visitor in Group 2 This is not currently possible. We're planning to launch a test grouping feature that will unlock this use case — stay tuned! Yes. You can adjust the allocation percentage at any time. However, visitors who were already excluded stay excluded. **Example:** If you start at 50% and increase to 80%, the extra 30% comes from previously excluded visitors. Yes, but changes only affect new, unassigned visitors. Visitors already in a group keep their original assignment. **Best practice:** Test your filters thoroughly before launching to avoid losing attribution data. They are permanently excluded from the test. They won't see any variant and won't appear in test analytics. # Checkout test Source: https://docs.abconvert.io/experiments/checkout-test A/B test changes to your Shopify checkout to see what lifts orders and revenue. A checkout test splits your visitors into groups, shows each group a different checkout, and measures which completes more orders. You decide what every group sees, and ABConvert compares the results. Checkout tests are available on all ABConvert plans. Delivery and Payment modifications work on any Shopify plan. Content, Cart, and Upsell modifications require **Shopify Plus**. ## When to use it Use a checkout test to prove a change lifts orders or revenue before rolling it out: * **Raise order value with an upsell.** Show a product recommendation inside checkout and compare average order value against Control. * **Win more orders with reassurance.** Add trust badges, a guarantee banner, or payment icons, and measure whether more visitors finish. * **Guide shipping choice.** Rename or reorder shipping options to make a faster option clearer. * **Streamline payment methods.** Hide, rename, or reorder payment methods and measure the effect on completed checkouts. ## When NOT to use it Checkout tests change only what visitors see *at checkout*. If your change happens earlier, use the test built for that surface: * **Testing a product's price?** Use a [price test](/experiments/price-test). Checkout tests don't change the price shoppers pay. * **Testing a discount or promotion?** Use an [offer test](/experiments/offer-test). A checkout test can rename a payment method but can't discount it. * **Testing a landing or product page?** Use a [URL redirect test](/experiments/url-redirect-test) or [theme test](/experiments/theme-test). Checkout tests don't touch the pages leading up to checkout. ## What you can change A checkout test can modify five things. Combine several in one variant, and give each variant its own set. | Category | What it changes | | ------------ | -------------------------------------------------------------------------------------------- | | **Delivery** | Which shipping options shoppers see at checkout and how they're labeled. | | **Payment** | Which payment methods shoppers see and how they're labeled. | | **Content** | Adds visual blocks (banners, trust badges, benefits, images) that build confidence. | | **Cart** | Whether shoppers can edit cart lines at checkout: change variant, quantity, or remove items. | | **Upsell** | Recommends extra products at checkout so shoppers add them without leaving the page. | ## Set up a checkout test Choose the **Checkout** type, name the test, set a hypothesis, pick your primary metric, and add the variants to test against Control. Set the traffic split and targeting rules. See [Audience targeting](/experiments/audience-targeting). Open the **Compose checkout** editor for a group, click **Add modification**, pick a category, and configure it. A live preview on the right updates as you build, and the tabs at the top switch which group you're previewing. It's an approximation of your checkout; confirm the real thing on your storefront before launch (see [Preview on your storefront](#preview-on-your-storefront)). Compose checkout editor showing a live preview with Added badges on an upsell block and a trust badge Two toggles help while you build: * **Show diff markers** flags how the group differs from the original checkout page: **Added** and **Modified** blocks get a solid ring, **Hidden** ones a dashed ring. * **Desktop / Mobile** switches the viewport. Check the **Mobile** viewport too. Most checkout traffic is on mobile, and the desktop and mobile views can differ, so a block that looks right on one may not on the other. Compose checkout preview in the mobile viewport with a collapsed order summary bar Click **Save**. ABConvert shows a card listing the blocks to add in the Shopify checkout editor. See [Add your blocks](#add-your-blocks-in-the-checkout-editor). Preview every group on your storefront to confirm each renders correctly, then click **Launch test**. See [Preview on your storefront](#preview-on-your-storefront). ## Add your blocks in the checkout editor Add the listed blocks exactly where ABConvert shows them, or your test won't render.