Case study 04

The test was running.The data was not.

ExperimentationConvert.com, Shopify2022 to 2025Verified

An agency CRO team, 2022 to 2025. The build side of its testing: the installs, the variants, and the tracking that kept breaking.

For two and a half years I was one of three developers on an agency's CRO team. The strategist wrote the hypotheses and read the results. We built the variants, installed the testing tool, and kept the numbers honest.

This is the part of that work that rarely gets written up: the installs, the experiments that stopped collecting data without anyone noticing, and what the tests I built actually read, the losing one included.

6

Brands where I installed Convert, May to December 2024. One install was manual, so it would work with Checkout Extensibility.

Install tasks, May to December 2024

20

Test variants I built, alone or with another developer, for 18 tests at nine brands.

Test and build tasks, November 2022 to April 2025

7

Of those tests, the ones with a result on record. One lost clearly, one won on a sample too small to trust, five did not clear the bar.

Client tracking sheets

Section 01

What the job was

Four of us: a strategist and three developers, of whom I was one. She wrote the hypotheses, set the goals and read the results. We built the variants, previewed and QA'd them, launched them, and when a number stopped making sense, we were the ones who had to find out why.

The tools changed under us. Google Optimize in 2022, split URLs in PageFly in 2023, VWO's free plan until its monthly session cap blocked further tests in March 2024, and Convert from May 2024, after I wrote up the technical case for it.

The program wound down in April 2025. The records it left are what this write-up is built from.

Section 02

Six installs and one removal

Between May and December 2024 I installed Convert for six brands: creating each project, adding the tracking code to the theme, and setting up the goals its tests would be read against.

ClosedBrandWhat went in
May 2024A luggage brandConvert
May 2024A water bottle brandConvert
May 2024A supplements brandConvert and Microsoft Clarity
Oct 2024Another DTC brandConvert, with the store and analytics access checked first
Nov 2024A home goods brandConvert, installed manually so it would work with Checkout Extensibility
Dec 2024A GNSS hardware makerConvert, after asking whether the US and international stores were both in scope
Source: install tasks in the agency's project management tool, closed May to December 2024

One store still carried a previous agency's Convert and Clarity code. I removed it in June 2024.

The same month, none of the agency's Convert experiences were tracking goals properly. The repair was assigned to me and closed within six days.

Section 03

When the data stopped

An experiment that is not collecting data looks almost exactly like one that is. The page renders, the variant shows, the test reads as running. Three times the numbers simply stopped, and each time the cause was in the wiring, not in the variant.

A condition that matched nobody

In June 2024 the strategist found that a returns-policy test on the supplements brand was collecting no data at all. The next day I found why: the experiment was targeted by page type where it needed a page URL, so no visitor ever qualified. I changed the condition and it started tracking.

Two kinds of revenue in one checkout

The same brand sold subscriptions and one-time orders, and the strategist wanted the two read separately. In February 2025 I adapted Convert's documented revenue script to split each order's lines on whether they carry a recurring selling plan, and to send each total to its own goal.

Checkout script, excerpt
Shopify.checkout.line_items.forEach(product => {
// Following line checks if it is a subscribed product by querying a specific property of the product
if (product.selling_plan_allocation && product.selling_plan_allocation.selling_plan.recurring_deliveries) {
total_subs_revenue += product.line_price - product.line_level_total_discount;
total_subs_products += 1;
} else {
total_non_subs_revenue += product.line_price - product.line_level_total_discount;
total_non_subs_products += 1;
}
});
if (total_subs_products > 0) {
reportRevenue(total_subs_revenue, total_subs_products, SUBSCRIPTION_GOAL_ID, 'subscriptions', Currency);
}
if (total_non_subs_products > 0) {
reportRevenue(total_non_subs_revenue, total_non_subs_products, ONE_TIME_GOAL_ID, 'non subscription', Currency);
}
Adapted from Convert's documented sample, 6 February 2025. Goal IDs removed.

Then the catch, confirmed with Convert's support over the following week: the split needed Convert's manual integration, not the Shopify app the store was running. I wrote that into the task the day it was confirmed.

Goals that went quiet

In March 2025 a three-arm urgency test on a probiotics brand was showing no conversion events. Shopify had deprecated the post-purchase page scripts its goals depended on, and the repair came to me on 31 March. On 1 April I rebuilt the test's goals on Shopify's standard customer events, fifteen of them, and relaunched it that afternoon.

  1. Shopify events

    Thirteen standard customer events, from page viewed to checkout completed, fired by Shopify itself.

  2. Convert goals

    One goal per event. Checkout completed feeds the revenue goal; subscription and one-time orders get their own.

  3. Experiment report

    Conversions and revenue per arm, counted from events Shopify still supports.

  4. The strategist

    Reads the result. The build is done when that number can be trusted.

The goal set rebuilt on 1 April 2025. Source: the task record and the Slack thread that day.

The same setup could also give the supplements brand its subscription and one-time split, through Shopify's own events rather than a checkout script.

Section 04

What the tests I built read

Of the 18 tests I built variants for, seven have a result on record. The others were never read into the tracking sheets before the program ended, which is the same gap case study 03 is about.

TestOutcomeAs the tracking sheet recorded it
Returns note in the shipping dropdown, product page, 2024LostOriginal ahead by 13.8% at 98.7% confidence. Not deployed.
Larger red sale price, collections, 2024WonVariant ahead at 95.7% confidence, on a sample too small to lean on. Deployed.
Checkout button copy, cart, 2024Not significantOriginal ahead by 6.5% at 94.1%, short of the 95% bar.
Price moved below the title, product page, 2024InconclusiveNo difference after 53 days. Stopped.
Site-wide button colour, 2024InconclusiveNo difference. Stopped for Black Friday.
Recommendation widget logic, product page, 2024InconclusiveNo difference after a week. Retested.
Mobile product page redesign, 2022InconclusiveBoth versions finished at the same conversion rate.
Source: the client tracking sheets, and the strategist's note in the task record for the 2022 test. Confidence is each sheet's own one-tailed figure.

One clear loss, one win I would not lean on, and five that did not clear the bar. The loss was the useful one: the test kept a change off the site that it said would cost conversions.

price.liquid, excerpt
<style>
.price-item.price-item--sale.price-item--last {
font-size: 18px;
font-weight: bold;
color: #F87666;
}
/* Small devices (phones, less than 768px) */
@media (max-width: 767.98px) {
.price-item.price-item--sale.price-item--last {
font-size: 16px;
}
}
The winning sale price variant as it went into the live theme, 17 July 2024. Excerpt: the base rule and the first of four breakpoints.
Section 05

What I would do differently

Two of the failures above were caught by someone noticing an empty report, five and thirteen days after launch. What I would do differently is check that every goal fires on a preview before a test goes live, and again on its first day.

The habit
The variant can be perfect and the test still worthless, if nothing is counting.
Verification

Client names, revenue and traffic figures are withheld under NDA. Every claim traces to a dated primary record: the agency's task records and their comment threads, Convert experiment and variation IDs, a Slack thread from 1 April 2025, and the client tracking sheets, all preserved in a private archive built on 27 August 2026. Available for verification in a private conversation.