XeniaXenia Docs

Analytics

PreviousNext

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.

Scope and controls

Every tab reads from the same three controls in the header:

ControlWhat it does
EnvironmentScopes everything to one workspace and environment, such as production
7d / 30d / 90dThe reporting window. Every figure on the page is recalculated against it
LiveShows how recently the numbers refreshed

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.

Tabs

TabCovers
OverviewHeadline performance across the workspace
OperationsWhether the machinery is running: executions, schedulers, ingest, delivery
ChannelsCustomers reached, influenced revenue, and cost per channel
ConversionsWhich sales Xenia can claim, plus personalized content and lift
JourneysOne journey at a time: funnel, failures, paths, and whether it is even trackable
ReviewsTraffic-split changes waiting on your call. Admin and Manager only

Overview

Five headline figures across the top:

KPIMeans
Attributed revenueRevenue Xenia drove, meaning sales it can actually claim
Blended ROASAttributed revenue divided by spend
Attribution rateAttributed conversions as a share of all conversions
Attributed conversionsHow many of the tracked conversions credit a journey
Total tracked revenueRevenue from all conversion sources, credited or not

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.

How attribution works

A conversion is credited to a journey in one of two ways:

  1. Deterministic. The purchase carried the journey link's utm_id, tying the sale to the exact send the customer clicked.
  2. Last touch. No link, but the buyer's identity matched a recent enrollment in that journey.

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.

Operations

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.

Analytics Operator Console

A live snapshot of every analytics subsystem. This is the panel to open when data looks wrong rather than disappointing.

PanelWatch for
IngestEvents in the last hour, with rejected and sampled counts
Outbox depthQueued outbound work and the age of the oldest pending item
DLQ pendingEvents that failed and were parked. Anything above zero deserves a look
AudiencesTotal members currently in scope
Consent mixShare of people granting analytics, marketing, and personalization
Sends blockedMessages stopped in the last hour by a frequency cap or a consent gate
Fanout destinationsPer provider: pushed, skipped, failed, success rate, and last event

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.

Channels

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.

ColumnMeans
SendsMessages dispatched, successful plus queued. Counts messages, not people
ReachedDistinct customers with at least one delivered message or click. One person, once
Conv. rateOf those reached, how many converted inside the attribution window
Influenced rev.Revenue from buyers this channel touched
SpendChannel cost for the window, with its source shown beside the figure
ROASChannel-attributed order revenue divided by prorated spend
ConnectedWhich connector backs the channel, or Not connected

Sends against reached is the useful contrast. Messaging the same small group repeatedly produces a high send count and a flat reached count.

Channel spend and rates

ROAS needs cost, and Xenia takes it from three places in a fixed order of precedence:

Manual monthly spend

Actual spend entered for a month. Overrides everything else, and is prorated onto whichever window you are viewing.

Provider-synced spend

Pulled from the provider, such as Twilio, where the connector supports it.

Rate card estimate

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

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.

Content personalization

Impressions, conversions, conversion rate, and order revenue for each content entry served from your connected CMS.

Personalization lift

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:

BadgeMeans
Significant (95%)The difference is unlikely to be noise. Act on it
Not significant yetA difference exists but has not cleared the bar
Collecting dataToo little traffic so far to say anything

Do not act on lift until it is significant. Early numbers swing hard on a handful of visitors.

Journeys

Execution funnel

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.

Tracking readiness

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:

  • Journey is running, with executions in the window
  • Channel sends are being recorded
  • Enrollments carry a visitor or customer identity for attribution
  • Conversion events are arriving in this environment
  • Conversions are attributed, with the count and revenue behind them

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.

Deep analytics

Per journey: executions, failed executions, success rate, conversion rate inside the attribution window, and directly attributed conversions. Four views sit underneath:

ViewAnswers
Most executed flowWhich route customers actually take
Failing nodesWhere runs break
Failure reasonsWhy they break
Converting nodesWhich steps sit in front of sales

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.

Reviews

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.

ActionEffect
ApproveApplies the proposed allocation
BypassSkips it, with a reason recorded
RejectRefuses the change and keeps current traffic

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.

Data freshness

If it is still missing well after that, work down this list:

  1. The order never reached Xenia. Check ingest and the DLQ in the Operator Console.
  2. It arrived with nothing identifying the customer, so it credits no journey.
  3. Your store calls its order event something Xenia has not been told about. Fix it in the conversion mapping under Storefront setup.