Find the customers stuck contacting support again and again

A board that ranks the people who opened three or more separate support conversations this month, reads their threads, and files the real fix.

App
KustomerLinearGeneral Input DatabaseCustomer SupportProductFeedback TriageResearch & Monitoring
PromptCreate

Build me an app that shows the people who keep coming back to support, not the ticket themes, so my team can finally break the loops. The unit on this board is a stuck human, not a topic. I want to open it for a weekly review and immediately see which individual customers have now explained their problem to us three or more times.

The main view is a ranked board of repeat contacters over a rolling thirty day window, and the window length should be adjustable from the UI. Build the list with Kustomer Search Customers to get customers active in the last thirty days, then for each one pull their conversations with Get Conversations by Customer and count them server side. Keep only customers with three or more conversations that started inside the window, and rank the board by contact count, breaking ties by the most recent contact first. Do not try to filter on conversation counts inside the search itself if that is awkward; pulling recently active customers and counting their conversations in the handler is the reliable path.

Counting rule, and this one matters a lot. Count only genuine new conversations, never one long thread. If a customer keeps replying inside a single conversation for three weeks, that is one contact, not three. Count distinct conversation records by their created date, and show each conversation's start date on the expanded row so a lead can sanity check the count without leaving the app.

Each row shows the customer's name and email, how many separate conversations they opened in the window, the span between their first and their latest contact written in plain language such as nineteen days, the subject line of each conversation, and whether anything of theirs is still open right now. Make the still open state visually obvious, since an open thread on a customer who has already contacted us three times is the most urgent thing on the board.

Opening a row lays that customer's threads out side by side, one column per conversation in date order, so a lead can literally see the same problem restated three different ways. Fill each column using Get Messages by Conversation for the back and forth and Get Notes by Conversation for the internal notes agents left behind, and use Get Conversation by ID for the status and assignment details on each thread. The internal notes are important context, because they usually show what support thought it had fixed.

Every row has a Diagnose this loop button that starts a background agent. The agent reads every one of that customer's conversations in the window, all the messages and all the notes, and works out what is actually still unresolved versus what support believed it had already resolved. It writes up its finding with direct verbatim quotes from the customer, a short account of what each previous attempt tried, and a recommended fix. It then posts that write up onto the customer's newest conversation using Create Note by Conversation, and the app shows the same write up in the expanded row for review. Show the agent's progress while it runs and store the finished diagnosis so it is still there on the next visit.

When a diagnosis points at a product or process defect rather than a one off mistake, a File in Linear action creates the issue. Let the lead pick the destination team from a picker populated by Linear List Teams, then use Create Issue with the diagnosis, the customer quotes, and a link back to the customer in Kustomer in the issue description. Store the mapping from customer to created issue in the app database so the row shows a filed badge with the issue identifier, and refresh the current state with Get Issue so the board shows whether engineering has started or shipped the fix.

Two more state rules. Skip customers whose repeat contacts are already covered by a filed issue, so the same person does not clog the board every week once we have acted on them, but still show them in a separate filed section with their issue status. And let a lead mark a loop as closed by hand once the customer has gone quiet, with the closed loops kept in their own view rather than deleted, so the team can see what it actually resolved. Persist the filed mappings, the stored diagnoses, and the closed markers in the app database.

One important constraint about Kustomer. Creating a message records an instance on the conversation timeline and does not deliver an outbound message to the customer, so this app must never try to reply to customers. Everything it writes stays internal, which means notes on conversations and nothing else.

What does this prompt do?

  • Ranks the customers who opened three or more separate conversations in the last thirty days, showing how many times they came back, the span between their first and latest contact, what each one was about, and whether anything is still open.
  • Opens a customer's threads side by side, with the internal notes attached, so a lead can see the same problem restated three different ways instead of reading three tickets in isolation.
  • A Diagnose this loop button hands the whole history to an assistant that works out what is genuinely still broken versus what support believed it had already fixed, writes it up with the customer's own words and a recommended fix, and saves it as an internal note on their newest conversation.
  • Files the ones that turn out to be real product or process defects straight to your engineering team, then remembers which customer produced which issue and keeps the status on the row up to date.

What do I need to use this?

  • A Kustomer account, with permission to read customers and conversations and to add internal notes
  • A Linear workspace, if you want to file defects from the board. The board still works on its own without it
  • At least thirty days of support history in Kustomer, so there is something to rank

How can I customize it?

  • Change the window from thirty days, or raise the bar from three conversations to four or five if your volume is high
  • Choose which engineering team new issues get filed against, and what the issue title looks like
  • Set how long a customer has to stay quiet before the board offers to close their loop

FAQs

What counts as coming back, exactly?
Only genuinely new conversations count. If one customer keeps replying inside a single long thread over three weeks, that is one contact, not three. The board counts separate conversations opened on separate days, and shows you each start date on the row so you can sanity check it yourself.
Will this send anything to the customer?
No. Everything the board writes stays internal. The diagnosis is saved as an internal note on the conversation, visible to your team inside Kustomer, and nothing is ever sent to the customer.
Do we have to use Linear?
No. The board, the ranking, and the diagnosis all work on their own. Filing is an optional last step for the cases that turn out to be a real product or process defect rather than a one off.
Will the same customer keep showing up every week after we have already filed their issue?
No. Once a customer's repeat contacts are covered by a filed issue, the board stops surfacing them as a fresh loop and shows the issue status instead. A lead can also mark a loop closed by hand once the customer has gone quiet.
How is this different from a report on our top ticket topics?
Topic reports tell you which subjects come up a lot, which is useful for staffing and macros. This is the person centric version. It tells you which individual human has now explained their problem to you three times, which is the number that predicts an angry escalation or a cancellation.
Who is this for?
Support leads and CX managers who run a weekly review, and anyone who owns the repeat contact rate metric and wants to act on it rather than just watch it move.

Related templates

White glove queue for the VIP customers waiting on you

Open one board each morning that ranks the high value customers waiting on a reply by the revenue sitting behind their silence.

Kustomer
Shopify
App
Catch the trials quietly dying before the card gets charged

Open one desk each morning to see every account still in a trial, ranked by how much money is at stake against how little they have actually used.

Intercom
Stripe
General Input Database
App
Returns and warranty claim desk that follows your policy

Work every return, damage and warranty claim in one queue, with the order, the delivery date and a policy-backed recommendation already on screen.

Kustomer
Shopify
Google Sheets
App
Run your Webflow site translations from one review desk

See every page's translation status at a glance, edit translations side by side with the English, and publish only what your team has actually approved.

Webflow
JigsawStack
Slack Bot
+1
App
Legal contract intake desk your teams use instead of email

One place for sales and ops to request an NDA or vendor agreement, watch its status, and let legal launch the contract in a single click.

Ironclad
Slack Bot
General Input Database
App
Track which pages and brands win your buyers' questions

A board of the questions your buyers ask, showing where your pages land, which competitors show up instead, and what you lost since the last check.

Internet Search
General Input Database
Google Docs
+1
App

Stop letting the same customer explain the same problem three times.

Put the people who keep coming back on one board, find out what is actually still broken, and file the fix.