Skip to main content
DoneThat

AI Adoption GuideSalesClose

Win/loss reason classifier

AI categorizes closed deals by reason from communications history and updates competitive intel.

Sales processProspectQualifyDiscoverProposeNegotiateCloseHandoffRenew

By Don, DoneThat’s AI coach · updated

Classify closed-won and closed-lost from the last communications

The quality job is a reason code taken from the last emails and the last call, with a quote the AE can open, then an AE confirmation before anything durable is written. It is not a competitor win-rate, and it is not a silent overwrite of the picklist the AE already chose.

Trigger when Salesforce moves the opportunity to Closed Won or Closed Lost. Pull the close email thread and the most recent recorded call from conversation intelligence in the class of Gong or Chorus. Classify that window. Discovery notes from months earlier, a deal risk scoring flag from mid-funnel, and a manager comment in Clari are useful context. They are not the reason the deal ended this week.

Won and lost both get a code. A closed-won tagged "we executed well" teaches nothing. A closed-won that cites "they had already standardized on our SSO," or a closed-lost that cites "legal would not accept our DPA," is a fact you can use.

If the last communications show the deal should never have reached late stage, that is a qualification miss. Send it to the disqualification recommender as evidence. This classifier does not reopen the opportunity.

A reason code is only usable if it cites a quote

A code without a cite is another dropdown. For each closed opportunity the model returns a value from a taxonomy you already maintain, a short quote from the close email or call, a pointer (message date, call timestamp, or recording ID), and a competitor name only when the buyer said the name.

Keep the taxonomy closed. Start with price, competitor, product gap, timing, champion left, security or legal, no budget this cycle, unresponsive after proposal, and won on product or relationship. Treat "other" and "no decision" as residual. If those two absorb most of the queue, the taxonomy is wrong or the model is refusing to pick.

Price is the default the model will reach for. Buyers say "too expensive" when they mean the champion left, the incumbent already sits in the stack, or they never saw a proof point. Dollar language in the last thread is not enough. Prefer a more specific code when the same thread names a competitor, a missing capability, or a process blocker. Allow price only when the quote is about price and those other causes are absent.

Ghosting is not no-decision. No-decision means the buyer chose to stay put. Silence after a proposal, unanswered follow-ups, a champion who stopped taking meetings: that is unresponsive or stalled. Coding silence as no-decision fills Salesforce with a reason nobody can act on. If there is no buyer quote, say so, and queue a short win/loss interview instead of inventing a motive.

Do not write competitive intel from a guessed name. "We're looking at another platform" is not a competitor. The model will fill in whoever appears most often in your battle cards, and that poisons the intel file. Competitor is a code only when the quote contains a name, a product, or an unambiguous incumbent. If the name is missing, code the cause you can cite (price, product gap, timing) and leave competitor blank.

Live objections during the deal belong to live objection-response prompts. This job starts after close. A repeated price objection that went unanswered on the last calls is useful as a cite. It is not a reason to prompt the AE after the fact.

Illustrative example: Harborline's closed-lost Price pile

The following is a made-up walkthrough, not a customer result and not a reported win-rate.

Harborline sells CPQ to mid-market operations teams. Salesforce closed-lost reasons are a picklist. AEs click Price because it sits first, it feels safe, and nobody reads the list at quarter-end. Competitive intel keeps a slide of who they lose to, built from AE memory and from a model that treated "another vendor" as the name mentioned most often on Gong calls that month.

RevOps and the competitive-intel lead trial a classifier on newly closed opportunities only. Conversation history from Gong or Chorus, email on the Salesforce contact, taxonomy locked, no write-back to the official reason field.

One deal, Northgate Distribution, closed lost, AE pick: Price. Last email from the champion, two days before close: "We're going with ApexCPQ because they already sit in our Okta stack. Your number was close, but IT will not add another IdP dance this year." The last Gong call has the same line at 41:12. A model that keys on dollar language proposes Price. The usable proposal is Competitor / incumbent identity stack, cite that sentence, competitor ApexCPQ because it was written, secondary note that price was described as close. The AE confirms. The official Salesforce reason stays Price until they change it. A suggested-reason field stores the confirmed code and the quote. Competitive intel records one lost-to-ApexCPQ-on-SSO cite, not a win-rate.

A second deal in the same queue has no buyer reply after the proposal. Four AE follow-ups, then Closed Lost, AE pick: No Decision. The model has nothing to quote. It must not invent "they chose to do nothing." Output: Unresponsive after proposal, cite the last outbound timestamp, confidence low, recommend a short interview. Competitive intel writes nothing.

A third deal: the buyer said "we're evaluating another vendor." The model proposed Competitor: ApexCPQ because ApexCPQ is on the battle card. RevOps rejects the write. Code stays Product gap or Timing if those were cited. Competitor stays blank.

Harborline does not score the trial on how often the model agrees with the AE. They score whether confirmed codes have quotes a second reader can find, whether competitor fills only when named, and whether the official Salesforce pick is untouched unless the AE edits it.

The AE confirms; never overwrite their pick

The AE still owns the reason on the opportunity. Auto-writing to the standard Closed Lost Reason or Closed Won Reason field trains people to ignore both the model and the picklist.

Route each proposal to the opportunity owner as confirm, pick another, or needs interview. Confirm writes to a suggested or classified-reason field, with the quote and pointer, plus a competitor field that stays blank unless confirmed. Pick another lets the AE choose from the same taxonomy and still requires a cite if they have one. Needs interview parks the code and notifies whoever runs win/loss calls.

If the AE disagrees, keep both values. The gap is the finding: AE said Price, cited thread said champion left. Do not correct the AE in public. Do not use disagreement as a performance score. Loss reasons that read as blame get gamed, and you will get Price forever.

Save-play recommender work happens while the opportunity is open. Once it is closed, do not fire a save play from this classifier. You are coding history.

Inspection tools in the class of Clari can show the suggested reason in a post-close review. Show the quote next to the code. A code without the quote will be argued back to Price.

Competitive intel only from named, cited, confirmed closes

Competitive intel is a byproduct of confirmed cites, not a second model that guesses share.

Allowed writes: competitor as the buyer named it, the capability or process they said decided it, the quote, the date, won or lost, segment from Salesforce. Forbidden writes: a win-rate by competitor, a rank order, a "we lose to X on price" summary built from unconfirmed or unnamed deals, and any competitor filled in from the battle card without a cite.

One named cite is an anecdote. Repeated named cites on the same capability are a pattern for product. Unnamed "other vendor" rows are missing interviews.

If case-study retrieval RAG could not produce an approved proof in that vertical, and the close quote is "we needed to see someone like us," code Proof / reference gap, not Competitor, unless they also named one.

Stop if the official Salesforce reason is being overwritten, if competitor is populated without a name in the quote, if Price absorbs every thread that mentions cost, or if ghosted deals land in no-decision. Keep the classifier when suggested reasons come with openable cites, AEs confirm or correct without being scored, and intel only grows from named quotes. Expand to older closed deals only after that loop is boring.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first