Most campaign reporting measures the wrong things carefully. Open rate to two decimal places, click-through rate charted over twelve months, and no answer to the only question that matters: which of these sends should we do again?
This guide sorts campaign metrics by how much they actually tell you, explains where the standard numbers mislead, covers how attribution works and where it stops working, and lays out a reporting structure you can act on.
The metric hierarchy
Rank metrics by how directly they connect to a decision.
Tier 1 — outcome metrics
- Revenue per recipient — attributed revenue divided by delivered messages. The best single number for comparing campaigns, because it is unaffected by audience size.
- Attributed orders and revenue — the raw totals. Useful for the business, less useful for comparison.
- Contribution margin per send — revenue per recipient minus cost per message. This is what separates channels: an email step and a WhatsApp step with the same revenue per recipient are not equally good.
Tier 2 — conversion metrics
- Conversion rate — attributed orders divided by delivered messages.
- Click-to-conversion rate — of the people who clicked, how many bought. This isolates the landing experience from the message. A high click rate with a low click-to-conversion rate means the email wrote a cheque the product page could not cash.
- Average order value from the campaign — reveals whether a discount bought you volume at the cost of margin.
Tier 3 — diagnostic metrics
- Delivery rate — the health check on your list and your templates.
- Click-through rate — whether the content and call to action worked.
- Unsubscribe and complaint rate — the cost side of frequency. Rising complaints is an emergency, not a footnote.
- Open rate — subject line A/B comparison within a single send, and nothing else.
Report tier one. Investigate with tiers two and three.
Two numbers that lie to you
"Sent" is not "delivered"
When a provider returns success, it means the message was accepted for delivery — it took responsibility. It does not mean anything arrived. Messages can still bounce, be silently dropped, hit a per-recipient cap, or fail because a template was rejected.
The practical consequence: calculate every rate against delivered. A campaign with 10,000 sent and 9,100 delivered has a conversion rate 10% better than the one you would report against sent — and, more importantly, a 900-message problem you should be looking at.
This matters most on the channels people check least. Email bounces are visible; a WhatsApp template silently failing a per-recipient limit, or an RCS message that quietly downgraded to SMS, are the ones that go unnoticed for months.
Open rate is a measurement artefact
Opens are tracked with an invisible image. Apple Mail Privacy Protection loads that image on the recipient's behalf regardless of whether they read anything, and other clients block it entirely. So your open rate is a blend of real opens, phantom opens, and invisible real opens.
It remains useful in exactly one situation: comparing two subject lines in the same send to the same audience at the same time, where the distortion applies equally to both. Any other use — trend lines, benchmarks against other brands, leadership reporting — is measuring your list's device mix.
Channel-specific version of the same trap: a WhatsApp read receipt only arrives if the recipient has read receipts enabled. WhatsApp "open rates" are therefore structurally lower than email's, which says nothing about performance. Compare clicks and conversions across channels; never compare opens.
How attribution actually works
Attribution answers: when this order arrived, which campaign should get the credit?
Why URL parameters are not enough
The intuitive approach is UTM tags: a shopper clicks a tagged link, the parameters land in the URL, and the order records them. It falls apart in ordinary use. The shopper clicks the link, browses, refreshes, navigates to a different product — and the parameters are gone. Later they return directly and buy. From the URL's point of view, that purchase came from nowhere.
Robust attribution records the touch server-side: when a contact clicks a campaign link, that click is stored against the contact. When an order later arrives — including via a webhook with no browser context at all — it is matched back to the most recent qualifying touch inside your lookback window.
Last-touch, and being honest about it
Most platforms, including CampGain, use last-touch attribution: the most recent qualifying interaction gets the credit. It is the right default because it is simple, stable, and comparable across campaigns.
It is also an estimate. Real customers see an email, a social ad, and a WhatsApp message before buying. Last-touch hands all the credit to the final click. Multi-touch models spread credit across the journey, but they replace one arbitrary assumption with several.
The workable position: use last-touch consistently for comparing campaigns to each other, and never present attributed revenue as the store's total revenue. They are different numbers measuring different things, and conflating them is how marketing teams end up claiming more revenue than the business made.
The lookback window
How long after a click can an order still be credited? A short window under-credits considered purchases; a long one credits campaigns for orders they had nothing to do with. Match it to your purchase cycle — a few days for impulse categories, longer for high-consideration products — and then leave it alone, because changing it retroactively rewrites your history.
The funnel is where diagnosis happens
Campaign metrics tell you a send underperformed. The on-site funnel tells you why. Track four stages:
- Product viewed — traffic arrived and looked at something.
- Added to cart — interest became intent.
- Checkout started — intent became commitment.
- Purchased — commitment survived checkout.
The drop-off between consecutive stages localises the problem in a way no email metric can:
- Views but few cart adds — the message promised something the product page did not deliver. Wrong products, wrong price expectation, or a landing page mismatch.
- Cart adds but few checkouts — shipping cost or delivery time is doing the damage. Classic, and fixable by stating both in the email.
- Checkouts started but few purchases — payment options, a forced account creation, or an unexpected total.
Each of those is a different fix, and none of them is "rewrite the subject line" — which is where teams reflexively go when a campaign underperforms.
Build a dashboard around decisions
Design each view around the decision its reader is about to make.
- Daily, for whoever runs sends — did yesterday's campaigns deliver, are complaints or failures spiking, is anything stuck. Operational, scanned in a minute.
- Weekly, for the marketing lead — revenue per recipient by campaign and by channel, top and bottom performers, funnel drop-off. This is where next week's plan comes from.
- Monthly, for the business — attributed revenue by channel, list growth net of unsubscribes, repeat purchase rate. Trends, not events.
Two rules keep dashboards useful. Every metric needs a comparison — versus last period, versus the campaign average — because a number with nothing beside it cannot be judged. And every headline metric should have an owner who would change something if it moved.
Testing: fewer, bigger tests
Most campaign A/B testing produces noise, because ecommerce list sizes cannot detect the size of difference being tested.
- Test one variable at a time, and make it a real difference — two versions of an offer, not two synonyms in a subject line.
- Decide the metric before you send. If you test subject lines and evaluate on revenue, you are measuring the whole email, not the subject line.
- Run to a pre-committed sample size. Stopping when one variant looks ahead manufactures winners that never repeat.
- Retest anything that mattered. A result that does not survive a second run was noise.
Test structural things — send timing, discount versus no discount, three steps versus five, channel order. Those produce differences large enough for a normal list to detect.
What CampGain measures
CampGain reports on two layers: what your campaigns did, and what shoppers did on your store.
- Per-step and per-contact campaign results — sent, delivered, opened, and clicked for every step and every recipient, with the provider's stated reason on each failure. A step that underperforms tells you whether it was the audience, the template, or the channel.
- Server-side attribution. Campaign clicks are recorded against the contact, so an order arriving later by webhook — with no URL parameters anywhere — is still matched to the campaign that earned it.
- Attributed revenue by campaign, by step, and by channel, plus a daily series, so you can see whether the WhatsApp step or the email step carried the sequence.
- A storefront funnel — product views, cart adds, checkouts started, and purchases over your chosen period, with conversion rate between each stage and the top products by view and cart rate.
- A live event feed for checking that tracking is working before you trust a report built on it.
Segments feed campaigns and campaigns feed these reports, so "which segment produces revenue" is answerable rather than inferred. Our segmentation guide covers building the audiences, and the multi-channel campaign guide covers sequencing the sends. See the analytics features for the full list.
The short version
Report revenue per recipient, calculated on delivered rather than sent. Use open rate only for subject line comparisons within a single send. Pick last-touch attribution with a lookback window that matches your purchase cycle, and never present attributed revenue as total revenue. Diagnose underperformance in the funnel rather than in the email.
Do those five things and your reporting stops being a monthly ritual and starts being the reason next month's campaigns are better than this month's.