GTM Playbooks
RevOpsAdvanced

Score Churn Risk from Support Tickets with an LLM

The problem

CS and RevOps find churn late because ticket themes stay buried in Zendesk/Intercom while CRM health scores ignore qualitative signal.

Implementation steps

  1. 1

    Create a Zendesk trigger with a webhook action (or an Intercom webhook on conversation events) that sends new and updated tickets to an n8n or Make webhook

  2. 2

    Fetch the ticket subject, description, latest comments, and requester organization, then match the organization to a CRM company by email domain

  3. 3

    Send the ticket text to the Claude or OpenAI API with a structured JSON prompt that returns theme, severity (1 to 3), churn risk (0 to 100), and a one-sentence reason

  4. 4

    Store each classification with the ticket ID and company in a Google Sheet or an n8n data table so results can be audited

  5. 5

    Roll up by account (highest risk and count of severity 3 tickets in the last 30 days) and write the results to custom company properties in HubSpot or Salesforce

  6. 6

    When an account crosses the risk threshold or a ticket mentions cancelling, post a Slack alert to the CS owner with the ticket links and the model reason

  7. 7

    Run a weekly scheduled workflow that groups tickets by theme and posts the top themes to the #product channel

  8. 8

    Each month, compare 20 model classifications against a human review and adjust the prompt or threshold

Template outline

The structure to recreate in your own workspace. Field names and thresholds are starting points.

n8n or Make Workflow:
1. Trigger: Webhook from Zendesk trigger or Intercom conversation event
2. HTTP: Get ticket details and last 5 comments
3. Lookup: CRM company by requester email domain
4. LLM (Claude or OpenAI), JSON output:
   - Prompt: "Classify this support ticket. Return JSON with theme (billing, bug, performance, onboarding, feature_gap, cancellation, other), severity (1-3), churn_risk (0-100), and reason (one sentence). Ticket: {{ticket_text}}"
5. Store: ticket_id, company_id, theme, severity, churn_risk, reason, created_at
6. Aggregate per company (last 30 days): max churn_risk, count of severity 3
7. CRM update: "Support churn risk", "Top ticket theme", "Last risk update"
8. IF churn_risk >= 70 OR theme = cancellation: Slack message to CS owner
   - "{{company}} support risk {{churn_risk}}: {{reason}} {{ticket_url}}"
9. Weekly schedule: group by theme, post top 5 themes to #product
Output: an account-level risk field in the CRM that reflects ticket content, plus same-day alerts for high-risk accounts

Need help implementing a playbook?

Our team builds custom Clay workflows and AI automations for revenue teams.

Get it built for you