NEXSUM_LABS
  1. Home
  2. Work
  3. A wine club fixed its subscription funnel measurement and stopped optimizing against noise
Book a call

[ Case study ]

Wine & spiritsGA4Google Tag ManagerBigQuery exportLooker Studio

A wine club fixed its subscription funnel measurement and stopped optimizing against noise

The club's storefront, checkout, and member portal fired events with three different naming conventions from three agencies' eras; funnel numbers disagreed with the subscription platform's own records, and two quarters of 'conversion optimization' had been run against a broken middle.

CLIENT a direct-to-consumer wine club — FOCUS Reconcile to the ledger, then fix the funnel

GA4 SetupAnalytics & CROGA4 SetupWine & spiritsRepresentative example
Client
a direct-to-consumer wine club
Industry
Wine & spirits
Engagement
5 weeks — growth pod — analytics specialist
Service
Analytics & CRO / GA4 Setup
Headline outcome
Checkout events reconciled to subscription-platform orders within two percent, verified monthly: Discrepant funnels → reconciled within 2%, read from Reconciliation workbook

Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.

Where they started

A family-run wine club ships monthly allocations to members across the country, selling through a storefront, a checkout, and a members' portal built in three different eras by three different agencies. The club has survived every platform migration of the last decade, and each era left its own event names and tracking habits behind. Two marketers run the whole funnel, from acquisition through retention, on a subscription platform that doubles as the financial system of record. An age gate and consent flow sit in front of everything, as the law requires.

What it was costing

The club's storefront, checkout, and member portal fired events with three different naming conventions from three agencies' eras; funnel numbers disagreed with the subscription platform's own records, and two quarters of 'conversion optimization' had been run against a broken middle.

What they could see

  • Funnel counts in GA4 disagreed with the subscription platform's order records by an amount nobody could explain.
  • The checkout reported three different names for the same completion event, left behind by three agencies' builds.
  • Two quarters of checkout experiments had produced winners that never showed up in actual subscription revenue.
  • The marketers' Monday report took an afternoon of copying exports because nothing was self-serve.

The constraints we worked inside

  • Age-gate and consent flows legally shape what can be tracked and when — the funnel starts behind them, and measurement must respect that.
  • The subscription platform is the financial truth; analytics must reconcile to it, not compete with it.
  • The team is two marketers; reporting must be self-serve and boring to maintain.

What had been tried before

The team ran a sequence of checkout experiments over two quarters, guided by the funnel's mid-step drop-offs in GA4.
The middle of the funnel was the broken part, so the experiments optimized against invented drop-offs — winners in the reports never appeared in the platform's order ledger.
A previous agency's GA4 migration carried the old naming conventions forward to keep historical dashboards intact.
Preserving the dashboards preserved the ambiguity; the migration moved the tools without deciding what any single event meant, so the disagreement continued under new branding.

What we proposed

We proposed reconciling before re-instrumenting: first quantify the gap between GA4 orders and the subscription platform's records, then rebuild the checkout funnel on one event schema and prove the gap closes. The subscription platform stays the financial truth; analytics exists to explain it, not to compete with it. Age-gate and consent state would become scope conditions in the data, so the funnel's denominator counts only visitors the club may legally measure. Everything ends in one self-serve dashboard, because a two-person marketing team needs reporting that is boring to maintain, not another system to babysit.

Just as important is what we ruled out, and why:

  • Retiring web analytics for the subscription platform's built-in reportsThe platform sees orders but not the journey — no traffic sources, no age-gate context, no pre-checkout behavior — which is exactly the part the club was blind to.
  • A warehouse-first rebuild with dbt models and attribution toolingBuilt for teams with analysts on staff; two marketers would have needed outside help for every new question, recreating the dependency the club was trying to end.

How the work ran

01Reconcile to the ledger, then fix the funnel

Orders in GA4 were reconciled against subscription-platform records to quantify the gap, then the checkout funnel was re-instrumented with one event schema that closes the gap to under two percent.

02Respect the gate in the data

Age-gate and consent state became scope conditions on tracking, so the funnel's denominator is honest traffic, not a legal risk.

03Hand over one dashboard

A single Looker Studio report with the reconciled funnel and cohort view replaced the three-agency folder of exports.

Delivered by the growth pod — analytics specialist over 5 weeks, with working increments reviewed with the client every week.

The stack, and the reasoning

GA4
The storefront and portal already had GA4 history, and the free tier covers the club's traffic comfortably — the cost of the fix is configuration, not licensing.
Google Tag Manager
One container with a versioned, documented schema replaces three agencies' habits; the age gate and consent state become variables the tags read rather than pages the tags ignore.
BigQuery export
Reconciliation requires queryable history, and raw exports let the marketers re-run last quarter's match whenever the platform's reporting changes — no analyst on retainer.
Looker Studio
The two marketers need one link to open on Monday, not a modeling environment; the dashboard reads from reconciled tables and nothing in it needs code to change.
Subscription-platform reconciliation
The platform is where money lands, so its order records are the anchor; every funnel number must survive a match against the ledger or be labeled as an estimate.

What went wrong

Obstacle

Members imported from a pre-GA4 platform carried order records whose identifiers never matched anything the storefront fired, so a slice of history would not reconcile at all.

Handled: We split the reconciliation into cohorts, matched the legacy slice by order month and totals instead of transaction ID, and documented the exception rather than pretending the gap was zero.

Obstacle

The age gate's vendor script re-rendered mid-session on some browsers, dropping the consent variable before the checkout's first event could read it.

Handled: We moved consent state into first-party storage the tag manager reads at every event, verified the fix on the affected browser matrix, and added a loss check to the monthly reconciliation.

How we worked together

Cadence
Thursday working calls with both marketers, screen-sharing the live funnel; a written reconciliation summary went to the owners monthly, one page, plain language.
Client side
The two marketers did the driving — one owned checkout access and test transactions, the other owned the historical exports and knew which agency era broke what.
Decisions
Anything reversible — tag logic, dashboard layout — we decided and showed on the next call; anything touching the platform of record went to the owners.
They provided
Storefront and portal admin access, a sandbox for test orders, the subscription platform's export history, and a standing hour each week for review.

What changed

The headline: checkout events reconciled to subscription-platform orders within two percent, verified monthlyDiscrepant funnels → reconciled within 2%, read from Reconciliation workbook. A second check: checkout completion after the real funnel was optimized at +11%.

The marketers' Mondays changed from assembly to review — the dashboard opens, the numbers are already reconciled, and the meeting is about which experiment runs next. They stopped saving export folders and stopped distrusting their own funnel. The owners read one page a month that says how well analytics matches the ledger, which quietly ended the ritual suspicion that the website numbers were decorative. Most usefully, the team now trusts the mid-funnel enough to run experiments against it, because a losing test is finally distinguishable from a broken measurement.

The result was read from Reconciliation workbook against the pre-engagement baseline over the stated window, with a guardrail check on checkout completion after the real funnel was optimized. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.

What they own now

  • One documented event schema covering storefront, checkout, and portal, with a naming convention sheet.
  • The reconciliation workbook connecting GA4 orders to subscription-platform records, rerunnable monthly.
  • A single Looker Studio report with the reconciled funnel and member cohort views.
  • The tag manager container with consent and age-gate variables documented inline.
  • A training session and written runbook so the marketers can add events without us.

What we would do differently

We would reconcile first and re-instrument second, permanently — one week of honest baselining would have saved the previous two quarters of optimizing against noise.

Analytics & CROGA4 SetupWine & spiritsGA4

Next case study

A trade association proved its website earns its membership dues with a GA4 setup its board understands