Content Performance
Content Performance shows which kind of message works for your audience. Every template, campaign variant and journey message is labelled by what it is - its tone, its offer, its call to action, its length, how personalized it is, whether it has an image, and its topic. This report joins those labels to your sends and shows, for each label value, how many people were reached and what share of them opened, clicked and bought.
Navigate to Analytics → Content performance from the sidebar.
Reading the report
Pick a period (7, 30 or 90 days), a channel or all channels, and a label to group by. The table shows one row per label value:
| Column | Meaning |
|---|---|
| Sent | Messages sent with that label |
| People | Unique people reached, bots excluded |
| Opened | Share of people reached who opened |
| Clicked | Share of people reached who clicked |
| Converted | Share of people reached who reached the conversion goal of the campaign or journey the message belongs to - see below |
| Bought | Share of people reached who made a purchase within 7 days after the message |
Rates are shown once at least 100 people were reached. Below that, the counts are shown and the rate is left out - a percentage from thirty sends would be noise. A dash means the channel cannot measure that rate: push and SMS have no opens, for example.
"Converted" is each message's own conversion goal: the goal of its campaign or journey, counted with that goal's window and attribution model - the same rule as the campaign and journey pages - and credited to the variant or journey message the model credits. The rate is over the people reached by messages that have a goal; a template sent on its own, or a campaign or journey without a goal, has no conversions and is left out of it, and a row where no message has a goal shows a dash. Until 2026-10-14 this report had no goal column, and its purchase column was its conversion figure.
"Bought" is a simple window - a purchase by the same person within 7 days after the message. It is not the attribution model used on the campaign pages, which decides between competing messages; here a purchase can count for every message the person received in the window before it.
By merge field
The Merge fields tab compares messages by the merge fields they use. Each row is one field in one place - for example first_name in the subject - and shows the open, click, conversion and purchase rates of the messages that use it vs the messages on the same channels that do not. An SMS has no subject, so it never counts as "without first_name in the subject".
- Where is the subject, preheader, title (push, in-app, WhatsApp header), body, button text or link - a link address: an email or in-app link, the push tap URL, the Viber button URL or a WhatsApp URL button. Push action buttons are not read, because their values are sent as typed.
- WhatsApp template placeholders (
{{1}},{{2}}) count as the field each one is bound to in the campaign or journey step - a binding such as{{ user.first_name }}oruser.city. A binding that is fixed text is not a field and is not counted. - A field that only decides what shows - inside an
{% if %},{% unless %}or{% case %}- is marked condition only, apart from a field that is printed. - Field names only, never values:
{{ user.first_name | default: "there" }}counts asfirst_name. Loop variables, unsubscribe and preference links, link tracking, content blocks, AI agent output, product recommendations, coupon codes, workspace and campaign names and dates are not counted. At most 30 fields are kept per message. - The same rules as the rest of the report: unique people, bots excluded, and a rate on either side shows only once 100 people stand behind it.
This is correlation, not cause. Messages that greet people by name may also go to a different audience, at a different time, with a different offer. Treat a row as an idea for an A/B test, not as its result.
The Content labels strip of a message lists its merge fields too, for example "Merge fields: first_name (subject), city (body)".
Where the labels come from
Messages are labelled automatically when you save a template, publish a campaign or publish a journey. The labels are read from the template as you wrote it, with placeholders left in place; no rendered message or recipient data is involved. Content saved before this feature existed has no label until you click Label existing content, which queues every current template, campaign and journey; the report fills in within a few minutes.
The tile "Sends without a label" tells you how much of the period's traffic the report cannot group yet.
A message's own labels
To see how one message was labelled, open it:
- Campaigns - on the campaign page, open a variant's preview (the eye icon in the variants table). The Content labels strip sits above the message, in both Preview and Click map.
- Email templates - open the template in the editor; the Content labels section is under the editor.
- In-app and push templates - open the template in the editor; the Content labels section is under the content.
- WhatsApp templates - open a draft or rejected template in the editor (the section is under the approval note), or preview any other template (the section is under the message).
- Journeys - in the journey builder, open a message step (email, SMS, push, WhatsApp, Viber or in-app); the Content labels strip sits in the step's settings. On a live journey, the step's preview drawer shows it above the message.
A journey's messages are labelled when the journey is published, not when it is saved. A journey that has never been published says so instead of showing labels, and the labels of a live journey describe its published version - edits you have not published yet are labelled when you publish them.
The strip shows each label in words - tone, urgency, offer, call to action, topic, length, personalization and imagery - for the content as it is now, and when and how it was labelled: by the model, copied from a message with identical content, or not labelled because the model could not tell (every value then shows as Unknown). Hover the urgency label to see what its level means. A message saved or published a moment ago shows "Not labelled yet" for about a minute.
What urgency means
Urgency is the pressure a message puts on when to act, read from what it says about time - not from how it sounds (that is tone, which has its own "urgent" value).
| Value | Meaning | Examples |
|---|---|---|
| None | Nothing to act on at any particular time | A receipt, an order or delivery update, a newsletter article, a thank-you |
| Low | Asks for an action but sets no time for it | "Shop the new collection", "Book your next visit" |
| Medium | Gives a reason to act soon, stated plainly | "Sale ends Sunday", "This weekend only", "Your cart is saved" |
| High | Pushes to act now | A deadline within about a day, "Last chance", a countdown, "Only 3 left" |
When a message mixes signals, it gets the strongest one it states: one "last chance" line makes a calm newsletter high.
Notes
- Labels are Joryio's own analysis, at Joryio's cost. They do not use your AI budget.
- Labelling can be switched off per workspace under Settings → General → Content classification; the report then shows only what was labelled before and says so.
- Viewing this report requires analytics access in your role.
- The labelling rules are versioned. When they change, past messages are labelled again in the background, and each keeps its old label until the new one arrives - an old label is never read with a new meaning.
Related
- Campaign Analytics - Per-campaign results with attribution
- Message frequency - Whether more messages still earn more