Skip to content
Product
PlatformPricingDimensionsIntegrationsSecurityCompare
Solutions · by use case
Customer, guest and fan experienceProduct feedback and prioritizationRevenue, churn and retentionAgenciesContact center performanceAI agent and chatbot analyticsMulti-location performanceReviews and competitive benchmarking
Solutions · by industry
Hotels and hospitalityRestaurants and food serviceFitness and leisureRetail and e-commerceSports and live entertainmentInsuranceBanking and financial servicesSoftware and SaaSAutomotiveConsumer products and CPGContact centers and BPOsPublic sector and nonprofitReal estateGaming and betting
Learn
Artifacts GalleryCustomer storiesResearchBlogThought leadershipLessons Log in Start now
Blog

How to Follow One Customer Across Intercom, Zendesk and Surveys

Give Intercom, Zendesk and your survey the same customer ID, match older records on a cleaned email, and put every touch in one timeline. Worked on sample data, with SQL.

To see one customer's full history across Intercom chats, Zendesk tickets and NPS responses, give every system the same customer key (your own customer ID, stored as Intercom's external_id, Zendesk's external_id and a hidden field in the survey link), match older records on a cleaned email or phone number, and load everything into one timeline with a row per touch. Then you can read any customer's chats, tickets and scores in order, and ask what happened before a detractor answered. For a CX team that wants this across every channel, enriched with the same Dimensions and turned into reports other teams use, Dimension Labs is built for it: it brings Intercom, Zendesk and survey data into one layout and reads every record the same way.

Below: which ID each tool holds, the matching order that recovers the most people, how to build the timeline, and a worked example on sample data generated for this post.

Which ID does each tool hold for the same customer?

Each tool creates its own ID for a person and leaves room for yours. In Intercom, a contact's id is "given by Intercom" and its external_id is "given to Intercom", meaning the ID your product uses. Zendesk has the same pair: a user id assigned on creation, and an external_id described as "a unique identifier from another system", unique per account. Surveys carry whatever you put in the invite link. Public reviews carry no customer at all.

From each vendor's documentation

Each tool keeps its own ID for the customer, and each has a field for yours

The fields that can tie one person's records together, by source.

SourceField for your customer IDFallback keysWatch for
Intercomexternal_id (Intercom keeps its own id as well)email, phoneContacts with role lead have often typed an email but have no external_id
Zendeskexternal_id, unique per account (Zendesk keeps its own user id as well)email (secondary emails added on update), phone in E.164Tickets from an unknown address create a new user
Survey toolA hidden field or embedded data value passed in the invite linkThe respondent's email, if collectedAnonymous links carry no ID at all
Public reviewsNoneLocation onlyJoin on location, not on the customer
Intercom: the Contact model. Zendesk: Users API. Both read 2026-11-10. Survey row from our Qualtrics integration listing (embedded data); reviews row from how to combine reviews, surveys, tickets and calls.

The field to standardize on is the one your product or billing system already uses for a customer. It does not change when someone updates their email, and it is the key to the rest of the business: plan, orders, renewals.

Set the ID at the source for new records, then match the history in order of reliability.

  • Intercom: send your customer ID as the user's external_id when the messenger loads for a signed-in user. Visitors who chat before signing in become leads; they often type an email, which is your fallback.

  • Zendesk: set each user's external_id, either from your sign-in integration or with a nightly job that looks up the requester's email in your customer table. A ticket from an address Zendesk has not seen creates a new user without one.

  • Surveys: add the customer ID to the invite link as a hidden field or embedded data value. Responses then arrive already keyed and never need matching.

For the history, match from the most reliable key to the least: the external ID first, then the email exactly as stored, then the email cleaned (lower-cased, trimmed, with any +alias removed), then a phone number in one format. Record which key made each match, so you can check later whether email-matched records behave differently.

The rungs matter most for the help desk. In our sample, a fictional subscription business with 4,000 members, external IDs cover 84.3% of NPS responses and 68.0% of Intercom chats but only 40.6% of Zendesk tickets, because the help desk was added after the product. Exact email lifts Zendesk to 71.5%, cleaned email to 95.6% and phone to 97.1%.

Sample data, generated for this post

Matching Zendesk tickets on the external ID alone finds 41% of the people; three more keys take it to 97%

Share of 868 Zendesk tickets matched to a member, adding one key at a time. Fictional subscription business.

External ID only
40.6%
+ email as stored
71.5%
+ email, lower-cased, trimmed, alias removed
95.6%
+ phone number
97.1%
0255075100
Sample data generated for this post (fixed seed), not any company's figures. In the sample, external IDs exist only where the help desk sign-in sync was set up, which is how the sample was set up.

Your rates will differ, but the order holds in most stacks. The 7.6% of chats that never match in the sample are anonymous visitors who left no email; count them as their own group rather than dropping them, because they are often prospects with a pre-sales question. The same ladder, applied to revenue and order data, is in how to join customer feedback to revenue data.

How do you build one timeline for each customer?

Use one table with a row per touch: the customer key, the channel, the record ID, the timestamp, the text and any score. Chats, tickets and survey answers all fit the same columns. Store timestamps in UTC; Zendesk, Intercom and most survey tools export in different time zones, and a few hours can flip the order of a chat and the survey it triggered.

With the table in place, a customer's history is a filter and a sort, and the useful questions are joins of the table to itself:

-- one row per touch, every source in the same columns
create table touches as
select customer_key, 'intercom' as channel, conversation_id as record_id,
       created_at, null as score, first_customer_message as text
