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 Analyze Customer Conversations Alongside Salesforce Data

Which Salesforce objects hold conversations and outcomes, how to join tickets to CRM and billing data on AccountId, and what the joined table shows, on sample data.

To analyze customer conversations alongside Salesforce data, give every conversation the Salesforce AccountId, label each one with the same set of topics, and join the labels to the outcome you care about (a renewal opportunity, an order, an invoice) inside a fixed window before that outcome. Then compare accounts that raised each topic with those that did not, holding plan size and tenure fixed, rather than counting cases. For a team whose conversations live across Service Cloud, a chat tool, call recordings and surveys, and who want that join and the reports built without a pipeline of their own, Dimension Labs is the most direct route: it reads every channel, enriches each conversation with Dimensions for your business, and joins them to Salesforce accounts and opportunities on the Prove plan.

This post is about the Salesforce side of the join: which objects hold what, how tickets meet CRM and billing data, and how conversations link to sales and orders. The worked example uses sample data invented for the purpose. For survey scores matched to Salesforce accounts, see how to join customer feedback to revenue data.

Where do conversations and outcomes sit in Salesforce?

Service Cloud keeps support cases on the Case object, the emails on each case as EmailMessage records, and chat, SMS and WhatsApp messages as ConversationEntry records grouped by a MessagingSession. Outcomes sit elsewhere: renewals and upsells on Opportunity, plan and segment on Account, and money owed or refunded usually in a separate billing system.

Where the data sits

In Salesforce, almost everything a customer said and did meets at the account id

The objects that hold conversations and outcomes, and the field that joins them.

What it holdsSalesforce objectJoins onHow it reaches Dimension Labs
Support casesCaseAccountId, ContactIdWith the case emails, through the universal API
Email threads on a caseEmailMessageParentId (the case id)Universal API, one conversation per case
Chat, SMS and WhatsApp messagesMessagingSession, ConversationEntryMessagingSession id, end user idTranscript export, uploaded as a file
Renewals, upsells, new businessOpportunityAccountIdReport or Data Loader export, uploaded as business data
Plan, segment, ARRAccountIdExport, uploaded as business data
Invoices, refunds, payment failuresYour billing systemBilling customer id, mapped to AccountIdExport, uploaded as business data
From the Salesforce Service Cloud setup and join business data pages in our docs, read 2026-11-11.

Two details decide how clean the join is. First, each case email's Parent.AccountId carries the account, so keep it with the text when you pull the emails. Second, for standard messaging channels, Salesforce creates the message records, apart from the first one, only when the session ends and the agent closes the tab, and for enhanced and in-app channels the message text can be blank or missing. Salesforce points to its Conversation Transcript Export for those, which you then upload as a file with the session id. Our Salesforce integration page lists the fields Dimension Labs reads.

How do I join support tickets with CRM and billing data?

  1. Pick the grain. Renewal questions are about accounts, so the result is one row per account per renewal. Cases, emails and invoices are all summarized up to that row before anything is compared.
  2. Use AccountId as the key. It is already on the case. Never join on a contact's email or name; match the billing system through a billing customer id stored on the Account, or a mapping table, rather than through email addresses.
  3. Label the conversations. One topic list for every channel, so a billing problem counts the same in an email case, a chat and a call.
  4. Set a window. Only conversations in a fixed period before the renewal's CloseDate, such as 180 days, count toward it. A case opened after the account decided not to renew describes the churn; it did not come before it.
  5. Add billing events in the same window. Failed payments, refunds and credits are often the strongest signals, and they sit next to the case topics as extra columns.

In SQL, with the case topics in a table of their own:

with renewals as (
  select AccountId, CloseDate, IsWon as renewed
  from opportunity
  where Type = 'Renewal' and IsClosed = true      -- however your org marks renewals
),
case_topics as (                                    -- one row per case and topic, from the Dimension table
  select c.AccountId, c.CreatedDate, d.topic
  from cases c
  join case_dimensions d on d.case_id = c.Id
)
select r.AccountId, r.CloseDate, r.renewed,
       max(case when t.topic = 'billing_dispute'     then 1 else 0 end) as billing_dispute,
       max(case when t.topic = 'data_export_failure' then 1 else 0 end) as data_export_failure,
       count(t.topic)                                                      as cases_in_window
