Summarize the themes in this week's Intercom conversations

Every Friday: the topics customers raised in Intercom this week, how many conversations each, and real quotes behind them.

Runs
Fridays at 14:00
Posts
Report card

What lands on your board

AcmeIntercom conversation themes · Claude Code

Billing questions led this week's 412 conversations

412 customer conversations this week. Billing and invoices was the biggest theme (96), and CSV export timeouts is new, already at 41.

Billing and invoices96 conversations
Login and SSO71 conversations
Integration setup58 conversations
Feature requests52 conversations
Account changes47 conversations
CSV export timeouts41 conversations
Other47 conversations
ThemeWhat customers wrote
Billing and invoices"Why was I charged for 12 seats when we only have 9?"
Login and SSO"SSO sends me back to the sign-in page every time."
Integration setup"The Slack integration connects but never posts anything."
CSV export timeouts"Exporting last quarter just spins and then fails."
Feature requests"Any plans for dark mode in the mobile app?"

New this week: CSV export timeouts, 41 conversations since Tuesday, mostly from accounts with large exports.

Done
An example with made-up numbers. Your agent posts your real ones.

What it does

Product managers ask support the same thing every week, "what are customers saying?", and the honest answer takes an afternoon of reading. Intercom tags help only if every teammate tags the same way, which in practice they don't.

The agent reads this week's customer-started conversations through the Conversations API, sorts them into a handful of themes by what the customer actually wrote, and keeps two or three short quotes per theme. Support and product read the same list on Friday, and the counts settle the argument about what is loudest.

How it works

  1. 1Find this week's conversations

    Call POST /conversations/search with {"query": {"operator": "AND", "value": [{"field": "created_at", "operator": ">", "value": <Monday 00:00, Unix>}]}, "pagination": {"per_page": 150}}, following pages.next.starting_after. Send the Intercom-Version: 2.17 header, or set that version as the app's default in the Developer Hub.

  2. 2Read what customers wrote

    Keep conversations whose source.delivered_as is customer_initiated. Take source.body and, from GET /conversations/{id}, the customer's first two replies in conversation_parts, with the HTML stripped.

  3. 3

    3Group into themes

    Cluster by what the customer asked for or reported, not by tag: 5 to 8 themes, each with a count, its share of the week and 2 or 3 quotes under 25 words. Whatever fits nowhere goes into Other, with its size.

  4. 4

    4Compare with last week

    Save theme names and counts to a small JSON file each run. Mark themes that are new or grew by half or more, and note which existing tags (tags.tags[].name) each theme maps to.

  5. 5

    5Write the summary

    Total conversations, themes by count with their quotes, then the new or growing ones. Keep customer names, emails and company names out of every quote.

  6. Post it to the board

    With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.

What you get

  • Conversations this week that customers started.
  • Themes by count, each with its share and two or three quotes.
  • New or growing themes compared with last week.
  • Tag drift: themes that map to no tag, or to several.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. Install the skill

    One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.

    shellcurl -fsSL https://briefkin.dev/skills/intercom-conversation-themes/install | sh
  2. Run it

    Ask Claude Code:

    promptRun the intercom-conversation-themes skill

    Or paste the prompt instead of installing:

    promptUsing the Intercom Conversations API, search for conversations created since Monday 00:00 that customers started, and read the opening message and the customer's next replies. Group them into 5 to 8 themes by what the customer asked or reported (not by tag), with a count and share for each and 2 or 3 short quotes with names, emails and company names removed. Tell me which themes are new or growing compared with last week if you know, and which tags each theme maps to. Start with the total number of conversations.
  3. Put it on a schedule

    Fridays at 14:00, from cron on any machine where Claude Code is signed in:

    crontab0 14 * * 5 claude -p "Run the intercom-conversation-themes skill"

    Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.

  4. Send it to your board

    Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works

View the SKILL.mdRaw file
SKILL.md---
name: intercom-conversation-themes
description: "Every Friday: the topics customers raised in Intercom this week, how many conversations each, and real quotes behind them. Use when the user asks for this, or when it runs on a schedule."
---

# Intercom conversation themes

Every Friday: the topics customers raised in Intercom this week, how many conversations each, and real quotes behind them.

Product managers ask support the same thing every week, "what are customers saying?", and the honest answer takes an afternoon of reading. Intercom tags help only if every teammate tags the same way, which in practice they don't.

The agent reads this week's customer-started conversations through the Conversations API, sorts them into a handful of themes by what the customer actually wrote, and keeps two or three short quotes per theme. Support and product read the same list on Friday, and the counts settle the argument about what is loudest.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- An Intercom access token from a private app in the Developer Hub, with permission to read conversations, in `INTERCOM_ACCESS_TOKEN`; or an Intercom connector.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Find this week's conversations** (Intercom): Call `POST /conversations/search` with `{"query": {"operator": "AND", "value": [{"field": "created_at", "operator": ">", "value": <Monday 00:00, Unix>}]}, "pagination": {"per_page": 150}}`, following `pages.next.starting_after`. Send the `Intercom-Version: 2.17` header, or set that version as the app's default in the Developer Hub.
2. **Read what customers wrote** (Intercom): Keep conversations whose `source.delivered_as` is `customer_initiated`. Take `source.body` and, from `GET /conversations/{id}`, the customer's first two replies in `conversation_parts`, with the HTML stripped.
3. **Group into themes**: Cluster by what the customer asked for or reported, not by tag: 5 to 8 themes, each with a count, its share of the week and 2 or 3 quotes under 25 words. Whatever fits nowhere goes into Other, with its size.
4. **Compare with last week**: Save theme names and counts to a small JSON file each run. Mark themes that are new or grew by half or more, and note which existing tags (`tags.tags[].name`) each theme maps to.
5. **Write the summary**: Total conversations, themes by count with their quotes, then the new or growing ones. Keep customer names, emails and company names out of every quote.

