Common topics and common frustrations

    What customers write about, and where conversations turn sour. Both are grouped automatically, and both are clickable.

    5 min read · Updated 13 September 2026

    Two lists near the bottom of Insights do something the numbers above cannot: they tell you what people are actually talking about.

    Two lists, two questions

    Common topics
    What customers write about. Volume.
    Common frustrations
    Where conversations turned negative. Pain.

    A theme can be busy without being painful, and painful without being busy. Reading both is how you tell the difference between "lots of people ask this" and "this makes people angry".

    Neither needs setting up. Both are grouped and ranked automatically from your conversations.

    Common topics

    A ranked list of themes with a count and a bar, busiest first. Each row opens the threads behind it.

    This is the most direct evidence you will get of what your documentation and your product should fix. A theme at the top of this list for three months running is a question your customers should never have needed to ask.

    Take the top three topics and check each one against what Chloe knows. If your busiest question is not covered by a knowledge source, that single gap is costing you more replies than anything else on the page.

    Common frustrations

    The same idea, applied to conversations that went badly. A theme is flagged when a customer's tone turns negative or they complain explicitly.

    The rule is deliberately fixed and stated on the page rather than hidden. You can rely on it meaning the same thing this month as last, which is what makes the trend readable.

    Above the list is the total. It shows how many themes were flagged and how many threads that covers. Each row opens its threads.

    Why a theme appears in both

    Often the same theme is in both lists, and that combination is the most actionable thing on the page.

    High volume, no frustration
    Lots of people ask; the answer satisfies them. A documentation opportunity.
    Low volume, high frustration
    Few people hit it, but those who do are upset. Often a bug, or a policy that reads as unfair.
    High volume and high frustration
    Fix this before anything else. It is both common and painful, and it will be quietly costing you customers.

    The New tag

    A theme that has not appeared before is marked New.

    On a workspace that has just started, everything is new and the tag means little. Once you have a few months of history it becomes an early warning: a new theme climbing the list is usually a change you made, or something that has just broken.

    What to do with a topic

    1. 1Click the row to open its threads.
    2. 2Read three or four of the actual conversations, not the summaries.
    3. 3Ask whether the question should have needed asking at all.
    4. 4If the answer is stable, add it to your knowledge sources or write a guided answer so Chloe handles it next time.
    5. 5If the question exists because something is confusing, that is a product note, not a support one. Pass it on.

    What to do with a frustration

    1. 1Open the threads and read how the conversation turned.
    2. 2Separate the two causes: sometimes the answer upset them, sometimes the wait did.
    3. 3If it was the answer, and the answer was right, a Do or don't about how it is delivered may help.
    4. 4If it was the wait, check whether those threads were overdue. That is a workload problem, not a wording one.
    5. 5If the same theme is frustrating people every month, stop treating it as a support issue. Somebody outside support needs to hear about it.
    Frustration data is the least comfortable thing in Gruvi to read and the most useful. It is the closest you get to customers telling you what is wrong without being asked. --- ## PART H: CHECK YOUR WORK BEFORE YOU REPLY Run this in the browser console on /docs: ``js [...document.querySelectorAll('h3')].map(h => [ h.textContent.trim(), h.closest('section').querySelectorAll('li').length ]) ` Every count must be non-zero, and must match this table: | # | Card | Articles | |---|---|---| | 1 | Getting Started | 4 | | 2 | Channels | 6 | | 3 | Team & Workspace Settings | 4 | | 4 | The Inbox | 4 | | 5 | Working a Thread | 4 | | 6 | Keyboard Shortcuts | 3 | | 7 | Thread Details & Customer Context | 3 | | 8 | Customers & Companies | 4 | | 9 | Chloe, Your AI Assistant | 4 | | 10 | The Empathy Engine | 3 | | 11 | Knowledge Sources | 4 | | 12 | Training & Improving Chloe | 4 | | 13 | Escalations & Human Handoff | 3 | | 14 | Skills & Integrations | 4 | | 15 | Rules & Automations | 7 | | 16 | Insights & Reporting | 4 | Then confirm all of these: - helpArticles.length === 65 and categories.length === 16; - every card shows its articles, and the total across all cards is 65; - no card's article list is hardcoded anywhere; - every article page loads at /docs/<slug> and shows its title, summary, In this article list, blocks and Related row; - clicking an item in **In this article** jumps to the right heading; - inline links render as links. Check with document.querySelectorAll('main a').length on any article page. It must not be 0; - no <dd>` anywhere begins with a dash; - searching the rendered site for the em dash character returns nothing; - Start here appears on exactly three cards; - the Most viewed row shows the six entries from Part D. If any count is zero, stop and tell me which card, rather than filling it in by hand.

    Was this helpful?