from renewals r
left join case_topics t
  on  t.AccountId = r.AccountId
  and t.CreatedDate >= r.CloseDate - interval '180 days'
  and t.CreatedDate <  r.CloseDate                  -- conversation before outcome, never after
group by 1, 2, 3;

Three things go wrong often enough to check every time. Joining cases straight to opportunities without summarizing repeats each case once per opportunity and inflates every count. Parent and child accounts split one customer's cases and renewals across records, so roll up to the level where the renewal is signed. And contacts who sit on several accounts, such as a partner managing many customers, put their cases on whichever account the agent picked; look at the accounts with an unusual number of contacts before trusting their rows.

What does the joined table show that case counts don't?

In the sample, 900 accounts raised 5,068 cases in the 180 days before their renewal date. Feature requests were the most common topic, with 1,552 cases, and data export failures the rarest, with 299. Ranked by what goes with a lower renewal rate, the order turns over.

Sample data

Ranked by case count, data export failures come last. Ranked by renewal, they come first

Six case topics on 900 sample accounts. Left: cases in the 180 days before the renewal date. Right: renewal rate of accounts that raised the topic against those that did not, with ARR band and tenure held fixed.

By number of casesBy lower renewal rateFeature request1,552 casesLogin and SSO1,148 casesOnboarding help805 casesBilling dispute719 casesOutage or slowness545 casesData export failure299 casesData export failure19.2 pts lowerBilling dispute11.3 pts lowerOnboarding help8.2 pts lowerLogin and SSO4.1 pts lowerOutage or slowness2.3 pts lowerFeature request1.8 pts lowerBy number ofcasesBy lowerrenewal rateFeature request1,552 casesLogin and SSO1,148 casesOnboarding help805 casesBilling dispute719 casesOutage orslowness545 casesData exportfailure299 casesData exportfailure19.2 pts lowerBilling dispute11.3 pts lowerOnboarding help8.2 pts lowerLogin and SSO4.1 pts lowerOutage orslowness2.3 pts lowerFeature request1.8 pts lower
Sample data generated for this post: the accounts, cases and renewals are invented to show the method, and the numbers are not a finding about any company.

Accounts that reported a data export failure renewed 19.2 points less often than accounts that did not, with ARR band and tenure held fixed; billing disputes went with a gap of 11.3 points. Feature requests, the largest pile of cases, went with 1.8 points, and the interval runs from 7.6 points lower to 4.4 points higher, so the sample cannot tell it from no effect.

Sample data

Three topics have intervals that cross zero; the sample cannot tell them from no effect

How many percentage points lower the renewal rate was for accounts that raised each topic, holding ARR band and tenure fixed. Lines show 95% intervals from 300 bootstrap resamples.

Dashed line: no difference in renewal

Data export failure91 accounts
19.2 lower
Billing dispute234 accounts
11.3 lower
Onboarding help265 accounts
8.2 lower
Login and SSO376 accounts
4.1 lower
Outage or slowness188 accounts
2.3 lower
Feature request523 accounts
1.8 lower
0102030
Sample data generated for this post; invented accounts and cases. Effect is the average change in predicted renewal from a logistic model.

Read the sample as a demonstration of the method: the data was generated to show how the ranking can turn over, not measured from a real company. The method, applied to your own accounts, is what tells you where the renewals are going. Holding plan size and tenure fixed matters because large, long-standing accounts raise more cases and also renew more often, which hides problems if you only count. The full method, with the intervals and the traps, is in which support topics drive churn, and correlation vs causation in customer experience data explains why a raw comparison misleads.

