Skip to main content
Independent community resource — not affiliated with the official OpenClaw project. Learn more
Part 4 of 5OpenClaw for SaaS

Support & Customer Health Monitoring with OpenClaw

Use cases at a glance

Support is both a churn signal and a retention lever. Accounts with escalating ticket volume, aging SLA tickets, or declining CSAT are likely to churn — unless your team intervenes early. Combine support signals with usage data to create a holistic customer health score.

📈 Ticket Volume Spikes

Alert when daily ticket volume jumps above baseline. Indicates customer frustration or product issues.

⏰ SLA Aging Alerts

Flag tickets that have exceeded SLA without resolution. Different SLAs per tier (48h for free, 24h for growth, 4h for enterprise).

❤️ Customer Health Score

Combine support signals (ticket volume, SLA, CSAT) with usage signals (DAU, login recency, feature adoption) into one 0-100 score.

📊 CSAT Trend Monitoring

Track satisfaction scores per account and alert when an account's CSAT drops >20 points year-over-year.

🚨 Multi-Ticket Accounts

Flag accounts with 5+ open tickets. High volume + extended age signals systemic customer dissatisfaction.

Connecting Intercom or Zendesk

Both platforms offer REST APIs for ticket and conversation data. Choose based on your support setup:

PlatformAuth MethodSetup Steps
IntercomAccess Token (OAuth)(1) Go to Settings → Developers → Your apps → Create app. (2) Add 'Conversations' scope. (3) Install app, copy Access Token. (4) Store as INTERCOM_ACCESS_TOKEN in secrets.env
ZendeskAPI Token(1) Go to Admin → Apps & integrations → Zendesk API. (2) Enable API token auth. (3) Click 'Settings'. (4) Generate new token. (5) Store email + token as ZENDESK_EMAIL and ZENDESK_API_TOKEN in secrets.env
✅ Recommended: Zendesk has more mature SLA tracking and reporting APIs. If you're starting fresh, Zendesk is easier to configure with OpenClaw. Intercom is stronger if you want unified customer conversations in one platform.

Ticket volume spike detection

Monitor your daily ticket volume and alert when it spikes above a threshold. This can signal a product incident, new customer onboarding friction, or a single angry customer.

agents: ticket-volume-monitor: description: "Alert when daily ticket volume exceeds baseline" tools: - zendesk-api config: zendesk_email: "${ZENDESK_EMAIL}" zendesk_api_token: "${ZENDESK_API_TOKEN}" lookback_days: 14 # compute baseline from last 14 days spike_threshold: 2.0 # alert if today > (14d avg × 2.0) minimum_tickets: 3 # only alert if spike is >3 tickets anyway exclude_statuses: ["solved", "closed"] output: format: markdown include_top_tickets_by_age: true urgency: high heartbeats: ticket-spike-watch: schedule: "0 * * * *" # every hour agent: ticket-volume-monitor

SLA aging alerts

Flag tickets that have passed their SLA without resolution. Configure different SLAs per plan tier so enterprise customers are prioritized.

agents: sla-aging-alert: description: "Flag tickets past SLA grouped by account and tier" tools: - zendesk-api - stripe-api config: zendesk_email: "${ZENDESK_EMAIL}" zendesk_api_token: "${ZENDESK_API_TOKEN}" stripe_key: "${STRIPE_RESTRICTED_KEY}" tier_slas: - plan_name: "free" sla_hours: 48 - plan_name: "growth" sla_hours: 24 - plan_name: "enterprise" sla_hours: 4 exclude_statuses: ["solved", "closed", "pending"] alert_on: - first_response_sla_breached: true - resolution_sla_breached: true output: format: markdown include_response_time_stats: true group_by_tier: true heartbeats: sla-aging-check: schedule: "0 * * * *" # every hour agent: sla-aging-alert

Customer health scoring

Combine support signals (ticket volume, SLA, CSAT) with usage signals (DAU, login recency, feature adoption) into one 0-100 health score. Accounts under 40 are flagged as at-risk.

agents: customer-health-scorer: description: "Score customer health from support + usage signals" tools: - zendesk-api - stripe-api - analytics-api config: zendesk_email: "${ZENDESK_EMAIL}" zendesk_api_token: "${ZENDESK_API_TOKEN}" stripe_key: "${STRIPE_RESTRICTED_KEY}" analytics_platform: "mixpanel" # or posthog, amplitude, postgres support_signals: open_ticket_count: weight: 0.4 scales: [ {threshold: 1, score: 100}, {threshold: 5, score: 70}, {threshold: 10, score: 40}, {threshold: 20, score: 10} ] sla_breaches_this_month: weight: 0.3 scales: [{threshold: 0, score: 100}, {threshold: 1, score: 50}, {threshold: 3, score: 20}] csat_trend: weight: 0.3 scales: [{min: 4.5, score: 100}, {min: 4.0, score: 80}, {min: 3.5, score: 60}] usage_signals: days_since_login: weight: 0.5 scales: [{threshold: 0, score: 100}, {threshold: 7, score: 60}, {threshold: 30, score: 10}] monthly_active_users_trend: weight: 0.3 scales: [{drop: 0, score: 100}, {drop: 0.25, score: 70}, {drop: 0.5, score: 40}] feature_adoption: weight: 0.2 scales: [{adoption: 0.75, score: 100}, {adoption: 0.5, score: 70}] tier_weights: - plan: "free" support_weight: 0.2 usage_weight: 0.8 - plan: "growth" support_weight: 0.4 usage_weight: 0.6 - plan: "enterprise" support_weight: 0.6 usage_weight: 0.4 at_risk_threshold: 40 output: format: markdown include_signal_breakdown: true include_at_risk_accounts: true heartbeats: health-scores-daily: schedule: "0 9 * * *" # 9am daily agent: customer-health-scorer

