Updated on October 25, 2026
The cost of a WhatsApp campaign is the number of delivered messages multiplied by Meta’s rate for the template category and the recipient’s country. For a marketing campaign to recipients in Brazil, the official rate is US$ 0.0625 per delivered message on the USD rate card (or R$ 0.3217 on the BRL rate card) in effect since October 1, 2026: 10,000 deliveries cost US$ 625 in Meta fees. To estimate before sending, you need to predict how many messages will actually be delivered, check the template category and know which currency your account is billed in.
This article walks through a step-by-step estimation method, with a Python calculator and the factors that most often throw budgets off. The examples use Brazil because Vectalk operates there, but the method works for any market on Meta’s rate card.
The basic formula
Since July 1, 2025, Meta charges per delivered message. The pricing page sets three rules that are enough to build the math:
- only messages from the business to the user are charged;
- the charge happens on delivery, not on send;
- the price depends on the message category and the market, defined by the country calling code of the recipient’s number.
The formula is:
cost = delivered_messages * rate[category][country]
Messages with failed status are not charged. That is why the estimate starts with the list, not with the rate.
Step 1: check the official rate card and its date
Only use the rate card Meta publishes, with its effective date. Meta changes prices only on January 1, April 1, July 1 and October 1, with at least one month’s notice for rate changes. For recipients in Brazil, the rates in effect since October 1, 2026 are:
| Category | BRL rate card | USD rate card |
|---|---|---|
| Marketing | R$ 0.3217 | US$ 0.0625 |
| Utility | R$ 0.0350 | US$ 0.0068 |
| Authentication | R$ 0.0350 | US$ 0.0068 |
| Service (after the free tier of 1,000 per number per month) | R$ 0.0350 | US$ 0.0068 |
Source: the BRL and USD “List rates” spreadsheets on the pricing page. Utility and authentication have monthly volume discounts; marketing does not. If the campaign targets several countries, calculate each country at its own rate: what matters is the recipient’s country code, not where the business is based.
Want to try it while you read? Create a Vectalk account and send your first message through the official API. Create free account →
Step 2: confirm the template category
You are billed for the approved category, not the one you requested. A notice with a coupon in the middle is marketing, and a template submitted as utility may have been approved as marketing. Before estimating, check the template’s current category (and the correct_category field, which flags a scheduled change). The rules are in how Meta categorizes your template.
A recent change: since October 1, 2026, utility templates sent inside the customer service window are billed at the regular rate. Until September 30 they were free. Older estimates that relied on that are out of date. See utility messages in the customer service window.
Step 3: estimate how many messages will be delivered
This is where most estimates go wrong. Not every contact on the list will receive the message, and what is not delivered is not billed. The main reasons for non-delivery in a marketing campaign:
| Reason | How it shows up | Billed? |
|---|---|---|
| Number not on WhatsApp or outdated app | failed with error 131026 | No |
| Per-user marketing limit | failed with error 131049 | No |
| User stopped marketing messages from the business | failed with error 131050 | No |
| Template paused for low quality | Error 132015 on send | No |
| Contacts beyond the portfolio messaging limit | Sends you cannot make that day | No |
The per-user limit weighs most on marketing: Meta limits how many marketing templates each person receives from all businesses, based on their engagement. Even with opt-in, part of the list may not receive the message. Details in per-user marketing limits. And if your list includes US numbers (+1 with a US area code), leave them out: Meta states that WhatsApp currently does not deliver marketing templates to those numbers.
There is no universal delivery rate, and Meta does not publish an average. The honest way to estimate is to use your own history: from recent similar campaigns, count how many messages reached delivered and divide by the total sent. If you have no history yet, model scenarios (pessimistic, likely, optimistic) and adjust after the first send.
The history comes from the status webhook. Each message goes through sent, delivered, read or failed, and the pricing object shows whether it is billable. Since events can arrive out of order, count a message as delivered if it has delivered or read. The details are in message status via webhook.
def delivery_rate(statuses):
sent, delivered = set(), set()
for s in statuses:
sent.add(s["id"])
if s["status"] in ("delivered", "read"):
delivered.add(s["id"])
return len(delivered) / len(sent) if sent else 0.0
Step 4: account for currency and exchange rates
The rate you pay depends on your Messaging account’s currency:
- Account in the market’s local currency. In Brazil, Meta now bills eligible customers in reais (BRL) through its local entity, Facebook Brasil. In that case, use the BRL column and there is no exchange rate on Meta’s fee.
- Account in USD or another currency. Use the rate card for that currency and convert at the rate your payment method applies. The final amount in your local currency varies with the exchange rate on the billing date.
According to the pricing page, eligible customers in Brazil must migrate every Messaging account in the portfolio to BRL by June 30, 2027; from July 1, 2027, Meta stops delivering messages from eligible accounts that are not in reais. If you use the API through a provider, currency and billing depend on your contract with them.
Step 5: subtract what is free
Two situations bring the rate to zero:
- Free entry point window. When someone arrives through a Click-to-WhatsApp ad (on Android or iOS) and you reply within the customer service window, a window of up to 7 days opens in which marketing, utility, authentication and service messages are not charged.
- Service free tier. The first 1,000 service messages per number, per month, are free. This applies to free-form replies, not to templates.
Campaign templates sent to a list fit neither case, so for broadcasts, budget the full rate.
Campaign calculator in Python
The script below combines the steps: official rate, list size, estimated delivery rate and optional exchange rate.
RATES = { # effective Oct 1, 2026, recipients in Brazil
"BRL": {"marketing": 0.3217, "utility": 0.0350, "authentication": 0.0350},
"USD": {"marketing": 0.0625, "utility": 0.0068, "authentication": 0.0068},
}
def estimate(contacts, category, delivery_rates, currency="USD", fx=None):
rate = RATES[currency][category]
scenarios = {}
for name, dr in delivery_rates.items():
delivered = round(contacts * dr)
cost = delivered * rate
if fx:
cost *= fx # exchange rate you provide, to your local currency
scenarios[name] = {"delivered": delivered, "cost": round(cost, 2)}
return scenarios
# Example: the rates below are hypothetical, only to illustrate the math.
# Replace them with rates from your own history.
print(estimate(20_000, "marketing", {"pessimistic": 0.6, "likely": 0.75, "optimistic": 0.9}))
With 20,000 contacts and the example’s hypothetical rates, the result is:
| Scenario (hypothetical rate) | Delivered | Meta cost (marketing, USD) |
|---|---|---|
| Pessimistic (60%) | 12,000 | US$ 750.00 |
| Likely (75%) | 15,000 | US$ 937.50 |
| Optimistic (90%) | 18,000 | US$ 1,125.00 |
Budget for the optimistic scenario (the most expensive one) and track the real numbers through the webhook. If your account is in BRL, run it with currency="BRL".
Before you send: what else to check
Cost is not the only limit. Also check:
- Portfolio messaging limit. New business portfolios can reach 250 unique recipients per 24 hours outside the customer service window; the next tiers are 2,000, 10,000, 100,000 and unlimited, according to Meta’s messaging limits. A 20,000-contact list on a 2,000-tier portfolio takes several days.
- Opt-in. The policy requires consent. Lists without opt-in lead to blocks and reports, hurt quality and pause the template mid-campaign. See how to build an opt-in list.
- Small test first. Sending to a sample measures the real delivery rate and cost per delivery before you commit the full budget.
- Provider fees. Meta’s rate is one part; the platform you use may charge separately for its service.
How to do it with Vectalk
With Vectalk, you don’t add a card on Meta: you pay Vectalk, and Vectalk pays Meta. Status webhooks arrive in Meta’s format, with each message’s pricing object, so you can build the delivery and cost history described above. The API also has message analytics endpoints, synced daily with Meta, and POST /api/analytics/instances/{instanceId}/sync forces a sync of the last 90 days. Create your account at apps.vectalk.com.br/register or talk to the team through the contact page to estimate a campaign with real volumes.
Frequently asked questions
Do I pay for messages that failed?
No. Meta only charges for delivered messages. Failures such as 131049, 131050 and 131026 are not billed.
Does a read message cost more than a delivered one?
No. The charge happens once, on delivery. Reads do not add any charge.
Are there volume discounts for marketing campaigns?
Not on the Cloud API. Volume tiers apply to utility and authentication. Marketing has a fixed rate per market.
Can I use a utility template to pay less on a campaign?
No. Promotional content is marketing. Meta recategorizes the template and, if you keep doing it, restricts the account’s ability to create utility templates.
Will prices change soon?
The next possible change date is January 1, 2027. Meta announces rate changes at least one month in advance. Redo your estimate every quarter.
Official sources checked on October 25, 2026: WhatsApp Business Platform pricing and the BRL and USD “List rates” spreadsheets (effective October 1, 2026), Message status webhook, Error codes, Per-user marketing limits, Messaging limits.
Put your business on the official WhatsApp
Create your account, connect your number to the official API (you can keep the app with coexistence) and start serving customers and sending messages.