from intercom_conversations_keyed
union all
select customer_key, 'zendesk', ticket_id, created_at, null, description
from zendesk_tickets_keyed
union all
select customer_key, 'nps', response_id, answered_at, score, comment
from nps_responses_keyed;

-- what happened in the 30 days before each detractor answered
select n.customer_key, n.score, t.channel, t.created_at, t.text
from touches n
join touches t
  on t.customer_key = n.customer_key
 and t.created_at between n.created_at - interval '30 days' and n.created_at
 and t.channel <> 'nps'
where n.channel = 'nps' and n.score <= 6
order by n.customer_key, t.created_at;

Three checks keep the timeline honest. Look for customer keys with an implausible number of touches, which usually means a shared inbox or a test account. Check Zendesk users with more than one email, since Zendesk adds a secondary email on update rather than replacing the first. And keep agent replies in the table but mark them, so you can read the customer's side alone.

What does the joined view show that each tool alone cannot?

Who the unhappy customers had already talked to. In the sample, 58.3% of detractors had used chat or email support in the same quarter, against 36.6% of promoters, and 15.7% had used both, against 4.6%.

Sample data, generated for this post

Detractors were more than three times as likely as promoters to have used both chat and email support

NPS respondents in one quarter, by score group: share with any Intercom chat or Zendesk ticket that quarter, and share with both.

Any chat or ticketBoth a chat and a ticket

Detractors0 to 6, 465 responses
58.3%15.7%
Passives7 to 8, 467 responses
43.7%6.4%
Promoters9 to 10, 568 responses
36.6%4.6%
Sample data generated for this post (fixed seed). Only visible once chats, tickets and survey responses share one customer key.

A team reading Intercom alone would see 45.6% of the detractors in its own tool, and a team reading Zendesk alone 28.4%. Neither could tell that the customers who moved from chat to email were the least happy, which points to a hand-off problem rather than a product one. Once the touches are joined, reading what those customers wrote in each channel, with the same labels, says which hand-off.

This is where the timeline pays for itself: the score says who is unhappy, the sequence says where it started, and the text says why. For counting how many customers each issue touches, rather than how many records, see step 5 of how to combine reviews, surveys, tickets and calls.

How does this look in Dimension Labs?

Intercom is a one-click connector, and its customer attributes come across with each conversation, including custom attributes such as plan, tier and location. Zendesk tickets arrive through the universal API from a small script you run; the Zendesk docs page maps the requester to the customer field and passes the organization ID, which lets you join to account data. If your Zendesk users carry an external_id, send that as the customer field instead, and tickets and chats land under the same person. Survey files and CRM exports load as files. Do the email matching on your side and send the resulting customer ID; where email is the only shared key, send the same hash of it from every source, never the raw address.

Covered California shows the same idea inside one journey. Its chatbot sessions are enriched with "journey stage, intent, escalation triggers, containment outcome, and drop-off location", and the team can now "map full consumer journeys across chatbot flows", in English and Spanish alike.

Why does Dimension Labs suit a team stitching chats, tickets and surveys together?

Dimension Labs is an omni-channel analytics agent for customer data. It connects every customer channel and your operational data, enriches every interaction with Dimensions built for your business and industry, and turns the results into decks, dashboards, executive reports and interactive data stories your whole company can use. Plans start at $299 a month with no demo.

  • Fully omni-channel. Intercom chats, Zendesk tickets, survey answers, calls and reviews go into one conversation format, each with its channel kept, so one customer's touches line up.

  • Easy integration. Intercom in one click, Zendesk through the documented universal API script, and your customer table as a context file, free up to your plan's limit. Joining the stitched history to CRM, billing and renewal data is on Prove ($2,999 a month) and up.

  • Effortless enrichment. Every chat, ticket and comment is tagged with the same Dimensions, such as the issue, whether it was resolved and whether the customer was handed between channels, so a problem reads the same wherever it surfaced.

  • A new visual analytics layer. The agent builds the journey views, decks and dashboards from the joined data and shares them by link with support, product and success teams.

Dropbox enriches its bot and live-agent conversations with Dimension Labs, giving it "a consistent analytical schema across bot and live-agent interactions". In the words of Maureen O'Sullivan, Program Manager at Dropbox: "Dimension Labs is key for us to both report outcomes to the business and prioritize where to dedicate resources to enhancing our customer journey."

FAQ

How do I see one customer's full history across Intercom, Zendesk and NPS?

Put the same customer ID in all three (external_id in Intercom and Zendesk, a hidden field in the survey), match older records on cleaned email, and load every touch into one table sorted by customer and time.

Can I match on email alone?

For a first pass, yes, if you lower-case and trim it and remove +aliases. It misses customers who use a different address with support, so add your customer ID at the source for new records.

What is the best tool to follow customers across support and survey channels?

For a team that needs chats, tickets, surveys and calls read with one set of Dimensions, tied to the same customer and turned into journey reports, Dimension Labs. If you only need a customer's recent tickets while answering one, the help desk's own customer view is simpler.

We only use Intercom and one survey tool. Is that enough to start with Dimension Labs?

Yes. Connect Intercom, upload a survey export with the customer ID column, and add Zendesk or call data when you are ready. Two channels and one key already show who was unhappy and what they asked first.

See the Intercom integration and the Zendesk integration, or start with one file from each channel. Plans start at $299 a month with a 14-day free trial.

Dimension Labs/Start with one file From $299 a month

Stop reporting. Start understanding.

Start with one file. Ask why a number moved. Plans from $299 a month, no demo and no contract on monthly plans.