Skip to content
Meta Business PartnerStep-by-step guide

How to measure campaign ROI on the WhatsApp Business API

Sending a WhatsApp broadcast is easy. Proving it made money is where most teams get stuck. Because Meta now bills per delivered message by category, your ROI maths is only honest if you separate what you spent (delivery cost per marketing/utility/authentication message) from what you earned (attributed orders, bookings, or recovered carts). This tutorial walks through a repeatable way to measure WhatsApp campaign ROI end to end in InfiQ — from setting a baseline and tagging campaigns, to attributing revenue with click tracking, to reading the numbers correctly so you don't fool yourself. No data-science background required.

What you'll do

Measure WhatsApp ROI by dividing attributed revenue by true campaign cost. Track delivered messages per category (not per conversation), tag each campaign with a UTM or unique link, and compare revenue from clickers against your per-message delivery spend plus InfiQ platform pricing.

Step 1 — Define the ROI question before you send

ROI is only meaningful against a goal, so decide what a single campaign is supposed to move before you build it. A cart-recovery utility message is judged on recovered order value; a marketing broadcast for a new collection is judged on incremental sales in the days after; an authentication flow isn't a revenue campaign at all and shouldn't be measured this way. Write down the numerator (the revenue event you'll credit) and the denominator (the cost you'll count) up front. This one habit prevents the most common mistake we see: teams comparing total store revenue during a campaign window and crediting all of it to WhatsApp.

  • Pick one primary revenue event per campaign (order placed, booking confirmed, cart recovered).
  • Decide your attribution window — 2 hours after delivery works for most retail sends.
  • Note the message category you'll use, because it sets your per-message cost floor.
  • Record a baseline: what does this revenue event normally do without a send?

Step 2 — Calculate the true cost of the campaign

