See what your journeys sent, what they earned, and where customers dropped off.
Analytics answers two different questions: is everything running, and is it working. Those are separate tabs because they go wrong separately. A journey can run flawlessly and still sell nothing.
Every tab reads from the same three controls in the header:
Storefront setup in the tab bar is where you get what you need to connect a non-Shopify site, plus the advanced conversion mapping described under Conversions.
The 7d/30d/90d selector controls the period you are looking at. How long Xenia will credit a sale after a touch is a separate attribution window, and the two differ per tab. Each panel states its own.
Five headline figures across the top:
The pair that matters is attributed revenue against total tracked revenue. The first is what Xenia claims, the second is everything it saw. A large gap is normal early on and usually means identity, not lost sales. See Attribution needs identity.
Blended ROAS reads Add channel spend to unlock ROAS until you enter costs. It cannot be computed from revenue alone, so this stays blank until you fill in Channel spend and rates.
Below the KPIs sit the enrolled versus converted trend, revenue split by channel, the top revenue-driving journeys, and storefront variant ROI, which is credited last-touch inside the attribution window.
A conversion is credited to a journey in one of two ways:
utm_id, tying the sale
to the exact send the customer clicked.Both are "because of this journey". Separately, Xenia reports an influenced or cohort figure: of everyone the journey reached, how many bought inside the attribution window. That one is multi-touch, so a single buyer credits every node and every channel that reached them.
Keep the two apart when you compare numbers. "Because of this journey" and "was also reached by this journey" are different claims, and the second is always bigger.
A sale that arrives with neither a journey link nor a recognizable buyer cannot be tied to a journey. The revenue still counts in total tracked revenue, it just credits nothing. See Connect your website for how to send orders so they are credited properly.
The health tab. Nothing here is about revenue.
Top row covers active journeys, median approval SLA from submit to decision, scheduler reliability, and how many connectors are live. Below that, executions over time separates started from failed, a status mix donut breaks journeys into draft, pending approval, approved, active, and stopped, and scheduler health reports healthy against errored jobs.
A live snapshot of every analytics subsystem. This is the panel to open when data looks wrong rather than disappointing.
Two of these explain most "my journey did not send" reports. Sends blocked catches
suppression that is working as designed, and the fanout destinations table shows
Not configured against any provider you have not connected, which is why its events
show as skipped rather than failed.
Distinct customers reached per channel, and how many converted inside the attribution window. This view is multi-touch: a buyer credits every channel that reached them, so the column will not sum to your order count.
Sends against reached is the useful contrast. Messaging the same small group repeatedly produces a high send count and a flat reached count.
ROAS needs cost, and Xenia takes it from three places in a fixed order of precedence:
Actual spend entered for a month. Overrides everything else, and is prorated onto whichever window you are viewing.
Pulled from the provider, such as Twilio, where the connector supports it.
Sends multiplied by the unit cost you set per channel. Used only when no synced or manual figure exists.
Set unit costs under Channel spend & rates and save them, then optionally enter a real monthly figure to override the estimates. Rows using an estimate or an entered figure are labelled, so a suspicious ROAS can always be traced back to which of the three produced it.
Conversions from every connected source, meaning Shopify, your storefront SDK, and journey events, credited to a Xenia impression on the same visitor within a 24 hour view-through window. Note that this is shorter than the multi-day window used for journey and channel attribution.
The tab reports total conversions against attributed conversions, the resulting attribution rate, and attributed revenue, with a chip per source showing how much each one contributed.
Impressions, conversions, conversion rate, and order revenue for each content entry served from your connected CMS.
The honest measurement. A random share of eligible visitors, 10% by default, is held back and shown the default content instead of the personalized variant. Lift is the difference in conversion rate between the two groups, which makes it a causal read on the personalization rather than a correlation.
Each row carries its statistical state:
Do not act on lift until it is significant. Early numbers swing hard on a handful of visitors.
Enrolled, in progress, and completed, with completion rate and average execution time alongside. Anyone who left early is broken out as failed or stopped. Clicking a stage drills into the journeys that flow through it.
Before reading any journey's numbers, read this checklist. It is the difference between a journey that is not working and a journey you cannot measure:
Each check shows green, amber, or red with the reason attached. A red on identity or conversion source means fix the plumbing first, because the conversion figures below it cannot be trusted yet.
Per journey: executions, failed executions, success rate, conversion rate inside the attribution window, and directly attributed conversions. Four views sit underneath:
Path breakdown takes one observed path, such as the branch where an email fires after a delay, and reports runs, node failures, and conversions for only the customers who walked it. Sort by volume or filter to an end node.
Trending journeys ranks the busiest journeys in the window and labels each one
Converting, Tracked, no conversions, or No data. That middle label is the one to
investigate: it is running and measured, and still not selling.
A human gate over automatic traffic-split changes. When a multi-armed bandit proposes shifting traffic between variants, the change waits here rather than applying itself.
Each proposal shows the bandit and journey it belongs to, how large the shift is in percentage points, who proposed it and when, and a per-variant table of current allocation, proposed allocation, the change, and P(best), the probability that the variant is the winner.
Counters across the top track pending, approved, bypassed, and rejected proposals plus the median pending age, and a histogram buckets how long things have been waiting. Use Bulk approve only when you have read the individual shifts, since a large pp change moves real traffic.
Results are not live to the second. A conversion usually shows up a few minutes after it happens, so checking straight after a test send and seeing nothing is normal rather than a missing sale.
If it is still missing well after that, work down this list: