Case No. 05  ·  Cancellation saves  ·  QuickBooks support

"I want to cancel" is a dozen problems wearing one sentence.

Too expensive. Not using it. Closing the business. The reason decides whether a specialist can save the customer, and the assistant couldn't hear it. I designed the flow that asks why, then built the LLM classifier that reads the answer and routes the winnable reasons to a saves specialist, with a clean goodbye for everyone else. It ran end to end in 2023, before the platform could ship generative AI at all. Both routes are on this page as screen recordings.

Chat frame: the assistant confirms the customer wants to cancel, asks why, and the customer answers they have not used the product yet
Problem

The reason decides who's savable, and the intent model couldn't hear it. Two in five reasons came back unknown.

What I did

Designed the ask-why flow, then built the LLM classifier that reads the reason and routes the call.

Outcome

96.6% routing precision; reasons classified rose from 60% to 96%; the 2022 flow saved 12% against a 5% target.

Role

The flow, the classifier prompt, the output contract, and the Responsible AI package. The retention team defined savable.

01 · The problem

The topic was easy. The reason was the whole game.

The intent model could hear that a cancellation was happening without much trouble. Hearing why is where it stalled. By early 2023 I'd spent four months tuning intents and the curve had gone flat: about 60 percent of reasons resolved, two in five coming back unknown, and every unknown routed like every other cancellation, straight toward the cancel steps.

the same sentence, before the classifierIllustrative of the measured pattern
01
customer · "It's gotten too expensive."
02
match → trained intents · a paraphrase the training set never saw
03
reason → unknown · the call routes like every other cancellation
The stall was real: reasons resolved held near 60 percent, and each tuning cycle took months.
02 · The stakes

Every unknown reason was a lost save.

A price complaint that reaches a specialist with context is a conversation about the plan. A price complaint that reaches nobody is a lost subscription. And the queue cuts the other way too: a specialist spending time on a call that was never savable, a closing business, a retirement, is a specialist not saving a call that was. The bar I set for the routing: if I send ten people to that queue, the ten should be truly savable. Not two.

ask whyThe customer names the reason in their own words. The classifier reads it.
↓    ↓
savable · route to a specialist
Someone fights for the account.

The reason travels with the call, so the specialist opens with context instead of starting over.

final · a clean goodbye
No pitch, no trap.

A respectful acknowledgment and the direct cancel link. Leaving well is part of the design.

03 · The bet

Keep tuning, or change the tool.

My read was that the bottleneck was the tool, not the tuning, and I championed the swap at a time when the third option officially didn't exist: in early 2023 there was no sanctioned path to ship generative AI to production at the company. I partnered with the platform team to onboard the API that let a flow call a language model at all, then wrote the classifier prompt. Six-plus months of development per training cycle became days of prompt work.

option 01
Another tuning cycle

Months more labeling, and the last cycle had barely moved the unknowns. The curve had answered this one already.

option 02
Hand it to a modeling team

The same method with more hands on it. More effort against the same ceiling.

option 03 · the bet
Let a language model read the reason

No trained intents at all. A model built for natural language doesn't need a training cycle to hear that "it's gotten too expensive" is about price.

04 · Savable, defined

Savable wasn't my call to make. Encoding it was.

The word doing all the work in this case is savable, and the Growth and Retention team defined it with the saves specialists who win these calls every day. They knew which reasons a specialist can turn around and which deserve a graceful exit instead of a pitch. I worked with them to get those guidelines out of their heads and into a form a model could follow, then structured them into the classifier's instructions.

savable · a specialist can win it
  • Too expensive: a plan review or a better price can change the math.
  • Not using it: often an onboarding gap; usage can be rebuilt.
  • Switching products: a feature conversation before the move is made.
  • Bad experience: fixable, and worth fixing.
  • Missing features: sometimes the feature exists and wasn't found.
final · never pitch
  • Closing or selling the business: the subscription's job is over.
  • Retiring: nothing to win back; close the account well.
  • Duplicate accounts: cancelling is the correct fix.
  • The default: when unsure, the customer gets the specialist, never the door.

The acknowledgment went through the same discipline. An early version answered every reason with the same line, "Thanks for the feedback," followed by the cancel link, even when the reason was a death. I rewrote the instructions so the acknowledgment reflects the reason with plain human empathy, while still never pitching a final one.

early versionone voice for every reason
the owner of the business died
Thanks for the feedback. I have a link you can use to cancel your subscription directly within QuickBooks Online. Can I send it to you?
Recreated from my test runs; interface simplified to protect internal tooling.
after the rewritethe reason shapes the first sentence
the owner of the business died
I'm sorry to hear about the passing of the business owner. I have a link you can use to cancel your subscription directly within QuickBooks Online. Can I send it to you?
Recreated from my test runs; same route, same link, different first sentence.
05 · The classifier

The model never argues with someone leaving.

It reads the reason, returns strict JSON, and lets deterministic flow logic decide what happens next. Nothing the model writes reaches the customer outside two contract fields, and the offer to connect with a specialist exists only when the reason is savable. The intent model still does what it was always good at, recognizing that a cancellation is happening; the classifier does what intents couldn't, reading why.

