Contact Intelligence gives you three analytics views across your contact base: engagement trends (who is active and how relationships are progressing), churn risk (which contacts are about to go quiet), and mood distribution (how your customers are feeling in aggregate).
Engagement trends
Contact Intelligence → Analytics → Trends
GET /analytics/trendsResponse:
{
"total_contacts": 734,
"active_last_7_days": 512,
"stage_distribution": {
"new": 102,
"building": 231,
"established": 178,
"deep": 89,
"fading": 108,
"dormant": 26
}
}Reading the stage distribution:
- A healthy account has most contacts in
building,established, ordeep - A large
fadingcohort means you have contacts going quiet — this is where outreach can help dormantcontacts are 30+ days inactive and typically out of reach without an external re-engagement campaign
Churn risk report
Contact Intelligence → Analytics → At-risk contacts
GET /analytics/churn?limit=20Response:
{
"summary": {
"high_risk": 24,
"medium_risk": 87
},
"at_risk_contacts": [
{
"contactId": "ct_01j...",
"displayName": "Rahul S.",
"channel": "whatsapp",
"churnRisk": 0.91,
"relationshipStage": "fading",
"lastActiveAt": "2026-06-05T11:00:00Z",
"totalMessages": 63
}
]
}Churn risk scores:
| Score | Risk level | Typical situation |
|---|---|---|
| 0.7 – 1.0 | High | 14+ days inactive, previously active |
| 0.3 – 0.7 | Medium | 7–13 days inactive or early-stage with few messages |
| 0.0 – 0.3 | Low | Active recently, strong relationship |
The score is computed from: days since last message, relationship stage, current vs longest streak, and total message count. An established contact who suddenly goes quiet scores higher than a new contact who has only sent 2 messages.
Tip: Enable proactive outreach for contacts in the 0.7+ range. CI will automatically create inactivity triggers for contacts who hit the configured inactivity threshold.
Mood distribution
Contact Intelligence → Analytics → Mood distribution
GET /analytics/moodsResponse:
{
"moods": {
"happy": 210,
"neutral": 348,
"frustrated": 67,
"sad": 31,
"anxious": 22,
"excited": 94,
"confused": 28
},
"energy": {
"high": 315,
"medium": 384,
"low": 35
}
}This shows the current mood of every contact in your account — what they were feeling the last time they sent a message. It is a snapshot, not a time series.
Interpreting the distribution:
- A high
frustratedcount can signal product issues, shipping problems, or poor bot performance — worth investigating alongside session logs - A high
confusedcount may mean your bot is giving unclear answers or the product itself is hard to understand - A spike in
sadmay correlate with an external event (service outage, delivery delay) — cross-reference with the time of last messages
Mood distribution resets gradually as contacts message you again and their mood is reclassified.