The headline: Better Way Health's agents already know how to leave a relational voicemail — they just don't use it for the calls that precede most cancels.
We pulled and structured 12 months of Zendesk data, transcribed every call, and ran five layered analysis passes. The recurring story: charge-error outbound calls precede a cancel by a predictable 27-day median window, but the voicemail script BWH leaves on those calls is purely transactional — 0% feedback, 0% inactive framing, 76% callback request — while the cancellation save-call script (left by the same agents on the same week) is warm, feedback-asking, and offers reactivation. Moving the relational frame into the charge-error path is a script-library change, not a training gap.
Twelve months of Better Way Health Zendesk activity, fully structured, fully transcribed, fully PII-scrubbed. All artifacts on disk; all analysis reproducible from ~/bwh-rag/.
44,310
Tickets
21,248
Call Transcripts
1,383
Hours of Audio
16,036
Real Customers
5
Analysis Passes
Filter first, then analyze
22% of all tickets are system-initiated — BWH Apps, ChurnBuster, Klaviyo, ReCharge, Stord webhooks. Filtering this is mandatory for any human-behavior analysis. Past framings ("40% outbound voice") shrink substantially after the filter.
Marketing & spam routing alone is ~340 human-handled tickets per year that could be auto-closed and triaged via a simple inbox rule.
02
The Four-Week Opportunity
Of the 15.8% of real customers who file a cancel signal, only 1.2% reactivate. Cancellations are sticky. The leverage is in the predictive window before the cancel happens.
Pass 2 finding · 2.81× lift, 27-day median
outbound__charge_errors__recharge_ is the single strongest leading indicator of churn. 2.81× lift over baseline — and the median time between the charge-error call and a customer-initiated cancel is 27 days (25th–75th percentile: 22–33d).
That is a tight, repeatable four-week intervention runway. Today, BWH's response is one outbound voicemail. The script for that voicemail is the focus of the rest of this report.
Pass 5 reclassified all 803 voicemail-only tickets with a 17-field schema (script template, persona, CTA strength, warmth markers, mention flags). The cleanest finding wasn't about which agent is best — it was that every top agent uses two distinct scripts, deterministically picked by intent.
Script A · Charge-Error Path
"We had an issue processing your order. Please call us back."
"Hi, this is Whitney from Better Way Health. I'm calling because we had an issue processing your order for your Beta Glucan 500, and I wanted to see if we could get an updated payment method from you. If you could give us a call back at our number, we're here Monday through Friday 9 to 5:30 Eastern. Thanks so much."
Heard 142× before a cancel · 0% feedback · 0% inactive framing · 76% callback request · 10% SMS link
Script B · Cancellation Save Path
"Your account went inactive — any feedback for us?"
"Hey, this is Whitney from Better Way Health. I'm calling because I saw that your account with us was inactive, and I wanted to check in and see if you had any feedback for us or if we could do anything better. If you could give us a call back, we're here Monday through Friday. Thanks so much. Have a great day."
Heard 392× across the save-call cohort · 81% feedback · 64% inactive framing · 13% pricing mention
Pass 5 §G · Same agent, two scripts
Whitney pre-cancel: 0.5% inactive framing, 40.5% feedback ask. Whitney save-success: 98.7% inactive framing, 99.1% feedback ask. Same person, same week. Zach is even more dramatic (2.7% reactivation framing pre-cancel → 92.3% in save-success). Michelle, Sharlene, and Taylor follow the same pattern.
The relational frame is already in BWH's playbook — it's just reserved for cancellation outreach. Bringing it into the charge-error path doesn't require new training. It requires a script-library change.
Voicemail element
Charge-error script (n=134)
Save-success script (n=381)
Gap
asks for feedback
2.2%
85.0%
+82.8
frames as "inactive" / lapsed
6.0%
98.2%
+92.2
offers SMS / email link
3.0%
0.3%
−2.7
explicitly says "declined / failed"
11.2%
0.3%
−10.9
soft "issue processing" framing
96.3%
9.7%
−86.6
asks for callback
99.3%
96.6%
−2.7
Gap column: percentage points the save-success script exceeds the charge-error script. Positive = relational element missing from the charge-error path.
04
What Wins on Save Calls
Pass 4 looked at the 49 save calls that ended in customer_satisfied or customer_agreed and aggregated by what the agent offered. The pattern surprised us.
The largest bucket of wins comes from agents offering nothing concrete — just a friendly check-in. Discount, refund, and pause offers are rarer and only directionally better. Section A of the analysis confirms price is not the leading objection in the frustrated customer cohort either.
Codify the low-pressure check-in as the primary save-call protocol. Reserve discounts for explicit price-objection signals, not as a default opener.
"you always have the option to where if you do have an active subscription, we can always move it as far out into the future so you don't ever lose any of the pricing. We can always tailor fit a subscription to you, even if that's you know you want a bottle every six months."
Zach · price_lock · customer_satisfied
"I just noticed that your account was inactive, and I wanted to see if you had any feedback for us."
Whitney · info_only · customer_satisfied
"I was just calling as a courtesy to confirm your subscriptions were canceled. There's a coupon that you can use that'll take 15% off your next order."
Sharlene · discount · customer_satisfied
05
The Recommended Experiment
A single concrete test, designed against the real 12-month baselines. Powered on a sensitive proximate metric (recurring charge-error reduction); cancel-rate tracked secondarily but acknowledged underpowered.
Control · Current charge-error script
Today's most-common template
"Hi, this is [AGENT] from Better Way Health. I'm calling because we had an issue processing your order for your [PRODUCT], and I wanted to see if we could get an updated payment method from you. If you could give us a call back, we're here Monday through Friday 9 to 5:30 Eastern. Thanks so much."
Borrows the warm closer agents already use for cancellation calls
"Hi [CUSTOMER], this is [AGENT] from Better Way Health. I'm calling because your card on file declined when we tried to process your [PRODUCT] order — happens all the time, usually a card swap or new expiration. I'm texting you a link right now to update it in 30 seconds, no need to call back. If anything's changed and you want to pause, switch products, or have any feedback for us, the link gets you to me directly. Either way, no worries — we're here Monday through Friday. Thanks!"
Baselines computed from real 12-mo data on n=1,144 unique customers receiving any charge-error ticket. Cancel-rate is too small to power on a single experiment because most cancellations happen via the Recharge UI without a Zendesk ticket trail.
Sample size + duration
To detect a recurring-charge-error reduction from 17.7% → 12% (5.7pp absolute, 32% relative) at α=0.05, β=0.2: ~610 customers per arm. At BWH's current charge-error volume (~1,632 / yr), that's ~9 months per arm sequential, or ~4–5 months running parallel.
Randomization at the customer level on each new charge-error event. 50/50 split.
06
Recommended Moves
In order, by leverage and reversibility. The first three are cheap and shouldn't wait for the A/B test.
Run the charge-error voicemail A/B test. Concrete script, real baselines, powered metrics. Single experiment design. Operationally requires a list-level routing rule and an SMS-link generator wired to the existing Recharge customer portal.
Add the SMS update-card link to the charge-error path immediately (treatment-only is fine — no link is sent today, so any version is an improvement). The single highest-leverage line to add: a parallel resolution path that doesn't depend on the customer calling 800.
Codify the "low-pressure check-in" as the default save-call protocol. Reserve discount and refund offers for explicit price-objection signals. Pass 4 §D shows info_only wins more often at scale than any concrete offer except price_lock.
Auto-route & auto-respond on marketing/spam tickets. ~340 tickets / yr currently consume agent time on noise. A simple inbox rule recovers ~50 hrs / yr.
Refresh the voice-agent build spec. Pass 5 confirms the outbound flow is the dominant entry point (most customers' first-ever ticket is an abandoned outbound call). The voice agent should be designed outbound-first, with a 5-agent persona model and frustration-keyword routing that hands off to Whitney / Zach / Taylor live.
Unblock Recharge subscription-state-by-date access. Without this, customer-cancel rate stays a poor proxy because most cancellations don't produce a Zendesk ticket. This is the single biggest external dependency.
07
What This Analysis Can't Yet Answer
Honest constraints. Each is fixable; some need data access we don't have yet.
True churn attribution. Most subscription cancellations probably happen via the Recharge UI without a Zendesk ticket trail. The 2.5% cancel-rate baseline above is the visible subset; the actual rate is higher and would let us power the A/B test on cancel directly. Fix: Recharge subscription-state-by-date API access.
Customer LTV overlay. n_tickets is a volume measure, not a value measure. Ranking the most-valuable customers requires Shopify order data joined by customer_id. Fix: Shopify Admin API token (shpat_).
BWH Labs vertical. Sharlene's B2B Labs vertical grew 161% H1→H2 with distinct vocabulary and customer type, but at 1,035 tickets it's small enough to disappear in aggregate analysis. Worth a separate mini-study with its own framing.
Voicemails outside the cancel cohorts. Pass 5 classified the 803 voicemails inside the pre-cancel + save-success cohorts. The remaining voicemail population (charge-errors that didn't precede a cancel, abandoned calls, etc.) would let us compute an unbiased post-voicemail cancel rate. Cheap (a few thousand more Gemini calls) — Pass 6 candidate.
The original implementation plan (March 10, 2026) is the companion to this report.