# Campaigns — Klaviyo (email + SMS)

> How to read your Klaviyo campaign and flow performance in Ordinary, including attributed orders, the hourly engagement burst, and the per-day chart.

Source: https://help.tryordinary.com/features/campaigns-klaviyo

---

> Klaviyo campaign reporting requires **Starter or higher** and a
> connected Klaviyo account. See [Connecting Klaviyo](https://help.tryordinary.com/integrations/klaviyo).

Once Klaviyo is connected, Ordinary pulls your campaigns, flows, and
per-event engagement and cross-references everything against your
store's actual orders. Left nav → **Campaigns → Klaviyo**.


## The list view

Two sub-tabs:

### Campaigns sub-tab

One-shot email or SMS blasts scheduled for a specific send time.
Filtered by your page-level date range (on send-time).

Columns:

- **Campaign name** — click to drill down
- **Sent** — when it went out (in your shop time zone)
- **Recipients / Delivered** — Klaviyo's own send counts
- **Open Rate** — unique opens / delivered, matching Klaviyo's
  dashboard definition
- **Click Rate** — unique clicks / delivered
- **Unsubs / Bounces**
- **Revenue** — Klaviyo's own attributed revenue (their attribution
  window, their click-ID)
- **Ordinary Orders / Ordinary Revenue** — your selected multi-touch
  attribution model's view of the same campaign, computed against
  your store's actual orders. The two revenue columns answer
  different questions; see "Why two revenue numbers?" below.

### Flows sub-tab

Persistent automations (Welcome Series, Browse Abandon, etc). Flow
metrics are **cumulative since the flow was created** — Klaviyo's
flow API doesn't return per-day breakdowns, so the page date range
doesn't apply. A caveat line at the top of the tab explains this.

## The detail view

Click any campaign or flow row.


### Top — the metric cards

The same Klaviyo-reported metrics from the list, formatted as cards:
recipients, open rate, click rate, total opens, total clicks,
revenue, unsubs, bounces.

### Hourly events chart

Per-hour bars showing opens, clicks, and revenue as they actually
happened — sourced from the per-event Klaviyo ingest, not from
cumulative daily snapshots. For a recent campaign you'll see the
classic engagement burst: huge bar on hour 0-2 after send, then
sharp decay over the next 12-24 hours.

If the chart is empty, Ordinary hasn't captured engagement events
yet — that usually means the campaign is brand new and the next
hourly sync hasn't run, or you just connected Klaviyo and the
backfill is still working.

### Per-day engagement chart

Daily delta bars from send-day forward — what happened ON each day,
not cumulative. For campaigns, the X axis is **relative to send**
("Send day, Day 1, Day 2…") so the engagement decay curve reads
left-to-right naturally. For flows, the X axis is calendar dates
since flows fire continuously.

Days with zero engagement at the tail are trimmed automatically so
the chart doesn't stretch out across flat empty days.

### Attributed orders modal

Click **View →** under the "Attributed orders" card to see the
literal orders whose journey included a click on this campaign.
Three attribution modes:

- **Any touch** — orders where THIS campaign was anywhere in the
  buyer's journey. Most inclusive; an order influenced by multiple
  campaigns shows up under each. Default.
- **First touch** — orders where this was the FIRST Klaviyo-attributed
  touch in the journey.
- **Last touch** — orders where this was the most recent
  Klaviyo-attributed touch.

Each row links through to the order's detail page.

## Why two revenue numbers?

The Klaviyo column and the Ordinary column will disagree, often
substantially. This is expected — they answer different questions.

**Klaviyo's revenue:**
- Uses Klaviyo's own attribution window (typically 5 days for email,
  configurable per merchant in Klaviyo)
- Credits orders to the campaign based on Klaviyo's click-ID alone
- Doesn't see orders that came in via a different channel after the
  click

**Ordinary's revenue:**
- Uses your selected multi-touch attribution model (any / first /
  last / linear / time-decay) across the full pixel journey
- Cross-references against your Shopify orders — every order counted
  is a real, paid Shopify order
- Reconciles to-the-cent with Shopify Sales reports

Use Klaviyo for delivery metrics (sends, opens, clicks). Use
Ordinary for outcome metrics (orders, revenue, ROAS) and for
comparing Klaviyo against your other channels.

## Attribution model

The model selector at the top of the page affects the "Ordinary
Orders" and "Ordinary Revenue" columns. Same four models as the
main attribution report — last-click (default), first-click, linear,
time-decay. See [Attribution models explained](https://help.tryordinary.com/concepts/attribution-models).

## What if engagement looks zero

- **Connection expired** — check Settings → Integrations → Klaviyo.
  If it says "Reconnect required," click Reconnect.
- **Campaign was just sent** — the hourly sync runs at the top of
  every hour; first engagement events typically land within 60-90
  minutes of send. The events backfill on connect grabs the 365-day
  history.
- **Date range past your plan's lookback** — partial data badge will
  show on the page header.
- **Klaviyo deduplicates engagement aggressively** — opens and
  clicks within seconds of each other on the same recipient
  collapse to a single event in Klaviyo's view, which carries
  through to ours.

## Related articles

- [Connecting Klaviyo](https://help.tryordinary.com/integrations/klaviyo)
- [Attribution reports](https://help.tryordinary.com/features/attribution)
- [Customer cohort retention](https://help.tryordinary.com/features/cohort-retention)
