How to Export Intercom Conversations and Find Top Contact Reasons
Intercom's Dataset export CSV leaves out what customers wrote. Here is which export to use, how to tag contact reasons consistently, and how to rank them by cost as well as volume.
To find the top contact reasons in Intercom, export the conversations with their text (the Conversations API, the bulk export in the Inbox, or a connected tool), give every conversation one primary reason from a fixed list, and count. The CSV in Reports > Dataset export is useful for the fields around each conversation, but Intercom says it does not include the message content, so on its own it cannot tell you why customers wrote in.
The rest of this post covers which export to use, which fields to keep, how to tag reasons so the counts mean the same thing every month, and what to join them to once you have them.
Step 1: pick the export that has what you need
Intercom documents several ways to get conversations out, and they split into two kinds: exports of reporting fields (who, when, which channel, which tags, what rating) and exports of the conversation itself. You need both, joined on the conversation ID.
From Intercom's help center
Only some Intercom exports include what the customer wrote
The export methods Intercom documents for conversations, and what each one gives you.
| Method | Message text? | Limits Intercom states |
|---|---|---|
| Dataset export (CSV) Reports > Dataset export | No. Reporting metadata only | Instant up to 10,000 rows, larger files emailed; can be scheduled; data for up to two years |
| Saved View export (CSV) Inbox > Views | No. The View's visible columns, with a link to each conversation | Instant up to 25,000 cells; refused above 100,000 rows; manual only |
| Bulk export (PDF or text) Inbox, bulk actions | Yes, full transcript without internal notes | 200 to 300 conversations per operation |
| Conversations API API | Yes, full content by conversation ID | Export API: 90 days per request, no volume limit |
| Amazon S3 export (JSON) Settings > Data > Imports & exports | The article says both yes and no; check a file | Historical up to two years, or hourly or daily |
Two details from that article matter for this job. The Dataset export needs two permissions, "Can access Chart drill-in" and "Can export CSV", so check them before you start. And the S3 section contradicts itself: one note says S3 data "will not contain a transcript", another says the JSON files provide "detailed message content and attachments". Open one file before you build anything on it.
For a one-off look at a few hundred recent conversations, the bulk export from the Inbox is enough. For a monthly count you will rerun, use the API, a scheduled pull or a connected tool, so next month's file has the same shape as this month's.
Step 2: keep the fields that let you rank and join
Intercom groups its reporting fields into datasets, including Conversations (ID, state, channel, assignee), Conversation Rating (the rating, the remark and whether a teammate, Fin or a chatbot was rated), Conversation actions (assignments, closures, replies) and Teammate handling (how long teammates spent on each conversation). For contact reasons, keep these:
Conversation ID and created time. The ID joins the metadata to the transcript; the time lets you trend reasons by week.
Who started it. Intercom's Conversations dataset has "First contacted by" (customer, teammate, Fin AI Agent or workflow) and "Has user reply". Drop outbound messages the customer never answered, or they will inflate whatever reason your outbound campaign was about.
Channel, tags and rating. Existing tags are a useful check on your new labels, but they were added by many people over many months, so do not count them as the reason.
Whether Fin or a person handled it, and for how long. This is what turns a volume ranking into a cost ranking.
A customer or company ID that matches your other systems. Your own external user ID or a company ID that matches the CRM. Do not join on email address; people write in from several.
Step 3: tag every conversation from a fixed list
A common reason contact-reason counts drift is that the list is not written down. One person files "can't log in after upgrading" under billing, another under login, and next quarter the login number jumps for no real reason. Fix the list first:
Read 100 to 200 conversations before writing any reasons. Write down what each customer wanted in a few words, then group the notes. Aim for 10 to 25 reasons.
Give each reason a definition, an example and a "not this one when" line. The last part settles the borderline cases before they come up.
Tag one primary reason per conversation, plus secondary reasons if needed. The primary reason is what the customer first asked for. Counting only the primary keeps the shares adding to 100%.
Keep an Other bucket and watch its size. If it grows past about one conversation in twenty, read it and add a reason.
Test the list before the full run. Have two people tag the same 50 conversations without talking. Where they disagree, the definition is unclear; fix it and repeat.
A starting list
Write the reasons down with a definition and an example before anyone tags
A contact-reason list for a subscription business. Rename and replace to fit yours.
| Reason | Use it when the customer | Not this one when |
|---|---|---|
| Billing and refunds | questions a charge, asks for a refund or reports a failed payment | they want to change plan (use Plan change or cancel) |
| Plan change or cancel | wants to upgrade, downgrade, pause or cancel | the trigger is a wrong charge (use Billing and refunds as primary) |
| Password and login | cannot sign in, reset a password or pass two-factor | they are signed in and something fails (use Bug or error) |
| Bug or error | reports something that should work and does not | they do not know how to do it (use How-to question) |
| How-to question | asks how to do something the product already does | the feature does not exist (use Feature request) |
| Order status | asks where an order, shipment or delivery is | the order arrived wrong (use Wrong or damaged order) |
| Other | fits none of the above; write a few words on why | more than about 5% of conversations land here, which means the list needs a new reason |
A language model can do the tagging at full volume, which is how we do it, as long as it gets the same list, definitions and examples every time and is only allowed to answer with a reason from the list. Then check it the same way you checked the people: compare its labels with a hand-tagged sample. Our post on analyzing Zendesk tickets with AI shows a fixed schema and the checks we run on it; the method is the same for Intercom.
Step 4: count, then rank more than one way
With a reason on every conversation, the count is a group-by. The useful part is ranking it more than one way, because the reason customers raise most is often not the one that costs the most. In the illustrative example below, password and login is the largest reason by volume, at 24.8% of conversations, but bugs and billing each take about a quarter of the team's handling hours.
Illustrative example
Password and login is the largest reason by volume; bugs and billing take the most hours
Six contact reasons from 5,000 made-up conversations, ranked two ways. Left: share of conversations. Right: share of teammate handling hours.
Rank each reason on at least three things:
Volume and trend. Share of conversations this month, and the change from last month. A small reason that doubles is often a release or a policy change.
Cost. Conversations times handling time, from the Teammate handling dataset. This is the list to automate from.
Outcome. The share of each reason that was reopened, rated badly, or passed from Fin to a person. This is the list to fix first. For the conversations Fin closed, check that they were resolved before you trust the count; we explain how in how to check whether your AI agent really resolved conversations.
Product loop
Ask for the ranking in plain English
The agent writes the query, runs it on the tagged conversations and answers with a chart.
Step 5: join reasons to what the business tracks
Contact reasons become more useful once they sit next to account data. Join on the customer or company ID and you can answer questions the inbox cannot:
Plan, tier and revenue from the CRM or billing system. Do your largest accounts write in for different reasons than everyone else? Our Intercom connector brings customer custom attributes such as plan or tier across, so a question like "compare top contact reasons for VIP and non-VIP customers" works without another export.
Renewals and cancellations. Which reasons show up in the months before an account leaves? Our churn risk report walks through that join.
Orders, refunds and product usage. A spike in "order status" contacts that lines up with one carrier, or "how-to" contacts that cluster after a feature launch, points to the team that can fix it.
Product loop
Conversations joined to revenue
Tagged conversations blended with business records, so each reason can be read against revenue and retention.
FAQ
Can I get contact reasons from Intercom's CSV export alone?
Only if your team tags every conversation reliably, because Intercom says the Dataset export CSV contains reporting metadata and not the message content. To read why customers wrote in, you need the transcripts from the API, the bulk export or a connected tool.
How many contact reasons should I have?
Enough that Other stays small and few enough that people can remember them; 10 to 25 is a workable range. Fewer than that and the categories are too broad to act on; many more and tagging stops being consistent.
How far back can I export?
Intercom's article says data is available for up to two years for both CSV and JSON exports.
Dimension Labs connects to Intercom in one click (it is listed in Intercom's App Store), reads every conversation, tags it with your contact reasons and other business-specific Dimensions, and joins the results to your CRM, billing and product data so each reason can be ranked by what it costs and what it does to retention. The agent then builds the reports, dashboards and alerts on a schedule. See the Intercom integration and customer intelligence, or start with one file. Plans start at $299 a month, with no demo or sales call needed.