Shopify revenue attribution for customer conversations: how to measure it (2026)
TL;DR: Quick Summary
- Conversation-attributed revenue is the Shopify order value credited to a customer conversation under a stated attribution model and window.
- Shopify's default model is last non-direct click, so an order with no tracked touchpoint is attributed as direct in Shopify's own reports.
- Attribution links a conversation to an order, while incrementality asks whether that order would have happened anyway.
- Start at a 7-day attribution window for support conversations and 30 days for outbound campaigns, then keep whichever you pick fixed.
- Size a holdout from your own conversion rate before reporting lift, because an attributed number alone cannot prove a conversation caused a sale.
Your support and sales teams answer thousands of customer messages a month, and some of those people go on to buy. Finance asks what the channel is worth, and the honest answer is usually a shrug.
So someone builds a report. It says WhatsApp drove $240,000 last quarter, the number gets into a deck, and the first person to ask "over what window?" takes the whole thing apart.
The problem sits upstream of the tooling. Most conversation revenue reports skip the three things that make a number mean anything: which conversation gets the credit, how long the credit lasts, and what would have happened without it.
Shopify leaves it open too. Its reporting was built for click-based channels, and a customer who asks a sizing question on WhatsApp reaches checkout with no click attached.
Below, you'll get the four metrics to track, how to set the model and window, and a worked example showing how far attributed revenue can sit from incremental revenue.
What is conversation revenue attribution?
Conversation revenue attribution is the practice of crediting Shopify order value to a customer conversation that preceded it, using a defined model and a defined lookback window. It answers a narrower question than marketing attribution: not which campaign brought the customer, but whether talking to them was connected to the sale.
It applies in both directions: a customer who messages your support team, and a broadcast or abandoned-cart follow-up you send. The two need different treatment, because only the second can be withheld from a control group.
Why Shopify's own reports miss chat-driven orders
Shopify's marketing reports are built around clicks, and a messaging conversation usually produces none. The result is that genuine chat-driven revenue is either invisible or quietly filed under a channel that didn't earn it.
Last non-direct click, and the 30-day path
Shopify's default attribution model is last non-direct click, and its path-to-purchase view includes marketing touchpoints from up to 30 days before an order.
That works well for a customer who clicks an email, then a paid ad, then buys. It has nothing to work with when the decisive moment was a reply in a chat thread.
Where chat orders go instead
Shopify's own documentation is clear about the fallback: if a customer's journey contains only direct traffic, the order is attributed as direct, and sales attributed to marketing exclude direct traffic entirely.
So the customer who asked about delivery times on WhatsApp, then typed your domain into a browser the next morning, shows up as direct. The conversation that answered their question gets nothing, which is why a conversation attribution layer has to be built rather than switched on.
The four metrics to track
Four metrics cover conversation revenue on Shopify: conversation-attributed revenue, attach rate, revenue per conversation, and incremental revenue. The first three describe what happened after a conversation. Only the fourth estimates what the conversation added, which is the question anyone reviewing the budget will ask first.
The first three are reporting metrics and the fourth is the one that survives scrutiny, so report all four together.
Revenue per conversation is the one people misread most. It rises when you have fewer conversations, so a quarter where self-service deflected half your enquiries will look like a chat performance improvement.
How to choose your attribution model and window
Pick your attribution model and lookback window before you pull a single number, write both down, and don't change them mid-quarter. Match the window to the conversation type rather than setting one figure across everything: support questions get acted on within days, while an outbound campaign deserves the same 30-day lookback Shopify's own path view uses.
Only the 30-day figure is anchored to anything: it matches the lookback Shopify's own path-to-purchase view uses. The other three are starting points, not findings, and your own data should move them once you have a quarter of it.
Shorter windows undercount and longer ones overcount. There is no true window, so pick a defensible one and apply it consistently, which is what makes a change in the number mean something changed in the business.
Two rules are worth holding to. Never let the same order be counted in full by two channels, and never count only the conversations that converted, because attach rate needs the ones that went nowhere in its denominator.
How to separate attributed revenue from incremental revenue
Attribution tells you an order followed a conversation. Incrementality tells you whether the conversation caused it, and the two numbers can sit a long way apart.
Someone who messages a brand has usually already chosen to engage, so crediting their order to the conversation can count intent that was there before you said anything. That is the direction the error normally runs, which is why the attributed figure is the one to treat with suspicion.
The fix is a holdout: for any conversation you initiate, withhold a random, matched slice of the eligible audience and compare. Here is a worked example, using round numbers rather than real customer data.
- 5,000 customers abandon a cart in the month
- 4,500 receive the WhatsApp recovery message, and 450 of them buy, a 10% rate
- 500 are held back and receive nothing, and 30 of them buy, a 6% rate
- The incremental rate is 4 percentage points, so incremental orders are 4% of 4,500, or 180
At an average order value of $80, attributed revenue is $36,000 and incremental revenue is $14,400.
Both are true. Only one of them is what the programme added.
Size the holdout before you trust it
Holdout size is set by your conversion rate and the smallest lift you'd act on, not by a round percentage of the list. The common advice to hold back 10% is a rule of thumb with no statistics behind it, and on a modest list it produces a number that looks like a result and is actually noise.
The example above works because the gap is wide. A 500-person holdout detects a 6% to 10% jump at around 88% power, on a standard two-proportion test at 5% significance with nine contacted for every one held back.
Narrow the lift to something realistic and the picture changes. Detecting 6% against 7.5% at 80% power needs roughly 2,400 people held back, which means an eligible audience near 24,000 before you start.
If your list is smaller than that, run the holdout anyway and pool several months rather than reading one month as a verdict. State the sample size beside the lift so the person reading knows how much weight it carries.
For inbound support you can't run a holdout, and nobody should try, because withholding support to measure it is a bad trade.
Use a matched comparison instead: customers who messaged against similar customers who didn't, matched on order history and recency. It's weaker evidence, so label it that way.
Whichever method you use, keep a small holdout running after the first test rather than calling it and moving on. The gap between attributed and incremental revenue moves over time, and the only way to see which way is to measure again.
How to connect Shopify order data to conversation data
Connecting Shopify orders to conversations means joining three records: the conversation, the customer, and the order. The join key is almost always the phone number or email on the Shopify customer record, which is why a messaging platform that syncs Shopify customers is the shortest route to a working report rather than a spreadsheet job every month.
Step 1: sync Shopify into your messaging platform. Customers, orders and abandoned carts all need to flow in, so a conversation can be matched to the right person.
Step 2: tag conversations at the point they happen. A conversation with no type, owner or campaign tag can't be attributed later, and backfilling tags is guesswork.
Step 3: fire a conversion event on order creation, recording the order ID, the value, the timestamp and the conversation ID it matched to.
Step 4: reconcile against Shopify weekly. Refunds and cancellations change order values after the fact, so a report built on gross value overstates every month.
Pro Tip: Report net revenue after refunds rather than gross order value, and check your own refund rate on conversation-attributed orders against your store average before you assume the two match.
How SleekFlow helps you measure conversation revenue
SleekFlow holds both halves of the join in one place: the Shopify customer, order and cart records on one side, and the conversations your team is having on the other. That removes the export-and-match step most teams do by hand, and it's what makes a holdout test practical to run rather than theoretical.
The Shopify integration syncs customers, orders and abandoned carts one way into SleekFlow, so a contact's order history sits beside the thread they're messaging in. Flows trigger off Shopify events, which is what makes an abandoned-cart holdout practical to run.
On the reporting side, SleekFlow's Analytics dashboards carry custom conversion events and lead source attribution by campaign, so you can define what counts as a conversion and see it by funnel stage.
Worth being plain about the boundary: SleekFlow doesn't publish a revenue-per-conversation metric or set your attribution window. Those stay yours to define, which is the right way round, because they're a business decision rather than a product default.
NNIO, a Singapore electronics and home appliances brand, ran four teams with no shared view of customer conversations and more than half its daily calls going unanswered. It consolidated WhatsApp, Instagram, Facebook and live chat into one inbox, added AI agents trained on its product information, and routed conversations through Flow Builder.
Results:
- Completed checkouts up 20%
- Conversion rate up 5%
- Response time 40% faster
Define it before you report it
A conversation revenue number is only as good as the three decisions behind it: which conversation gets the credit, how long the credit lasts, and what the counterfactual is. Make those calls in writing, apply them for a full quarter, and you'll have a figure that holds up when someone pushes on it.
Start with one conversation type, one window and one holdout. Expanding a measurement you trust is easy, and defending one you don't is not.
Watch a demo to see Shopify order and cart data sitting beside the conversation it belongs to.
Frequently asked questions
How do I attribute Shopify revenue to customer conversations?
Join your conversation data to Shopify orders on the customer's phone number or email, then credit an order to a conversation when it falls inside a lookback window you defined in advance. Record the model, the window and the tie-break rule for orders other channels also claim.
Why doesn't Shopify show revenue from my chat conversations?
Shopify attributes orders using last non-direct click, and a messaging conversation usually produces no tracked click. When a customer's journey contains only direct traffic, Shopify attributes the order as direct, and sales attributed to marketing exclude direct traffic. Chat-driven revenue has to be measured in a layer you build.
What attribution window should I use for customer conversations?
Thirty days for outbound campaigns matches the lookback Shopify's own path-to-purchase view uses. For the rest, start at seven days for inbound support, 14 days for pre-sales questions and three days for cart recovery, then let your own data move them. The number matters less than picking one per conversation type and keeping it fixed for at least a quarter.
What is the difference between attributed and incremental revenue?
Attributed revenue is the order value that followed a conversation inside your window. Incremental revenue is the part that would not have happened otherwise. Attributed revenue is normally the larger figure, because someone who messages a brand has usually already chosen to engage, and only a holdout or matched comparison tells you the size of the gap.
How big should a holdout be for conversation revenue testing?
Size it from your current conversion rate and the smallest lift you'd act on, rather than defaulting to a percentage of the list. Detecting a move from 6% to 7.5% at 80% power needs roughly 2,400 customers held back. If your audience is smaller, run the holdout anyway and pool several months before calling a result.