output contract · two real reasons, two routesfield values from my test runs, reconstructed
{
  "cancellation_reason": "too expensive",
  "is_savable": true,
  "reason_acknowledgment": "I understand that cost is an
    important factor. Thank you for your feedback.",
  "connect_to_expert_message": "I'm connecting you to a
    customer success expert to help with your cancellation."
}

{
  "cancellation_reason": "business closure",
  "is_savable": false,
  "reason_acknowledgment": "I'm sorry to hear about the
    passing of the business owner.",
  "connect_to_expert_message": ""
}
the classifier prompt, in shapeCondensed · modified for privacy
You are a classification assistant. Evaluate a
customer's reason for canceling and return a
structured JSON object.  …

- "cancellation_reason": a short label
  summarizing the reason  …

- "is_savable": false if the reason is final
  and unlikely to be saved  …
  true for all other reasons.

- "reason_acknowledgment": a short, neutral
  message  …  Do not offer help or take
  action in this field.

- "connect_to_expert_message": if "is_savable"
  is true, a brief message offering to connect
  the customer with an expert  …

Return valid JSON output only.
Modified and condensed to protect confidential work; the fields and rules are faithful to the shipped behavior.
their rules, encodedThe final-reasons list inside "is_savable" is the retention team's guideline: retirement, closure, duplicates.
the safe defaultTrue for everything else. When the model is unsure, the call goes to a person, never straight to the cancel steps.
never pitch a goodbyeThe acknowledgment field is forbidden from offering help. The offer lives in its own field, present only when savable.
no improvisingJSON only. The flow composes the customer's turn deterministically from the contract fields.

Verification came before trust: I tested the classifier on about 300 real customer utterances, a sample sized for 90 percent confidence, and drove it through the Responsible AI review. It cleared, free of hallucination, profanity, bias, and toxicity findings.

06 · Watch it route

Same question. Two reasons. Two routes.

Recorded July 2023, on the working flow. The classifier reads each reason, and the flow acts on what it returns.

savable · "I haven't used the product yet"routed to an expert
My screen recording, July 2023, test account. Internal debug messages removed.
transcript
  1. agent

    Welcome to QuickBooks! This call may be recorded. Hi there! I'm a digital assistant for QuickBooks and here to help! I was able to find an account with your phone number. Can I use this for our conversation today?

  2. customer

    yes

  3. agent

    Thanks! In a few words, please tell me why you're calling today.

  4. customer

    cancel subscription

  5. agent

    To confirm, Are you looking to cancel your Quickbooks subscription?

  6. customer

    yes

  7. agent

    We're sad to see you go, and we really value your feedback. Can you tell me why you're cancelling your account today?

  8. customer

    I haven't used the product yet

  9. agent

    I understand your decision to cancel due to not using the product. I'm connecting you with an expert who can help. One moment please.

final · "the owner of the business died"a clean goodbye
My screen recording, July 2023, test account.
transcript
  1. agent

    Welcome to QuickBooks! This call may be recorded. Hi there! I'm a digital assistant for QuickBooks and here to help! I was able to find an account with your phone number. Can I use this for our conversation today?

  2. customer

    yes

  3. agent

    Thanks! In a few words, please tell me why you're calling today.

  4. customer

    cancel subscription

  5. agent

    To confirm, Are you looking to cancel your Quickbooks subscription?

  6. customer

    yes

  7. agent

    We're sad to see you go, and we really value your feedback. Can you tell me why you're cancelling your account today?

  8. customer

    the owner of the business died

  9. agent

    I'm sorry to hear about the passing of the business owner. I have a link you can use to cancel your subscription directly within QuickBooks Online. Can I send it to you?

07 · Where it landed

Right calls to the right humans.

The 2022 ask-why flow moved real results before the classifier existed: it directionally saved 12 percent of customers against a 5 percent target, on expert-reported saves. The classifier's result is routing precision, and that number is the case-rate lever: the higher the share of truly savable cases landing on the queue, the more of the specialists' time turns into saves instead of screening.

96.6%
Routing precision

The share of cancellations sent to the saves queue that were truly savable, measured on about 300 real utterances at 90 percent confidence.

60% → 96%
Reasons classified

In evaluation, where four months of intent tuning had stalled the curve near 60.

12% vs 5%
Saves, 2022 flow

Customers saved against target by the ask-why design, directional and expert-reported, across thousands of cancellation calls over three months.

Months → days
Iteration

Each intent training cycle took six-plus months of development. A prompt revision took days, and the Responsible AI review cleared it.

What this settled

The platform's production path for generative AI didn't exist yet in early 2023, so the experience ran end to end in the internal low-code tool: designed, validated, measured, and gated until the platform caught up. The hybrid shape it proved, an intent model for the topic and a language model for the nuance, is the same architecture the charge-lookup redesign shipped two years later. And the savability thinking carried further: the billing skill's cancel-intercept widget is its agentic descendant. Boundaries are what made an unproven model shippable here. The classifier earned trust by what it was forbidden to do: speak raw to a customer, improvise an offer, pitch a retirement.