> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abconvert.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> 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.

<Update label="Week of July 6, 2026">
  ## 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).
</Update>

<Update label="Week of June 29, 2026">
  ## 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.
</Update>

<Update label="Week of June 22, 2026">
  ## 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).
</Update>

<Update label="Week of June 15, 2026">
  ## 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.
</Update>

<Update label="Week of June 8, 2026">
  ## 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.
</Update>

<Update label="Week of June 1, 2026">
  ## 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.
</Update>

<Update label="Week of May 25, 2026">
  ## 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.
</Update>

<Update label="Week of May 18, 2026">
  ## 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.
</Update>

<Update label="Week of May 11, 2026">
  ## 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.
</Update>

<Update label="Week of May 4, 2026">
  ## 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.
</Update>

<Update label="Week of April 27, 2026">
  ## 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.
</Update>

<Update label="Week of April 21, 2026">
  ## 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.
</Update>
