This prompt is for customer success engineers and platform builders who need to route accounts based on health signals such as product adoption, NPS, support volume, and usage trends. It produces a structured health tier with contributing factors and a recommended routing action. Use this prompt when your routing middleware must make decisions that depend on multi-signal health assessment rather than a single attribute like contract tier or support entitlement. The prompt is designed to be called before queue dispatch, escalation workflows, or proactive outreach campaigns. It expects pre-fetched account health data as input and does not perform live data retrieval.
Prompt
Account Health Score Routing Prompt

When to Use This Prompt
Defines the job-to-be-done, ideal user, required context, and boundaries for the Account Health Score Routing Prompt.
Do not use this prompt when routing can be determined by a single deterministic field such as support_tier or contract_type. It is also inappropriate for real-time ticket triage where health signals are unavailable or for accounts with fewer than 30 days of activity history, as trend-based signals will be unreliable. The prompt assumes the caller has already resolved account identity and merged duplicate records. If your system cannot provide at least three of the five core health signals (adoption score, NPS, support volume, usage trend, and renewal date), use a simpler tier-based routing prompt instead.
Before deploying this prompt, validate that your upstream data pipeline can supply consistent, timestamped health indicators. Stale data—such as an NPS score from 18 months ago or usage data that stopped updating after a migration—will produce misleading health tiers. Implement a freshness check in your harness that rejects inputs where any critical signal exceeds your defined staleness threshold. Start with a narrow rollout to accounts with complete data, then expand to partial-data accounts once you have calibrated fallback behavior.
Use Case Fit
Where the Account Health Score Routing Prompt works, where it fails, and the operational preconditions required before wiring it into a production customer success pipeline.
Good Fit: Multi-Signal Health Synthesis
Use when: you need to combine adoption metrics, NPS scores, support volume, and usage trends into a single health tier. Guardrail: the prompt is strongest when it weighs contradictory signals (e.g., high NPS but declining usage) rather than just averaging them.
Bad Fit: Single-Metric Thresholding
Avoid when: routing can be decided by a simple threshold rule (e.g., 'login count < 1'). Guardrail: do not replace deterministic business rules with an LLM call. Use the prompt only when signal synthesis requires judgment across conflicting indicators.
Required Inputs: Fresh, Structured Account Signals
Risk: stale or missing data produces confident but incorrect health scores. Guardrail: the prompt must receive timestamped fields for each signal. Reject or flag inputs older than your defined freshness window before model invocation.
Operational Risk: Over-Routing At-Risk Accounts
Risk: false-positive 'at-risk' classifications flood CS teams with unnecessary escalations. Guardrail: implement a confidence threshold below which the prompt returns 'uncertain' instead of forcing a tier. Route uncertain cases to a review queue, not directly to escalation.
Operational Risk: Stale Health Scores in Fast-Moving Accounts
Risk: a health score computed yesterday may not reflect today's outage or renewal conversation. Guardrail: attach a TTL to every generated score. Recompute when new signals arrive or when the score exceeds its validity window.
Boundary: Contradictory Health Indicators
Risk: the model may default to a middle tier when signals conflict, masking real risk. Guardrail: require the prompt to list contributing factors with direction (positive/negative) and flag contradictions explicitly. Downstream routing should treat 'conflicting signals' as a distinct escalation path.
Copy-Ready Prompt Template
A reusable prompt template for classifying account health based on multiple signals and producing a structured routing recommendation.
This prompt template is designed to be wired directly into your customer success routing middleware. It accepts a structured set of health indicators—adoption metrics, NPS scores, support ticket volume, and usage trends—and returns a deterministic health tier with contributing factors. The output is schema-constrained so that downstream dispatch logic can route the account to the correct queue, playbook, or human team without additional parsing.
textYou are an account health scoring engine for a B2B SaaS platform. Your job is to analyze the provided account health signals and produce a structured health tier classification with contributing factors and a recommended routing action. ## INPUT Account ID: [ACCOUNT_ID] Account Name: [ACCOUNT_NAME] Current Tier: [CURRENT_TIER] Contract Renewal Date: [RENEWAL_DATE] ### Health Signals - Product Adoption Score (0-100): [ADOPTION_SCORE] - Adoption Trend (last 90 days): [ADOPTION_TREND] - NPS Score (-100 to 100): [NPS_SCORE] - NPS Response Rate (%): [NPS_RESPONSE_RATE] - Open Support Tickets (last 30 days): [OPEN_TICKETS_30D] - Ticket Trend vs Prior Period: [TICKET_TREND] - Average Ticket Severity (1-4): [AVG_TICKET_SEVERITY] - Active Users (last 30 days): [ACTIVE_USERS_30D] - User Trend vs Prior Period: [USER_TREND] - Feature Utilization Rate (%): [FEATURE_UTILIZATION] - Time Since Last Login (days): [DAYS_SINCE_LAST_LOGIN] - Health Survey Score (if available): [HEALTH_SURVEY_SCORE] - Recent CSM Notes Summary: [CSM_NOTES_SUMMARY] ## CLASSIFICATION RULES 1. HEALTHY: Adoption >= 70, NPS >= 30, tickets stable or declining, users stable or growing, no concerning CSM notes. 2. AT-RISK: Adoption 40-69 OR NPS 0-29 OR ticket volume increasing >20% OR user count declining >10% OR concerning CSM notes present. 3. CRITICAL: Adoption < 40 OR NPS < 0 OR ticket severity averaging >= 3.5 OR days since last login > 60 OR multiple at-risk signals compounding. 4. INSUFFICIENT DATA: Fewer than 3 health signals available or data older than 90 days. ## CONFLICT RESOLUTION When signals conflict (e.g., high adoption but low NPS), weigh recent trends more heavily than point-in-time scores. Flag the conflict explicitly in contributing factors. If NPS response rate is below 10%, treat NPS as low-confidence and do not let it alone drive a CRITICAL classification. ## CONSTRAINTS - Do not invent missing data. Mark unavailable fields as "NOT_AVAILABLE". - If contract renewal is within 60 days, increase risk sensitivity by one sub-tier. - If CSM notes indicate an active success plan or executive engagement, note this as a mitigating factor. - Do not recommend specific account manager names unless provided in CSM notes. ## OUTPUT SCHEMA Return ONLY valid JSON matching this schema: { "account_id": "string", "health_tier": "HEALTHY | AT-RISK | CRITICAL | INSUFFICIENT_DATA", "confidence": 0.0-1.0, "contributing_factors": [ { "signal": "string (name of the health signal)", "value": "string (observed value)", "impact": "POSITIVE | NEGATIVE | NEUTRAL", "weight": "HIGH | MEDIUM | LOW" } ], "conflicts_detected": [ { "signals": ["signal_a", "signal_b"], "description": "string explaining the contradiction", "resolution": "string explaining how the conflict was resolved" } ], "mitigating_factors": ["string"], "recommended_routing": { "queue": "STANDARD | PRIORITY | ESCALATION | CSM_OUTREACH | DATA_COLLECTION", "urgency": "ROUTINE | ELEVATED | HIGH", "suggested_playbook": "string (name of recommended playbook or action)", "human_review_required": true/false }, "stale_data_warning": true/false, "rationale_summary": "string (2-3 sentence summary for downstream teams)" }
Before deploying this prompt, replace each square-bracket placeholder with live data from your account data warehouse, CRM, support platform, and product analytics. The prompt expects numeric scores, trend descriptors, and a CSM notes summary—ensure your data pipeline normalizes these fields before injection. If any field is genuinely unavailable, pass "NOT_AVAILABLE" rather than omitting the placeholder, so the model can apply the INSUFFICIENT_DATA classification rules correctly. Test with accounts that have conflicting signals (high adoption but rising tickets) to verify the conflict resolution logic produces sensible routing decisions before you put this into production.
Prompt Variables
Inputs required for the Account Health Score Routing Prompt to produce a reliable health tier, contributing factors, and routing action. Validate each input before prompt assembly to prevent stale or contradictory health signals.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[ACCOUNT_ID] | Unique identifier for the account being scored | acct_8F3A2X | Must match your system's account ID format. Reject if null or empty. |
[HEALTH_SIGNALS] | Structured object containing all available health indicators | { "nps_score": 45, "adoption_rate": 0.72, "support_volume_30d": 14, "usage_trend": "declining", "last_login_days": 23 } | Schema check: must include at least 3 signal fields. Reject if all fields are null. Flag contradictory signals (e.g., high NPS + declining usage). |
[SIGNAL_TIMESTAMPS] | Map of each signal to its last-updated timestamp | { "nps_score": "2025-03-15", "adoption_rate": "2025-03-28", "support_volume_30d": "2025-03-28" } | Staleness check: flag any signal older than 90 days. Reject if all timestamps are older than 180 days. |
[ACCOUNT_TIER] | Current contracted account tier | enterprise | Must match one of the allowed tier enum values. Reject unknown tiers. Null allowed only if tier is genuinely unknown. |
[CONTRACT_SLA] | Service level agreement details for this account | { "response_time_hours": 4, "dedicated_support": true } | Schema check: must include response_time_hours. Null allowed for accounts without formal SLAs. |
[HISTORICAL_HEALTH_SCORES] | Array of previous health scores with timestamps for trend analysis | [{ "score": 72, "date": "2025-02-15" }, { "score": 58, "date": "2025-03-15" }] | Array validation: must contain 0-12 entries. Flag rapid drops (>15 points in 30 days). Empty array is valid for new accounts. |
[ROUTING_RULES] | Current routing rule set that maps health tiers to actions | { "critical": "escalate_to_csm_manager", "at_risk": "assign_dedicated_csm", "healthy": "standard_queue" } | Schema check: must include rules for all expected health tiers. Reject if critical tier has no routing rule defined. |
Implementation Harness Notes
How to wire the Account Health Score Routing Prompt into a production application with validation, retries, and human review gates.
The Account Health Score Routing Prompt is designed to sit inside a customer success or support middleware layer, not as a standalone chatbot. The application should call this prompt when an account event triggers a health re-evaluation—such as a support ticket creation, a usage drop alert, or a scheduled weekly scan. The prompt expects a structured [ACCOUNT_DATA] payload containing health signals like adoption metrics, NPS scores, support volume, and usage trends. Before invoking the model, the application must assemble this payload from source systems (CRM, product analytics, ticketing platform) and validate that required fields are present and non-null. Missing or stale data should be flagged before the prompt runs, not discovered in the output.
Wire the prompt into a function that accepts an account ID, fetches the latest health signals, and constructs the [ACCOUNT_DATA] object. The function should enforce a schema check: required fields include account_id, signals (an array of health indicators with metric, value, trend, and last_updated timestamps), and previous_health_tier if available. After invoking the model, parse the JSON output and validate it against the expected [OUTPUT_SCHEMA]: a health_tier enum (healthy, at_risk, critical, churned), a confidence_score (0.0–1.0), an array of contributing_factors with factor and impact fields, and a recommended_routing object with queue, priority, and escalation boolean. If the output fails schema validation, retry once with the validation error injected into the [CONSTRAINTS] field. If it fails twice, log the failure and route the account to a manual review queue with the raw signals attached.
For high-risk routing decisions—specifically when the model returns critical or churned tiers—the implementation should require human approval before the routing action executes. Post the health assessment to a review dashboard where a customer success manager can confirm or override the tier and routing recommendation. Log every model invocation with the input signals, output tier, confidence score, and final routing decision for auditability. Use a model with strong JSON mode support (such as GPT-4o or Claude 3.5 Sonnet) and set temperature=0 to minimize variance in tier assignment. Avoid using this prompt for real-time, latency-sensitive routing where a sub-200ms response is required; the model call plus validation adds 500–1500ms, which is acceptable for async health scoring but not for inline ticket triage. If the account has contradictory signals—such as high NPS but declining usage—the prompt will flag this in contributing_factors, and the implementation should surface these contradictions in the review UI rather than silently accepting the tier label.
Expected Output Contract
The prompt must return a JSON object matching this contract. Validate each field before routing. Reject or repair outputs that violate the schema.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
health_tier | enum: critical, at_risk, stable, healthy, champion | Must match one of the five enum values exactly. Case-sensitive. Reject any other string. | |
overall_score | integer 0-100 | Must be an integer between 0 and 100 inclusive. Parse as int. Reject floats, negatives, or out-of-range values. | |
contributing_factors | array of objects | Array length must be >= 1 and <= 10. Each object must contain factor_name (string), impact (enum: positive, negative, neutral), and evidence_summary (string <= 280 chars). | |
stale_indicators | array of strings | List of indicator names where data is older than [STALENESS_THRESHOLD_DAYS]. Empty array allowed. Each string must match a known indicator from [HEALTH_INDICATOR_CATALOG]. | |
contradictory_signals | array of objects | Each object must contain signal_a (string), signal_b (string), and resolution_note (string). Empty array allowed if no contradictions detected. | |
recommended_routing | enum: standard_queue, priority_queue, escalation, success_manager, executive_review | Must match one of the five routing actions exactly. Reject any other string. Routing must be consistent with health_tier (e.g., critical must not route to standard_queue). | |
routing_urgency | enum: immediate, within_4h, within_24h, next_business_day, no_action | Must match one of the five urgency levels. Urgency must align with health_tier and recommended_routing. Reject mismatches. | |
human_review_required | boolean | Must be true if health_tier is critical or contradictory_signals is non-empty. Validate boolean type, not string 'true'/'false'. |
Common Failure Modes
Account health scoring fails silently when signals conflict, data goes stale, or the prompt confuses correlation with causation. These are the most common production failure patterns and how to prevent them before routing decisions go wrong.
Stale Health Indicators
What to watch: The prompt scores an account as healthy because it relies on outdated usage data, old NPS scores, or support tickets that have since been resolved. The routing decision sends the account down a low-touch path when active churn signals are present in newer data. Guardrail: Require a data_freshness field in the input context with timestamps for each signal. Add an eval check that flags any health score derived from data older than 30 days and forces a confidence downgrade.
Conflicting Signal Resolution
What to watch: High adoption scores combined with surging support volume create contradictory signals. The prompt averages them into a middling health tier that triggers no action, masking both the risk and the opportunity. Guardrail: Add a conflict_flag boolean to the output schema. When adoption and support volume diverge by more than one standard deviation, require the prompt to list both signals explicitly and default to the more conservative routing path with a human-review recommendation.
Single-Signal Overweighting
What to watch: A single strong signal—like a perfect NPS score—dominates the health calculation and suppresses multiple weak negative signals such as declining login frequency, reduced feature breadth, and unanswered support tickets. The account routes to standard queue while quietly deteriorating. Guardrail: Enforce a minimum signal count in the prompt instructions. Require at least three contributing factors for any health tier above 'at-risk.' Add an eval test case where one strong positive signal coexists with four weak negative signals and verify the output tier reflects the weight of evidence.
Health Score Drift Without Re-Evaluation
What to watch: The prompt produces a health score once, and downstream systems cache it for days or weeks. Account health changes in the interim but routing continues using the stale classification. Guardrail: Embed a score_expiry timestamp in the output and configure the routing middleware to reject scores older than the configured TTL. Add a monitoring check that alerts when the same health tier persists across more than three consecutive evaluations without change.
Correlation Mistaken for Causation
What to watch: The prompt observes that high-support-volume accounts often churn and incorrectly treats support volume alone as a churn predictor. Accounts with legitimate complex needs get routed to retention queues, wasting human effort and frustrating customers. Guardrail: Include a causal_confidence field in the output that distinguishes between correlated signals and known causal drivers. Add eval test cases where high support volume correlates with expansion, not churn, and verify the prompt does not overfit to the correlation.
Missing Segment Baseline
What to watch: The prompt applies the same health thresholds to enterprise accounts and SMB accounts. An enterprise account with 70% adoption looks unhealthy against a generic 90% benchmark, triggering unnecessary escalation. Guardrail: Require a segment_baseline input that provides peer-group benchmarks for adoption, NPS, and support volume. Instruct the prompt to score relative to segment norms, not absolute thresholds. Add eval cases that verify enterprise and SMB accounts with identical raw metrics produce different health tiers when their segment baselines differ.
Evaluation Rubric
Criteria for evaluating the Account Health Score Routing Prompt output before deploying to production. Each row defines a pass standard, a failure signal, and a concrete test method.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Health Tier Assignment | Output contains exactly one valid tier from the defined set: [HEALTHY], [AT_RISK], [CRITICAL], or [UNKNOWN]. | Missing tier, multiple tiers, or a tier not in the allowed enum. | Schema validation: assert output.tier is a string and matches one of the allowed enum values. |
Contributing Factor Completeness | At least one contributing factor is provided for each signal category present in [ACCOUNT_SIGNALS] (e.g., adoption, NPS, support volume). | A signal category in the input has no corresponding factor in the output, or factors are hallucinated for absent signals. | Unit test: provide input with known signal categories and assert output.factors array contains a matching entry for each. |
Stale Data Handling | If [ACCOUNT_SIGNALS] contains a last_updated timestamp older than [STALE_THRESHOLD_DAYS], the output tier is [UNKNOWN] or a staleness warning flag is set to true. | Stale data is ignored and a definitive tier like [HEALTHY] or [CRITICAL] is assigned without qualification. | Unit test: provide input with a last_updated date 100 days in the past and assert output.tier is [UNKNOWN] or output.flags.stale_data is true. |
Contradictory Signal Resolution | When signals conflict (e.g., high NPS but low adoption), the output includes a conflict flag and the rationale explains the final tier decision. | Conflicting signals are silently ignored, or the output tier flips inconsistently between test runs. | Unit test: provide input with high NPS and low adoption. Assert output.flags.conflicting_signals is true and output.rationale is a non-empty string. |
Routing Action Validity | The recommended routing action is a non-empty string from the allowed set: [STANDARD_QUEUE], [PRIORITY_QUEUE], [ESCALATE_TO_CSM], or [HUMAN_REVIEW]. | Routing action is missing, null, or an arbitrary string not in the allowed set. | Schema validation: assert output.routing_action is a string and matches one of the allowed enum values. |
Confidence Score Range | A confidence score is provided as a float between 0.0 and 1.0, inclusive. | Confidence score is missing, a string, or outside the 0.0-1.0 range. | Schema validation: assert output.confidence is a number, 0.0 <= output.confidence <= 1.0. |
Missing Data Fallback | If [ACCOUNT_SIGNALS] is an empty object or null, the output tier is [UNKNOWN] and the rationale explains the missing data. | An empty input produces a hallucinated tier like [HEALTHY] or a null pointer exception. | Unit test: provide an empty JSON object for [ACCOUNT_SIGNALS]. Assert output.tier is [UNKNOWN]. |
Output Schema Adherence | The entire JSON output matches the defined [OUTPUT_SCHEMA] without extra or missing fields. | Extra fields are present, required fields are missing, or field types are incorrect. | Schema validation: parse the output and validate against the JSON Schema definition for [OUTPUT_SCHEMA]. |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base prompt and a simple JSON schema for the health tier output. Use a single model call with account data passed inline. Skip eval harness and logging initially—focus on getting consistent tier assignments and contributing factors.
codeYou are a customer health scoring agent. Given the account data below, return a health tier (healthy, at_risk, critical) with contributing factors and a recommended routing action. Account Data: [ACCOUNT_JSON] Return JSON only: { "health_tier": "healthy|at_risk|critical", "confidence": 0.0-1.0, "contributing_factors": ["factor", "..."], "routing_action": "standard_queue|priority_queue|escalation", "rationale": "string" }
Watch for
- Missing schema checks leading to malformed JSON
- Overly broad instructions producing vague factors like "low usage" without specifics
- No handling for contradictory signals (high NPS but declining adoption)

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us