WhatsApp conversation cost attribution and optimization model
When you connect your own WhatsApp Business Account (WABA) to Devotel Orbit, the conversation charges on that traffic go to Meta, billed directly to your WABA. Orbit is not the billing party for bring-your-own-WABA messaging. What Orbit ships is a mirror of Meta’s conversation economics, built from your own send and delivery records: an estimate of what your WhatsApp traffic costs on Meta, the category and per-day breakdown behind it, and a send-time optimizer that plans a campaign against the same model before it goes out. This page explains how the mirror attributes cost, what it deliberately excludes, and how to read its estimates. The rate numbers themselves live on the WhatsApp pricing guide. Meta revises rates by country and category; this page fixes the model, not the numbers, so it stays correct as rates move.Two books: Meta’s invoice vs Orbit’s mirror
Two books answer two different questions about the same traffic:- Meta’s invoice is the bill. Meta charges your WABA per conversation: a 24-hour window opened by the first message in a category (marketing, utility, authentication, or service), priced at Meta’s per-country, per-category rates. That invoice arrives from Meta and only from Meta.
- Orbit’s mirror is cost visibility. Orbit reads your outbound WhatsApp messages and their delivery outcomes, applies Meta’s published rate card, and renders the economics you can act on: a per-category cost breakdown, a per-day trend, and an itemized split of Meta passthrough versus Orbit platform fee.
The four categories and normalization
Meta’s rate card prices four categories:
A template’s declared category is a starting point, not the truth: Meta auto-recategorizes templates based on observed content and engagement, so a long-running template can drift from what you submitted it as. The mirror therefore prefers Meta’s own classification, captured from the status webhooks Meta sends, over the send-time template category, and falls back to
service when neither is present. That is also why free-form service replies inside the window are tagged correctly even when no template was used.
Meta’s reporting enum is wider than the four priced buckets. authentication_international, for example, is a billable per-message charge applied when an authentication template is delivered to an international number; marketing_lite is a lighter marketing tier. Orbit normalizes the wider enum onto the four buckets by prefix: marketing_lite prices as marketing, authentication_international as authentication. Anything not yet seen falls to service, which rates at 0. The floor is deliberate: free entry-point and referral-conversion traffic genuinely is not billed, and an as-yet-unknown category must never be invented into a paid bucket and inflate your estimate.
What counts as billable
The mirror counts a message only when Meta actually put it on the wire and actually billed the conversation. Two gates enforce that, in order:- The sent gate. Failed, undelivered, rejected, and bounced sends never appear on Meta’s invoice, so they never enter your estimate. Rows still in flight (queued, scheduled, sending) do not count either.
- The confirmed gate. Meta accepts a WhatsApp send synchronously and reports the delivery outcome later, on a status webhook. A message can therefore sit at “accepted”, carrying a pricing category, and still never arrive: the recipient outside the 24-hour window, an unroutable number, the recipient blocking the business. A business-initiated conversation opens on delivery, and a template that never reaches the recipient opens no conversation and is never billed, so a message only counts toward a priced category once it reaches a delivered-equivalent status. The pre-delivery category still labels a confirmed message’s row; it just cannot be the proof of billing.
- Free-window rides. A message Meta marks as not billable, because it rode an already-open conversation window, is not priced at the category rate. A delivered
servicereply still counts in the free-service total at rate 0 whether or not Meta marked it billable, so your count of actually-sent messages stays complete without ever over-pricing the total. - Test traffic. Sends flagged as test-account traffic are excluded from the estimate entirely.
How Insights prices your WhatsApp traffic
The Insights Meta-pricing read prices your delivered volume at Meta’s published rate card, per country × category. The resolver looks up the destination country’s card with the normalized category, and countries without a card of their own fall back to a default card, so no volume is left unpriceable. Meta shares a per-message cost on some reads and not on others. The mirror applies one rule set:- A real, positive per-message cost that Meta returns is preserved verbatim and never overwritten with an estimate.
FREE_*pricing types (free entry-point conversations, free customer-service windows) stay $0 regardless of category.- Otherwise, when cost is absent or zero against positive volume, the point is priced as volume × the country × category rate.
The cost optimizer
Everything above attributes cost after the fact. The send-time optimizer runs before a campaign goes out and plans against the same model. At the mental-model level it makes three moves:- Cheapest valid category. For each recipient it looks at the categories the same content genuinely qualifies for and picks the cheapest on that recipient’s country card. A reminder that is valid as
utilityshould not ship asmarketing. - Sequencing. Authentication and utility sends go out ahead of marketing. They are cheaper, and they open the 24-hour customer-service window; marketing that follows a delivered utility message can ride the already-open window instead of opening a fresh, priced marketing conversation. Recipients already inside an open window are surfaced as zero incremental cost.
- Budget guard. The planner walks the sequenced list accumulating estimated spend, and everything past your per-campaign budget is deferred, not dropped, so a single campaign can never overrun its WhatsApp spend cap. The plan reports its savings against the naive send, the same batch priced at each message’s most expensive eligible category, so you can see what the optimization earned.
Guardrails
The attribution model tells you what you spent; a set of guardrails bounds what you can spend:- Budget alerts and burn rate. Tenant-configured spend thresholds, a burn-rate projection, and velocity-anomaly detection watch wallet spend across channels, WhatsApp included. See Spend alerts, burn rate, and the velocity-anomaly model.
- The 24-hour window itself. The window is Meta’s own cost governor: replies inside it are service conversations at rate 0. See Messaging windows and off-window sends.
- Meta-side limits. Your WABA’s messaging-limit tier and quality rating cap volume from Meta’s side, and a quality downgrade can pause campaigns. See WhatsApp quality and health model and the Conversation pricing hooks section of the WABA lifecycle.
- Rates and who bills what. Current Meta list pricing, the who-bills-what split, and tracking tips live on the WhatsApp pricing guide.