Your denominator is not a flat 'per blast' number. Since Meta moved off per-conversation billing on 1 July 2025, WhatsApp bills per delivered message and the rate depends on category — marketing costs more than utility, and authentication sits lower still. So a 10,000-contact marketing broadcast where 9,200 messages are delivered costs 9,200 times the marketing rate, not 10,000. On top of Meta's delivery charge you pay InfiQ's transparent ₹ platform pricing (ex-GST). Add both to get real cost. Do not count the free 24-hour service window as a cost line — it's a window in which you can reply without a new template charge, not a billing unit.

  • Cost = (delivered messages × Meta's per-message rate for that category) + InfiQ platform pricing, ex-GST.
  • Use delivered count, not sent or targeted count — undelivered messages aren't billed.
  • Keep marketing, utility and authentication spend in separate lines so blended ROI doesn't hide a weak segment.
  • Add any one-off creative or offer-discount cost if the promo gave away margin.

Step 3 — Tag every campaign so revenue can find its way back

Attribution breaks when two campaigns share the same link. In InfiQ, give each send its own trackable destination: append UTM parameters (or use a unique short link) to any button or URL in the template, and use a distinct campaign name so analytics can group deliveries, reads, clicks and the resulting sessions. If you sell online, wire those UTMs through to your store or checkout so an order carries the campaign tag all the way to the thank-you page. For call-to-action buttons that open a chat rather than a browser, tag the conversation with the campaign name in your CRM or InfiQ labels so agent-closed sales are still creditable.

  • Add utm_source=whatsapp, utm_medium=broadcast, and a unique utm_campaign per send.
  • Use one link per campaign — reused links make revenue un-attributable.
  • Pass the campaign tag into your ecommerce/CRM so orders inherit it.
  • Label chat-button conversations so agent-assisted revenue isn't lost.

Step 4 — Read delivery and engagement as the funnel, not the goal

Delivered, read, and clicked rates are diagnostics, not the result — but they tell you where ROI leaks. A high delivery rate with low reads suggests bad timing or a weak opening line; healthy reads with few clicks points at a soft offer or a buried button; strong clicks with no orders usually means the landing page or checkout is the problem, not the message. In InfiQ's campaign analytics, walk the funnel left to right and fix the first big drop-off before touching the creative. This turns a vague 'the campaign didn't work' into a specific, fixable step.

  • Delivered → Read: quality rating, send time, and audience freshness.
  • Read → Clicked: offer strength, CTA clarity, single clear button.
  • Clicked → Purchased: landing page load, checkout friction, offer honoured.
  • Watch quality rating and failure reasons — a dropping rating quietly raises future cost per delivered message.

Step 5 — Compute ROI and ROAS, then judge it against baseline

With attributed revenue and true cost in hand, ROI (%) = ((attributed revenue − campaign cost) ÷ campaign cost) × 100, and ROAS = attributed revenue ÷ campaign cost. Report both: ROAS is the plain 'we spent ₹1 and made ₹X' number stakeholders grasp instantly, ROI shows the net gain. Then subtract your baseline — if the tagged audience would have bought some of that anyway, credit only the incremental lift. Comparing a sent segment against a held-out control group (a small slice you deliberately don't message) is the honest way to isolate WhatsApp's real contribution.

  • ROAS = attributed revenue ÷ total campaign cost (Meta + InfiQ, ex-GST).
  • ROI % = ((attributed revenue − cost) ÷ cost) × 100.
  • Subtract baseline or use a hold-out control to measure incremental, not total, revenue.
  • Break ROI down by category so utility reminders and marketing blasts are judged on their own economics.

Step 6 — Turn one measurement into a repeatable loop

A single ROI number is a snapshot; the value is in the trend. Save the campaign as a template you can re-run, log its ROI against the baseline, and change one variable at a time — send window, offer, segment, or opening line — so the next result is comparable. Over a few cycles you'll learn which category earns its cost for your business: many InfiQ users find utility reminders (order updates, appointment nudges) quietly deliver the best return per rupee because they ride the free service window and land at moments of genuine intent, while marketing blasts need sharper targeting to justify their higher per-message rate.

  • Keep a simple running log: campaign, category, delivered, cost, attributed revenue, ROI.
  • Change one variable per test so improvements are attributable.
  • Re-check quality rating each cycle — it directly affects future cost.
  • Retire underperforming segments rather than resending to unresponsive contacts.

Do this in InfiQ now

Talk to InfiQ

Want us to set this up with you?

Tell us where you’re stuck — we’ll walk you through it and get you live.

Step 1 of 2
WhatsApp

Protected by invisible spam checks · replies within 1 working day

Frequently asked questions

What exactly counts as the 'cost' when I calculate WhatsApp ROI?+
Two things: Meta's charge per delivered message at the rate for that message's category (marketing, utility or authentication), multiplied by how many were actually delivered, plus InfiQ's platform pricing (ex-GST). Undelivered messages aren't billed, so always use the delivered count.
Isn't WhatsApp billed per conversation? How does that affect ROI?+
Not anymore. Meta moved off per-conversation billing on 1 July 2025 and now charges per delivered message by category. The 24-hour service window still exists, but it's a free reply window — not a billing unit — so your cost denominator should be built from delivered messages, not conversations.
How do I attribute a sale back to a specific WhatsApp campaign?+
Give each campaign a unique trackable link with its own UTM parameters and campaign name, then pass that tag through to your store or CRM so orders inherit it. For chat-button sends that don't open a browser, label the conversation so agent-closed sales are still credited to the campaign.
What's the difference between ROI and ROAS here?+
ROAS (return on ad spend) is revenue ÷ cost — the simple 'spent ₹1, made ₹X' figure. ROI is the net gain as a percentage: ((revenue − cost) ÷ cost) × 100. Report both; ROAS is easy for stakeholders to grasp, ROI shows the actual profit multiple after cost.
How do I avoid over-crediting WhatsApp for revenue that would have happened anyway?+
Hold out a small control group you deliberately don't message, or subtract your recorded baseline for that revenue event. Crediting only the incremental lift over the control is the honest way to isolate what WhatsApp genuinely contributed.
Which message category tends to give the best ROI?+
It varies by business, but utility messages (order updates, appointment reminders, cart nudges) often return the most per rupee because they land at moments of real intent and can use the free service window. Marketing broadcasts carry a higher per-message rate, so they need sharper targeting and stronger offers to justify their cost.
Do I need a developer to measure campaign ROI in InfiQ?+
For standard tracking — UTMs, unique links, and reading the delivery-to-click funnel in InfiQ's analytics — no. If you want orders to write their campaign tag automatically into your own database or a custom dashboard, that integration step may need API help.
How long should my attribution window be?+
For most retail and services sends, 2 hours after delivery captures the bulk of genuinely influenced purchases. Longer windows risk crediting sales the message didn't cause; shorter windows may miss buyers who returned the next day. Pick a window before you send and keep it consistent so campaigns stay comparable.