Log in to get this Skill or upvote it.

Customer Journey Analyzer

Note from the creator

Why I built it

“Built because one email never tells the full story. Pull everything, analyze it all, flag what matters.”
Ahmed Hlail's avatarAhmed Hlail· QA & AI Operations Lead

What it does

Give this skill a single customer's email address and it retrieves their entire conversation history from your connected support data through Rippit. It builds a worksheet of every conversation for that customer, then enriches each row with AI columns you define — a plain-language summary, a structured inquiry summary, a request-type classification, a closure-intent check, and a risk level scored against the categories you set. From the enriched data it produces two breakdowns: interaction themes grouped by what the customer contacted about, and a flag report surfacing the signal categories you care about, each with a verbatim quote and severity. The finished analysis is presented back to you in the chat, including a customer overview, per-conversation results, and a one-line risk posture.

How it works

  1. 1

    Reads the conversations

    Confirms the customer's email, then reads every conversation for that address through the Rippit connector.

  2. 2

    Enriches and scores each row

    Adds AI columns for summary, inquiry, request type, closure intent and a risk level using your own categories and rules.

  3. 3

    Delivers the breakdown

    Returns a themed interaction breakdown, a flag report with quotes and severity, and a one-line risk posture.

How It Looks

See the reply this Skill builds, before you download it.

Customer Analysis — hopper@bullrushbank.pondRippit connector · on
Run customer history read-out on last week.
▸RippitReads the customer's full all-time conversation history filtered by their email address through the Rippit connector✓
▸RippitBuilds a filtered worksheet and enriches every row with five AI columns for summary, closure, inquiry, risk, and request type✓
▸ClaudePresents a customer overview, per-conversation results, a themed interaction breakdown, and a Legal/SE/PG flag report with risk posture✓
Customer Analysis — hopper@bullrushbank.pond
Customer Overview
  • Total conversations: 14 — all-time
  • Date range: Mar 2023 – Feb 2024 — earliest to latest
  • Business unit: Pond Memberships — from `brand_unit`

Customer: hopper@bullrushbank.pond — 14 conversations across the Pond Memberships and Fly Delivery units.


Per-Conversation Results
Conv IDDateInquiryRiskClosure
#48212024-02-11Lily pad billing disputeHighNo
#46102024-01-03Fly delivery lateMediumNo
#44022023-11-19Wants to close membershipHighYes
#41882023-09-02Tadpole onboarding helpLowNo

Breakdown 1 — Interaction Themes
ThemeCountDate rangePattern
Billing disputes5Sep–FebRepeated lily pad overcharges
Fly delivery delays4Mar–JanLate deliveries to north pond
Membership changes3Nov–DecEscalating toward closure

Breakdown 2 — Flag Report
TypeConv IDSeveritySummary
Closure intent#4402HighClear unretracted request to close
Frustration#4821MediumAngry over repeat billing error
Churn signal#4610LowMentioned rival pond
Reply to Claude…
+⚙Claude Opus 4.8 ▾↑
Claude can make mistakes. Please double-check responses.

Illustrative preview, generated from the generic version of this Skill. The layout is real; the pond-side data is made up.

Churn & RetentionEscalationsAnalytics & Insights#enrichment#escalation#risk#insights#journey

The Skill

Skill contents

---
name: customer-email-history-analyzer
description: "Given a single customer's email address, pull ALL their conversations through Rippit, enrich each with a configurable set of AI columns (summary, inquiry summary, request type, closure intent, risk level), then produce a themed interaction breakdown and a flag report over the signal categories the user defines. Use when someone sends a customer email address (or a forwarded email containing one) and wants a full-history view of that one customer rather than a single message read. Delivers a customer overview, per-conversation results, and a one-line risk posture in the chat."
---
# Customer Email History Analyzer

This skill takes a customer email address, retrieves their full conversation history through Rippit, enriches it with a configurable set of AI columns, and delivers a structured analysis of that customer.

## First run — make it yours

Before asking anything, LOOK at what is actually connected:
1. Call `list_data_sources` and list what the user has.
2. Pick the conversations source and `describe_table` it. Identify: the column that holds the customer's email/identifier, a timestamp column, a conversation-id column, a topic/category column, and any brand/business-unit column.
3. If there is no column that identifies a customer by email, say so plainly and ask how to proceed rather than running into a dead end.

Then ask ONE question at a time, leading with what you found and proposing a default:
- Confirm `{{customer_identifier_column}}` — the column to filter on to find all of one customer's conversations.
- Confirm `{{enrichment_columns}}` — which AI columns to add. Default set: a plain summary, a closure-intent check, a structured inquiry summary, a risk level, and a request type.
- Establish `{{risk_categories}}` — the risk levels and their definitions the risk column uses.
- Establish `{{flag_categories}}` — the signal categories the flag report scans for.
- Confirm `{{brand_grouping_column}}` — the column (if any) to group the overview by.