CSAT trend monitoring

Track customer satisfaction scores and alert when an account's CSAT drops sharply or falls below a target (e.g., <4.0 stars).

agents: csat-trend-monitor: description: "Monitor CSAT per account and alert on drops" tools: - zendesk-api - stripe-api config: zendesk_email: "${ZENDESK_EMAIL}" zendesk_api_token: "${ZENDESK_API_TOKEN}" lookback_days: 30 minimum_responses: 5 # only calculate CSAT if 5+ surveys alert_on: - absolute_drop: 0.5 # alert if CSAT drops 0.5+ stars this month vs last - below_target: 4.0 # alert if current CSAT < 4.0 - drop_percentage: 0.20 # alert if drops 20% yoy exclude_archived_accounts: true output: format: markdown include_trend_chart: true heartbeats: csat-watch: schedule: "0 10 * * *" # 10am daily agent: csat-trend-monitor

Accounts with multiple open tickets

Flag accounts with 5+ open tickets, especially with tickets older than 7 days. This signals potential customer dissatisfaction that needs immediate CS attention.

agents: multi-ticket-detector: description: "Flag accounts with multiple long-standing open tickets" tools: - zendesk-api - stripe-api config: zendesk_email: "${ZENDESK_EMAIL}" zendesk_api_token: "${ZENDESK_API_TOKEN}" stripe_key: "${STRIPE_RESTRICTED_KEY}" alert_on: - open_ticket_count_threshold: 5 - oldest_open_ticket_days: 7 group_by: "requester_email" # aggregate per customer include_mrr: true # show revenue impact output: format: markdown include_priority_ranking: true heartbeats: multi-ticket-watch: schedule: "0 8 * * *" # 8am daily agent: multi-ticket-detector

HEARTBEAT templates

heartbeats: # Ticket spike watch — hourly spike-watch: schedule: "0 * * * *" agent: ticket-volume-monitor # SLA aging — hourly sla-watch: schedule: "0 * * * *" agent: sla-aging-alert # Customer health scores — daily at 9am health-scores: schedule: "0 9 * * *" agent: customer-health-scorer # CSAT monitoring — daily at 10am csat-watch: schedule: "0 10 * * *" agent: csat-trend-monitor # Multi-ticket alerts — daily at 8am multi-ticket-check: schedule: "0 8 * * *" agent: multi-ticket-detector

Sample health report

## Customer Health Report — Thursday, March 26, 2026 **Summary:** 47 accounts scored. 8 flagged as at-risk (score <40). 3 critical (score <20). ### 🔴 CRITICAL — Immediate Action Needed 1. **Acme Corp** — Health: 15/100 - Support: 8/100 (12 open tickets, 3 SLA breaches, 3.2★ CSAT) - Usage: 35/100 (28 days since login, DAU down 60%, 1 feature adopted) - MRR: $2,400 | Action: CS contact + product check-in TODAY 2. **Brightfield Inc** — Health: 22/100 - Support: 45/100 (6 open, 1 SLA breach, 4.1★ CSAT) - Usage: 5/100 (42 days since login, no DAU, 0 features) - MRR: $1,200 | Action: Account owner outreach, consider success plan ### 🟡 HIGH RISK — Follow Up This Week 3. **TechVenture Labs** — Health: 38/100 4. **Startup XYZ** — Health: 36/100 5. **Mid-Market Corp** — Health: 35/100 ### 🟢 HEALTHY (47 accounts) - Avg support score: 78/100 - Avg usage score: 82/100 - Avg combined health: 79/100

FAQ

Should I use Intercom or Zendesk with OpenClaw?

Zendesk is better if your team needs advanced routing, reporting, and multi-channel support (email, chat, phone, social). Intercom is better if you want a unified customer platform with in-app messaging and automated workflows. For SLA tracking, Zendesk has more mature native SLA rules. For customer health scoring combined with in-app messaging, Intercom is stronger. Most OpenClaw teams use Zendesk for the API maturity and SLA integration.

What makes a customer 'healthy' vs 'at-risk'?

Healthy customers combine positive support signals (fast response times, low ticket volume, high CSAT) with positive usage signals (daily logins, feature adoption, no usage drop). At-risk customers show one or both: (1) support red flags (multiple open tickets, SLA breaches, declining CSAT), or (2) usage red flags (zero logins, usage drop >50%, feature gaps). The customer health score weights both sets of signals. A customer with 50+ open tickets but high usage is medium-risk; a customer with 2 open tickets but zero logins is high-risk.

How do I combine support + usage signals into one health score?

The customer-health-scorer agent queries both Zendesk and your analytics platform (Mixpanel, PostHog, Amplitude). It computes a support score (weighted by ticket volume, SLA aging, CSAT) and a usage score (weighted by DAU, feature adoption, login recency). Each score is 0-100. Final health = (support_score × 0.4) + (usage_score × 0.6), adjustable by tier (free customers weight usage higher, enterprise weight support higher). Accounts scoring below 40 are flagged as at-risk.