The same join, with the outcome swapped and the window pointing the right way.

  • Open and closed opportunities. For new business and upsells, take the conversations on the account between the opportunity's created date and its CloseDate: questions asked in pre-sales chats, objections on sales calls, support cases from a trial. Compare won and lost opportunities on what was raised. Sales calls recorded in a tool such as Gong come in with the speakers kept apart, so prospects' words can be read separately from your reps'.
  • Orders. When a business sells to consumers, the shared key is usually an order number or a customer id. Conversations after an order (late, damaged, wrong item) explain refunds and repeat purchase; conversations before it explain conversion. Keep the two directions apart.
  • Revenue at risk. Once the topics are on each account, the open renewal pipeline can be filtered by what those accounts raised in the last quarter, so the account team sees which renewals carry a data export failure before the renewal call.

If the question is which requests matter most by revenue rather than which problems cost renewals, the account-level join is the same; how to prioritize product feedback by revenue impact works through it with Intercom and Salesforce.

Can I do this inside Salesforce?

Partly, and for some teams that is the better choice. Salesforce's Conversation Intelligence (formerly Einstein Conversation Insights) analyzes sales and service teams' customer calls, surfaces topics and mentions, and puts details on the activity timeline and in pipeline inspection, with trends across opportunities and reps. If the job is coaching reps on calls and the data stays in Salesforce, it is the simpler option.

Dimension Labs is built for the wider case: conversations from every channel, including ones that never touch Salesforce (chatbots, review sites, surveys, a separate help desk), read with one set of Dimensions you define, joined to Salesforce accounts and opportunities and to billing or product data, with the effect of each topic measured and the results turned into reports for every team.

Why use Dimension Labs to analyze conversations with Salesforce data?

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.

For a revenue or support operations team on Salesforce, that means:

  • Cases, case emails and messaging transcripts from Service Cloud, alongside chats, calls, reviews and surveys from other tools, analyzed as one set of conversations.
  • Opportunities and accounts uploaded as business data and joined on AccountId. The agent works out the join from the shared fields and can show you how many conversations matched and which did not. The join to CRM and revenue data is on the Prove plan ($2,999 a month), with up to 3 sources.
  • Topics, reasons and risk signals written for your product as custom Dimensions (from the Discover plan), the same on every channel.
  • The renewal-risk report, the deck for the QBR and the dashboard for account teams built by the agent and shared as a link you can revoke, or downloaded as PDF or PPTX.

Travelers, a Fortune 100 insurer, uses Dimension Labs to enrich every voice, chat, email, SMS and bot interaction with fields for intent, effort, resolution and escalation, and to compare performance across business units and regions. Its customer story reports 600% ROI within 18 months and $3.13M in total savings, including $2M in avoided BI redevelopment costs. In its words: “Dimension Labs gives us that 50,000-foot view we needed to figure out what’s going on out there.” (Data Science Business Partner, Travelers)

FAQ

What is the best way to analyze customer conversations with Salesforce data?

For conversations from several channels joined to accounts and opportunities, with each topic's effect on renewal measured, Dimension Labs. For call coaching on sales and service calls that stay inside Salesforce, Salesforce's own Conversation Intelligence is the simpler choice.

What key do I use to join support tickets to Salesforce?

The AccountId on the case. For tools outside Salesforce, store the Salesforce AccountId on the company or organization record, or use an order number or customer id that both sides hold. Avoid joining on email addresses.

How far back before a renewal should conversations count?

Pick a fixed window that matches how long your customers take to decide, often one or two quarters, and use it for every account. The sample uses 180 days. Conversations after the decision belong to a different question.

Do I need Data Cloud or a warehouse to do this?

No. Case emails can be sent through the universal API, messaging transcripts and opportunity exports can be uploaded as files, and the join runs in Dimension Labs. If your Salesforce data already lands in Snowflake, BigQuery or Databricks, those connect too.

To try it on your own accounts, export one quarter of cases with their AccountId and your renewal opportunities, and start with one file.

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.