## Route B: the browser

### What you need

- Signed in to Intercom as a teammate with access to the inbox and to Reports (reports need a seat with reporting permission).

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://app.intercom.com/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open the inbox for this week**: Intercom URLs carry your workspace ID, so start at the sign-in landing page and pick the workspace. Open **Inbox**, choose the **All** view, and add a filter **Created** set to the range from Monday 00:00 to now, with **Started by** set to **Customer** (under the conversation attribute filters) so outbound messages and bot-only threads stay out.
2. **Read what customers wrote**: Go through the list oldest first. For each conversation read the opening message and the customer's first two replies in the conversation pane, ignoring teammate and Fin replies. Keep a running list of what the customer asked for or reported, in a few words each.
3. **Check the topics Intercom already found**: Open **Reports**, then **Conversation topics**, and set the date filter to this week. Read the **Topics** table, sorted by volume. It covers only topics someone defined, so treat it as a cross-check on your own grouping, not as the answer.
4. **Group and count**: Sort your notes into 5 to 8 themes by what the customer wanted, not by Intercom tag, with a count, the share of the week and 2 or 3 quotes under 25 words each. Put the rest in Other with its size, and note which tags (shown on each conversation) each theme maps to.
5. **Write the summary**: Total conversations customers started this week, themes by count with their quotes, then themes you did not see last week or that grew by half or more. Names, emails and company names stay out of every quote.

Note: The inbox list loads conversations as you scroll, and a browser agent reading a few hundred full threads is slow. Above roughly 300 conversations a week, read the opening messages only and open full threads for a sample of each theme.

## The report

- **Conversations this week** that customers started.
- **Themes** by count, each with its share and two or three quotes.
- **New or growing** themes compared with last week.
- **Tag drift**: themes that map to no tag, or to several.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "intercom-conversation-themes/<date of this run, e.g. 2026-10-16>",
  "item_key": "intercom-conversation-themes",
  "project": "Acme",
  "source": "Intercom conversation themes skill",
  "kind": "update",
  "title": "Billing questions led this week's 412 conversations",
  "summary": "**412** customer conversations this week. Billing and invoices was the biggest theme (**96**), and **CSV export timeouts** is new, already at 41.",
  "widget": [
    {
      "type": "Bars",
      "props": {
        "items": [
          {
            "label": "Billing and invoices",
            "value": 96
          },
          {
            "label": "Login and SSO",
            "value": 71
          },
          {
            "label": "Integration setup",
            "value": 58
          },
          {
            "label": "Feature requests",
            "value": 52
          },
          {
            "label": "Account changes",
            "value": 47
          },
          {
            "label": "CSV export timeouts",
            "value": 41
          },
          {
            "label": "Other",
            "value": 47
          }
        ],
        "unit": "conversations"
      }
    },
    {
      "type": "Table",
      "props": {
        "columns": [
          "Theme",
          "What customers wrote"
        ],
        "rows": [
          [
            "Billing and invoices",
            "\"Why was I charged for 12 seats when we only have 9?\""
          ],
          [
            "Login and SSO",
            "\"SSO sends me back to the sign-in page every time.\""
          ],
          [
            "Integration setup",
            "\"The Slack integration connects but never posts anything.\""
          ],
          [
            "CSV export timeouts",
            "\"Exporting last quarter just spins and then fails.\""
          ],
          [
            "Feature requests",
            "\"Any plans for dark mode in the mobile app?\""
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "New this week: CSV export timeouts, 41 conversations since Tuesday, mostly from accounts with large exports.",
        "tone": "warn"
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Fridays at 14:00 (`0 14 * * 5`). From cron, with the agent signed in on that machine:

```bash
0 14 * * 5 claude -p "Run the intercom-conversation-themes skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/intercom-conversation-themes#schedule

Source: https://briefkin.dev/skills/intercom-conversation-themes

What your agent needs

  • An Intercom access token from a private app in the Developer Hub, with permission to read conversations, in INTERCOM_ACCESS_TOKEN; or an Intercom connector.

Connecting Intercom

  1. Intercom MCP server, Intercom's official remote server at https://mcp.intercom.com/mcp (https://mcp.eu.intercom.com/mcp for EU workspaces; Australian workspaces aren't supported yet). Intercom is in Claude's connector directory for US workspaces, and on Team and Enterprise plans an Owner adds it. Its tools search and fetch conversations and contacts (docs).
  2. REST API with an access token. Create an app in the Intercom Developer Hub, store its access token in INTERCOM_ACCESS_TOKEN, and call https://api.intercom.io (api.eu.intercom.io or api.au.intercom.io by region) with an Intercom-Version header. Give the app Read conversations and Read and list users and companies.

The MCP server includes a few write tools (internal notes, Help Center articles), so for unattended reports an app token with read permissions only is the tighter option.

Questions

Does it use Intercom tags or topics?

It groups by the text customers wrote, so it works even when tagging is patchy. It still reads each conversation's tags and reports which tags every theme maps to, which is a quick way to see where the tag list needs cleaning up.

How many conversations can it read in one run?

Search returns up to 150 conversations a page, so a week of a few thousand is a few dozen requests for the opening messages. Above that, the skill counts themes from every opening message and opens the full conversation only for a sample.

Do I need Briefkin to use the Intercom conversation themes skill?

No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.

Which agents can run it?

Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.

Can it work without an API or MCP server, from my browser?

Yes. Switch the data source to "Your browser" and the steps change to the Intercom pages themselves: the agent opens app.intercom.com in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.

Read this report on your board, not in a chat log

Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.

Free during the open beta. No card.