Marketing · Flows
Flow analytics
How to read a flow's figures: activations, contacted runs, goal rate, conversions, revenue, cost and the flow report.
A flow runs on its own, so its figures are how you find out whether it does its job: how many contacts entered, how many the flow actually wrote to, how many reached the goal and what that brought in compared with what the messages cost. The panel shows those figures in three places: a row of headline numbers above the canvas of every published version, the counters on each step, and the Flow report, which breaks everything down by message, person, conversion and day. The flows list repeats the main figures for every flow side by side.
The one idea to keep in mind while reading them is that a flow's figures don't all count the same thing. Some count runs (each pass of a contact through the flow), some count people, and some count messages, and they can't be divided into each other. The first section explains that model; the rest of the page goes figure by figure. This page covers the figures of a single flow. To read results across all your campaigns and automations, see Analytics; how sales are credited to messages is configured in Conversions & attribution.
Three units: runs, people and messages
Every time a contact enters a flow, a new run starts. A contact who abandons two carts in a month enters an abandoned-cart flow twice, so there are two runs for one person. And a single run can send several messages: a first reminder, then a second one a day later. So one person can stand behind several runs, and one run behind several messages.
The panel keeps those three units apart, and every figure belongs to exactly one of them:
| Unit | What it counts | Figures that use it |
|---|---|---|
| Runs | Each entry into the flow. A contact who enters twice counts twice. | Activations, Contacted, goals met and Goal rate, the conversion rate per activation, Entries on each step, the share shown on each branch, Runs per person |
| People | Distinct contacts, counted once however many times they entered. These are estimates and carry a ~. | The report's Audience tab (Entered, Messaged, Engaged, Goal met, Converted, Unsubscribed), "~N distinct people" in the summary, the people columns of the list's Audience view |
| Messages | Each message the flow sent, on any step. | Sent, Delivered, Delivery rate, CTR, CVR, EPM, cost per message, the unsubscribe rate |
Two consequences follow, and the panel's own descriptions repeat them:
- Figures in different units are never divided into each other. "~170 distinct people" next to "200 activations" means some people entered more than once; it isn't a rate. Likewise, people who received a message aren't compared with goals, which count runs.
- Per-message rates aren't comparable between flows with a different number of sends. A flow with three reminders sends three messages per run, which triples its sent and delivered figures and changes what its CTR means. To compare how well two flows work, use the figures counted per run (Goal rate and conversions per activation) rather than CTR or CVR.
Money figures (Revenue, Cost) are amounts, not counts, and are explained in Revenue, conversions and ROAS.
The figures on a published version
Figures only exist where contacts have run through the flow, so they appear when you open a published version: the Live tab, the live test's tab (Live with 10%), or a version from Archived versions in the archive box. The Build tab is the draft and never shows figures. What you see is always the figures of the version on screen; the report can also show the whole flow.
The KPI row
Above the canvas, a row of headline figures sums up the version over the Period, read from left to right:
| Figure | What it shows |
|---|---|
| Period | The stretch of time every figure to its right covers: 30 days. Its tooltip gives the exact dates. Next to it, a refresh control shows how fresh the figures are (see below). |
| Activations | "How many contacts actually entered the flow, even when the first step was a delay, a branch or a skip. It is not the number of messages sent." These are runs. |
| Contacted | Runs where the flow has already sent at least one message, counted when the message goes out, not when it is delivered. It shows the count and its share of the activations. |
| Goal | Runs that met the goal after the flow had sent them a message, and the goal rate next to it. Without a goal it shows "—", and its tooltip says the flow has no goal. See Goal rate. |
| Conversions | "Purchases attributed to this flow in the window." |
| Revenue | The sum of the order amounts of those conversions. |
| Cost | "Total spend on this flow — the sum of per-message costs across every message sent." |
| ROAS | "Return on ad spend: profit divided by what the messages cost." |
| View report | Opens the Flow report. |
The three figures in the middle form a funnel, each one inside the previous: runs that entered, runs the flow wrote to, runs that met the goal. The money figures to their right belong to a different family: they come from attribution, so a Goal at 100 % next to a Revenue with nothing in it is not a contradiction (see Revenue, conversions and ROAS).
How to read the row:
- It shows no comparison with the previous period. Figures per version have no previous period to compare with; changes over time are in the report, with Whole flow selected.
- "—" means "nothing to show": either the figure hasn't been measured yet, or it is zero. A rate whose base is zero also shows "—", never 0 %.
- "Not applicable" replaces Revenue and ROAS when the flow's goal isn't your project's sales event (or the flow has no goal) and no sale has been attributed to it: "Revenue figures would be misleading here, so they are not shown." Cost always shows. As soon as a sale is attributed, revenue appears, whatever the goal.
Freshness. The KPI row is calculated in the background and is a snapshot, not a live count. The control next to Period says when it was computed ("computed …"), whether the flow has had activity since ("new activity since this was computed"), and when the next refresh is due. Refresh stats recalculates it on demand; after using it, the button rests for a few seconds ("Available again in … s"). On a flow nobody has opened for a while, it can read "No refresh scheduled; it restarts when the flow is opened."; opening the flow schedules it again. A version that has just been published can read "not computed yet" until the first calculation.
The pill "N inside now" on the canvas is a live count that covers the version's whole life, so it can disagree with this row for a while; see Monitoring a flow.
Counters on each step
Each step card on the canvas carries its own counters:
- Entries, on every step: runs that reached the step. "Executions, not people: someone entering twice counts twice."
- On Send message steps, also the step's Sends (messages that reached a final status), its click rate and its attributed revenue. Sends can trail Entries: a run that has just reached the step has entered it but hasn't sent yet.
- Goals, only when the step has recorded any: "Times this step recorded the flow's goal. One per run at most."
- The live count of people waiting at a step, explained in Monitoring a flow.
Branch shares. On a split, each branch label carries the share of runs that took it, for example Spain · 62% and Otherwise · 38%. The share is calculated over the contacts that have already chosen a branch at that step: the runs that reached the first step of the branch divided by the runs that have already taken one of the branches, so it counts runs, not people. The shares of a split add up to at most 100 %, and to a little less when some runs end before choosing a branch, never more. A branch with no steps in it, or that nobody has taken, shows its name without a percentage.
The step's Metrics tab
Select a step on a published version and its side panel opens on two tabs, Metrics and Configuration. Metrics has the step's figures in more detail. Its title says what they cover: Last 30 days, or Version total when no daily detail is available for the period.
- Entries, with a chart of how many runs reached the step each day and how those runs ended at it: Entered, Completed, Skipped, Failed, Canceled and Stopped. Only the outcomes that happened at least once are drawn. What each outcome means for a contact is explained in Monitoring a flow.
- Waiting ("right now"), Goals (when the step recorded any) and Last run.
- On a Send message step: Sends, Delivery rate (with delivered out of sent), CTR (with the number of first clicks), Open rate, Revenue and Unsubscribes. Open rate is only measured on channels that report reads, such as RCS; on SMS it stays at "—".
- Recorded reasons, "Since the version was published", only when there are any. They aren't a breakdown of skips: a reason is also recorded on steps that completed.
- See in report opens the flow report on its Messages tab.
Goal rate
The goal rate is the flow's success figure: of the runs the flow wrote to, the share that met the goal.
Goal rate = runs that met the goal ÷ runs that were sent at least one message (Contacted)
Both sides count runs, and both start counting when a message goes out, so they measure the same population. That has three consequences:
- It never goes above 100 %. A run counts at most one goal, and only after a message. Right after a burst of activity, the report can briefly show "rate capped at 100%": a goal was counted just before its own run reached the denominator. It normally closes by itself within minutes.
- Goals reached before any message stay out of it. A contact who buys during the first wait of an abandoned-cart flow leaves the flow, but the flow didn't write to them and takes no credit. The report lists those runs separately, as "before any message". They are a second group, not part of the Goal count: Goal is the goals met after the flow sent something, and "before any message" the goals met before it. The two never overlap.
- Without a goal there is no rate. The list reads No goal set, the report No goal declared, and the KPI row shows "—" with a tooltip that says so; never 0 %. The goal is set in the draft, in the trigger's Goal & exit tab or with a Goal reached step.
When a goal counts, and how to make it stricter (only on delivery, only on a click), is explained in Goals and exits.
For example, an Abandoned cart flow starts with a Smart delay, sends an SMS, waits a day for a click and sends a second reminder to those who didn't click. Its exit event Order created is also its goal. In the last 30 days:
flowchart LR
A["Activations: 200 runs"] --> C["Contacted: 150 runs, 75 % of activations"]
C --> G["Goal: 30 runs, goal rate 20 %"]
A --> B["40 runs bought during the first wait: before any message"]
A --> W["10 runs still in the first wait"]
class G success
The goal rate is 30 ÷ 150 = 20 %. The 40 customers who bought before the first SMS left the flow without receiving it, which is the exit event doing its job, but they don't raise the rate. The 10 runs still waiting will move into Contacted when their SMS goes out.
Revenue, conversions and ROAS
A flow's money figures come only from attribution, the same mechanism that credits sales to campaigns: a purchase is credited to the flow, and to the version that sent the message, when it arrives after one of the flow's messages, within your project's attribution windows. What counts as a sale and how long each window lasts are set in Conversions & attribution, and they apply to flows and campaigns alike. The window opens when the message is delivered. Which data sources count their orders as sales is explained in Conversion sources; the flow report, the campaign report and the project dashboard count the same orders as the totals.
What follows from that rule:
- No message, no attribution. A contact who buys before the flow sent them anything brings no revenue to the flow, even if they entered it.
- Goals and conversions are different numbers, on purpose. A goal carries no money, and a conversion doesn't depend on the goal. A run can meet its goal with no sale attributed (in the example above, a customer who bought on day two without clicking may fall outside the attribution window yet still count as a goal, because the run was still inside the flow), and a flow with no goal at all can have attributed sales.
- One run can bring several purchases. Conversions count purchases, not runs.
The figures, one by one:
| Figure | How it is calculated |
|---|---|
| Conversions | Purchases attributed to the flow in the period. |
| Revenue (Sales in the list) | The sum of the order amounts of those purchases. |
| Conversion rate (report) | Attributed purchases ÷ runs that entered. Both count per run, so more sends don't lower it. It can pass 100 %, because one run can bring several purchases; it is then shown capped. In the list, Conv. per activation is the same figure, capped at 100 %. |
| Revenue per activation | Revenue ÷ activations. A flow has no recipient list, so activations are its denominator. |
| Average order value | Revenue ÷ conversions. |
| Cost | The sum of the cost of every message the flow sent, including those still queued: they are charged and do go out. |
| Cost per message | Cost ÷ messages sent. |
| ROAS | Profit ÷ cost of the messages, shown as a multiple (for example 8.50x). Profit is what your Conversion settings define as profit, not the order amount. |
| EPM | Revenue ÷ messages sent. A per-message figure. |
| CVR | Conversions ÷ delivered messages. A per-message figure. |
Two more figures are worth knowing:
- Sent counts messages that reached a final status. A message still queued or on its way isn't in Sent yet; it appears once it is delivered or fails. Right after a send, a step can show entries and no sends for a short while.
- Unsubscribes from this flow counts opt-outs made from one of the flow's messages (its unsubscribe link or a reply to it). Opt-outs made in the panel, through the API, by hand or from an integration carry no trace of the flow that caused them, so no flow counts them.
The links in a flow's messages also carry the flow's name as their campaign tag, so you can follow them in your web analytics tool; see Rename a flow. Each message a flow sends is charged like any other; see Sending messages.
The flow report
View report, at the end of the KPI row, opens the Flow report: "Performance, conversions and activity attributed to this flow." See in report, on a step's Metrics tab, opens it on the Messages tab.
At the top of the report:
- Scope: This version (the version you had open, with its tag, for example v1) or Whole flow (every version together). Comparisons with the previous period are only shown for Whole flow.
- Period: 30 days by default. You can select another period or a custom range; anything other than the default is calculated on demand, so it only runs when you select Apply. If you request several custom ranges in a row, the panel asks you to wait a moment ("Too many custom-range requests…").
- Freshness: when the figures were computed, or "computed just now" for a range you just applied.
The report has five tabs, always all five, and it opens on Summary. A flow that hasn't run yet shows them with "—", so you can see what will be measured.
Summary
- Results: the funnel Activations → Contacted → Goal, "Three counts, each inside the
previous one… All count runs, not people." Under it, the goal being measured (Goal:
followed by the event, "set on a step in the flow" for a Goal reached step, or No
goal declared), and up to four notes:
- "N before any message": goals reached before the flow sent anything. The percentage next to it is over all the goals met, the ones after a message (Goal) plus these: with 6 "before any message" out of 9 goals met in total, it reads 67 %. It is not a percentage of activations, and the Goal count doesn't include these goals. In a flow that starts with a wait, this is usually a large share, and that is expected.
- "~N distinct people": the people behind the activations of the period, as an estimate. It isn't divided by the runs.
- "still in progress": some runs haven't finished, so the rates can still move.
- "rate capped at 100%": see Goal rate.
- Return: Revenue ("from N purchases"), Flow cost (with the cost per message) and ROAS. With Whole flow, "vs previous period:" shows how revenue, cost and ROAS changed.
- Messaging: Messages sent (with how many per activation), Delivery rate (with how many were delivered) and Unsubscribes. "Counted per message, not per person: a flow with three sends triples all three figures."
- Live test vs Live, while a live test runs next to Live; see Live test vs Live.
Messages
The messages tab answers whether the sending worked, always per message:
- Delivery: Messages sent, Delivery rate, Cost per message and Unsubscribes, with the reminder that these figures are per message and not comparable between flows with a different number of send steps.
- Engagement over time: a chart, day by day, of what happened to the messages: deliveries, clicks, conversions, unsubscribes, goals and replies, among others.
- Send steps: the same figures for each Send message step, so you can see which message performs. A row No step may appear: "Events attributed to this flow with no step reference. This is valid data, not an error."
- Channels and Countries: how the messages split by channel and by destination country. An RCS message that falls back to SMS counts as SMS.
- Link activity and Click performance by step and URL: People clicked, Total clicks, click rate and Didn't click, then each link of each step with its unique clicks, total clicks and CTR. A link marked Parametrized carries variables, so every contact gets a different link and its CTR isn't representative. Links from other versions are marked Another version.
CTR in a flow counts first clicks per link, divided by delivered messages. It is a per-message figure, not the share of people who clicked; for people, see Engaged in the Audience tab.
Audience
-
Unique people: each contact counts once, however many times they entered. All six figures are estimates (~).
Figure Meaning Entered Distinct people who entered the flow. Messaged People who actually received (were delivered) a message from the flow. Engaged People who clicked at least once. It only counts when the message offered somewhere to click, so a flow without links can work very well with this at zero. Goal met People who met the goal after the flow sent them a message. Converted People with a purchase attributed to the flow, whatever the goal. Unsubscribed People who unsubscribed right after one of the flow's messages. -
Runs and people: Runs, People and Runs per person on average. Above 1 means re-entries, which is normal in abandoned-cart or restock flows: "That is 200 runs from 170 people: some enter more than once."
-
Message history: the messages sent, contact by contact, with channel, country, status and dates. You can search it by mobile number and filter it by status or country, which is the quickest way to check whether one contact's message was delivered. It doesn't refresh on its own: reload the report to see newer sends.
Conversions
Conversions attributed to this flow: the Conversion rate (with "N of M activations"), Conversions, Revenue, Average order value and Revenue per activation, with the reminder that "A purchase counts when it arrives after one of this flow's messages, inside the attribution window." The Conversion detail table lists each attributed purchase: the contact, the event, the order, the amount, when it converted, the channel and the country.
Activity
A feed of what contacts did with the flow during the period, one event at a time: who entered, who clicked for the first time, who placed an order. It follows the report's period. To check one contact's run step by step, or why someone didn't enter, use the Activity sheet in the flow header instead; see Monitoring a flow.
Live test vs Live
While a live test runs next to Live (a version published to a small group, see Testing, publishing and versions), the report's Summary shows the block Live test vs Live. It compares the two versions over the same window, which starts when the live test was published. The comparison runs two live calculations, so it is only made when you ask: select Compare, and Recalculate to update it later. When no live test is running, the block says so.
It compares Reached (runs the flow wrote to), Goal rate, Conversion rate, Revenue and ROAS. Reached, Goal rate and Conversion rate each carry a verdict:
| Verdict | Meaning |
|---|---|
| Significant improvement | The live test does better, by more than chance would explain. |
| Significant drop | The live test does worse, by more than chance would explain. |
| No clear difference | The difference could be chance. |
| Not conclusive (unbalanced) | The test didn't get its expected share of traffic, so the percentages aren't conclusive; the raw numbers still stand. |
| Not enough sample | There aren't enough activations on each side yet; the block says how many are needed. |
Revenue and ROAS are amounts, not proportions, so they have no significance check: the difference is shown raw, marked "no confidence check".
Three things to keep in mind:
- Early on, Live is favoured. The window counts events by date, including conversions from contacts who entered Live before the test started. Message figures such as CTR are barely affected. Give the test time before reading conversions.
- Different goals aren't comparable. If the two versions declare different goals, their goal figures answer different questions; the block warns about it, and delivery and clicks remain comparable.
- It is real traffic. Both sides send, charge and convert, and both count in the flow's totals.
For example, the store tries a new first SMS for Abandoned cart with a discount code, published to a small group. After two weeks, Compare shows the live test with a higher goal rate marked Significant improvement, and revenue up but with "no confidence check". The team promotes the test to everyone, as explained in Testing, publishing and versions.
In the flows list
The flows list shows the main figures for every flow in columns, grouped by saved views (Default view, Engagement, Sales, Audience, Goals, Set up); how to switch views and columns is explained in Managing flows. Every metric column covers the last 30 days, which its description says in the menu on its header. The per-message rates (CTR, CVR, EPM) add: "Per message, not per contact: a flow can send several to the same person, so this is not comparable between flows with a different number of send steps." A — in a metric cell is not a zero; why is explained in Managing flows.
| Column | Unit | Meaning |
|---|---|---|
| Activations | Runs | Times the flow started. Someone who enters twice counts twice. |
| Contacted | Runs | Runs that were sent at least one message. |
| Goals met | Runs | Runs that met the goal after a message. One per run at most. |
| Goal rate | Runs | Goals met ÷ contacted. No goal set when the flow has none. |
| Goal | — | The goal definition: the goal events, Goal step in the flow, or No goal set. |
| Conv. per activation | Runs | Attributed purchases ÷ activations, capped at 100 %. |
| Messages per activation | Runs | Messages sent on average each time the flow started. |
| Sent, Delivered, Delivery rate | Messages | Messages that reached a final status, those delivered, and delivered ÷ sent. |
| CTR, CVR, EPM | Messages | First clicks per link ÷ delivered; conversions ÷ delivered; revenue ÷ sent. |
| Unique clicks | Messages | First clicks on each link. |
| Unsubscribes from this flow | Messages | Opt-outs made from one of the flow's messages. |
| Conversions, Sales, Avg. Sales, Revenue per activation | Money | Attributed purchases, their amount, the average order and revenue per activation. |
| Cost, Cost / msg, ROAS | Money | What the messages cost, per message, and profit ÷ cost. |
| Entered, Messaged, Engaged, Goal met, Converted | People | The report's Unique people figures; the values carry a ~. "Approximate figure." |
Common questions
Contacted is much lower than Activations. Is something wrong?
Usually not. Contacted only counts runs the flow has already sent a message to. Runs still in a wait before the first message, runs that left through an exit event before it, and runs that took a branch without messages aren't contacted. In a flow that starts with a wait, the gap is expected.
The goal is at 100 % and revenue shows nothing
The goal and revenue are measured separately. A goal counts once the flow has sent a message, with no click needed; revenue needs a purchase within your attribution windows. If the goal isn't your sales event and nothing was attributed, revenue reads Not applicable.
A contact received an SMS but Sent is still 0
Sent counts messages that reached a final status. While a message is still queued or on its way, it isn't counted yet. The KPI row is also a snapshot: select Refresh stats or wait for the next refresh.
Why can't I compare the CTR of two flows?
CTR is per message. A flow with three reminders delivers three times as many messages per run, which changes what its CTR measures. Compare Goal rate or the conversion rate per activation instead: both count runs.
Technical details
- What the totals include. Figures include every real run, on Live and on a live test; Whole flow adds up all the versions. One-contact test runs are left out of every figure, although their messages are sent and charged (see Testing, publishing and versions).
- How often they refresh. Per-version figures are recalculated in the background every few minutes, not continuously; the live counters on the canvas are the exception.
- Figures outlive the run detail. The detail of each contact's run is kept for a limited time, but message and conversion figures are kept, so a flow's totals can cover runs whose journey no longer appears in Activity.
- People are estimated. Distinct-people counts are statistical estimates, not exact counts, hence the ~.
Related
What counts as a goal, and how to make it stricter.
Monitoring a flowWho is inside now, who entered, who didn't and why.
Testing, publishing and versionsPublish a version to a small group and promote it.
Conversions & attributionWhat counts as a sale and how long attribution windows last.
Sales dashboardRead conversions across all your campaigns and automations.
Last updated