Restate the filled-in bindings for confirmation, then run. On later runs, reuse them unless the user asks to change them.

---

## Step 1 — Extract the customer email

From the user's input, identify the customer's email address. If the input is a forwarded email, look for the original sender's address. If multiple addresses are present, ask which one is the customer. Do not proceed until you have a confirmed email address.

---

## Step 2 — Find all conversations for this customer (all time)

1. Call `list_data_sources` to find the conversations table.
2. Call `describe_table` to confirm the schema and locate `{{customer_identifier_column}}`.
3. Call `aggregate_table` with a filter on `{{customer_identifier_column}}` to confirm how many conversations exist. State the count before proceeding.
4. Call `create_worksheet` filtered to that customer's identifier — no row limit, no sample. Title it: `Customer Analysis — [customer email]`. This captures full all-time history.
5. Call `read_table` on the new worksheet to confirm rows landed. If empty or still hydrating, wait and retry once.

---

## Step 3 — Enrich with AI columns

Call `enrich_worksheet` on the worksheet with all of `{{enrichment_columns}}` in a single call (cost scales with rows, not columns — batch them). For each column, use a prompt of this shape, written against the user's own categories:

### Summary
Write a 2-3 sentence summary covering what the customer contacted about, what action was taken (if visible), and the outcome. Base it only on the transcript; do not infer back-office actions. Internal notes are background only; bot replies are not agent conduct; summarize by meaning regardless of language. Output: plain paragraph.
outputType: `{ "type": "string" }`

### Closure intent
Detect whether the conversation contains a request to close, deactivate, or permanently restrict the account, as the user defines closure. Require clear, unretracted intent assessed at end of conversation. Output:
```
{ "classification": "Yes" | "No" | "Not enough information", "confidence": "High" | "Medium" | "Low", "key_evidence": "[verbatim quote, max 2 sentences, or empty]" }
```
outputType: `{ "type": "string" }`

### Inquiry summary
Summarize in structured form based on the final state of the conversation. Output:
```
{ "date": "[first message date or 'not specified']", "type": "[channel or Unknown]", "inquiry": "[one sentence]", "outcome": "[one sentence or 'unresolved']", "confidence": "High" | "Medium" | "Low", "key_evidence": "[verbatim quote, max 2 sentences]" }
```
outputType: `{ "type": "string" }`

### Risk level
Classify the interaction risk using the categories and definitions in `{{risk_categories}}`. Apply a clear priority hierarchy (highest category wins), disambiguation rules the user supplied, and evaluate at end of conversation (frustration resolved by end = lowest applicable level). Output:
```
{ "classification": "[one of {{risk_categories}}]", "confidence": "High" | "Medium" | "Low", "key_evidence": "[verbatim quote, max 2 sentences]" }
```
outputType: `{ "type": "string" }`

### Request type
Classify the primary request type — closure-type vs. other vs. not enough information — based on the final state of the conversation, ignoring retracted or incidental mentions. Output:
```
{ "classification": "[request-type label]", "confidence": "High" | "Medium" | "Low", "key_evidence": "[verbatim quote, max 2 sentences]" }
```
outputType: `{ "type": "string" }`

After calling `enrich_worksheet`, call `get_enrich_status` and loop until `done: true` before proceeding.

---

## Step 4 — Read enriched data

Call `read_table` on the worksheet to pull all rows with: the conversation id, the timestamp, `{{brand_grouping_column}}`, the topic/category column, and all enriched column IDs (from `get_enrich_status`). Paginate until `truncated: false`.

---

## Step 5 — Breakdown 1: Interaction Themes

Group conversations by theme using the inquiry summary and summary text. For each group: Theme, Count, Date range (earliest to latest timestamp), Conversation IDs, and a one-sentence pattern summary.

---

## Step 6 — Breakdown 2: Flag report

Scan every row's risk classification, closure intent and inquiry summary for the categories in `{{flag_categories}}`. For each flag: Type (one of `{{flag_categories}}`), Date, Conversation ID, one-sentence summary, verbatim Quote from the key_evidence field, and Severity (High = highest-risk row, explicit; Medium = mid-risk or ambiguous, needs review; Low = weak contextual signal). If none: state "No signals identified across all conversations."

---

## Output structure

1. **Customer overview** — email, total conversations, date range, values of `{{brand_grouping_column}}`.
2. **Per-conversation results** — one row per conversation: id, date, inquiry summary, risk, request type, closure.
3. **Breakdown 1 — Interaction Themes**
4. **Breakdown 2 — Flag report** (sorted High → Medium → Low)
5. **One-line risk posture**.

Be direct. Name flags clearly with evidence. Do not fabricate data.

Built something clever?
Share it.

Publish a Skill, climb the leaderboard, and get Rippit rewards

+ Submit a Skill