WhatsApp Marketing Campaigns
Send approved marketing templates with image, video or document headers, buttons and coupon codes to opted-in contacts. Pick your audience from contacts, tags or a CSV, send now or schedule it around quiet hours, and track delivery, reads, button taps and replies. Opted-out contacts are skipped automatically.
✦ 14-day free trial · Your own WhatsApp Business number · Meta bills messages directly
Campaigns That Convert
WhatsApp marketing templates support image, video and document headers, interactive buttons (quick reply, URL, copy code) and personalization variables. Combine them with tag-based audiences, scheduling and quiet hours on Team and up — and, on the Business plan, A/B tests with an automatic winner, follow-ups that stop when someone replies, engagement segments and retargeting — to run campaigns that start real conversations.
- Image, video and document headers with coupon codes
- Interactive quick-reply & CTA buttons
- Audiences from tags, opt-in filter or CSV, with opt-outs skipped
- A/B tests, follow-ups and retargeting on the Business plan
Launch a Campaign in 3 Steps
1. Message
Pick an approved marketing template, map its variables to contact fields, attributes or fixed text, and add header media.
2. Audience
Pick contacts, select everyone matching your tags, or upload a CSV. Opted-out numbers are skipped automatically. On the Business plan, use engagement, birthday or pipeline-stage segments, or retarget the people an earlier campaign didn't reach or who didn't reply.
3. Review & Launch
Check the message, the audience and the pre-launch check — Meta's view of your number, how many can get it today and an estimated Meta charge — then send now or schedule it. Pause, resume or duplicate at any time, and follow delivered, read, tapped and replied in the campaign report.
WhatsApp Campaigns vs. Traditional SMS Marketing vs. Email Newsletters
Compare rich media, two-way replies and opt-out handling.
| Channel Feature | WhatsApp Campaigns | Traditional SMS | Email Newsletters |
|---|---|---|---|
| Styled Rich Media | ✓ (Images, videos, PDFs; carousels one at a time via the API) | ✗ (Plain text limits) | ✓ (HTML layout tags) |
| Direct Two-Way Chat | ✓ (Instant user replies) | ✗ (One-way dispatch shortcodes) | ✓ (Email responses) |
| Opt-Out Handling | ✓ (STOP / START keywords, enforced on every send) | Keyword replies (rules vary by country) | ✓ (Unsubscribe link) |
Send a promotional template with a coupon code
curl -X POST https://waba-api.startmessaging.com/api/v1/messages \
-H "Authorization: Bearer sm_live_your_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: festive-offer-919812345678" \
-d '{
"to": "+919812345678",
"type": "template",
"template": {
"name": "festive_offer",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/festive-offer.jpg",
"parameters": [
{
"text": "Rohan"
},
{
"text": "25%"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "FEST25"
}
]
}
}' const res = await fetch('https://waba-api.startmessaging.com/api/v1/messages', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + process.env.SM_API_KEY,
'Content-Type': 'application/json',
'Idempotency-Key': 'festive-offer-919812345678',
},
body: JSON.stringify({
"to": "+919812345678",
"type": "template",
"template": {
"name": "festive_offer",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/festive-offer.jpg",
"parameters": [
{
"text": "Rohan"
},
{
"text": "25%"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "FEST25"
}
]
}
}),
});
const { data } = await res.json();
console.log(data.id, data.status); import os, requests
res = requests.post(
'https://waba-api.startmessaging.com/api/v1/messages',
headers={
'Authorization': f"Bearer {os.environ['SM_API_KEY']}",
'Idempotency-Key': 'festive-offer-919812345678',
},
json={
"to": "+919812345678",
"type": "template",
"template": {
"name": "festive_offer",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/festive-offer.jpg",
"parameters": [
{
"text": "Rohan"
},
{
"text": "25%"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "FEST25"
}
]
}
},
)
data = res.json()['data']
print(data['id'], data['status']) <?php
$body = <<<'JSON'
{
"to": "+919812345678",
"type": "template",
"template": {
"name": "festive_offer",
"language": "en_US",
"headerMediaUrl": "https://cdn.example.com/festive-offer.jpg",
"parameters": [
{
"text": "Rohan"
},
{
"text": "25%"
}
],
"buttonParameters": [
{
"index": 0,
"subType": "copy_code",
"couponCode": "FEST25"
}
]
}
}
JSON;
$ch = curl_init('https://waba-api.startmessaging.com/api/v1/messages');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('SM_API_KEY'),
'Content-Type: application/json',
'Idempotency-Key: festive-offer-919812345678',
],
CURLOPT_POSTFIELDS => $body,
]);
$data = json_decode(curl_exec($ch), true)['data'];
echo $data['id'] . ' ' . $data['status']; Marketing Campaigns — FAQ
What results can I expect from WhatsApp marketing?
It depends on your audience, offer and consent quality, and we do not promise specific open, click or ROI figures. Each campaign report shows sent, delivered, read, button taps and replies, why messages failed and about what Meta charged. On the Business plan it also counts conversions: leads moved to a won stage and sales your system reports through the API.
What are the local restrictions on sending marketing campaigns?
Marketing messages must go to opted-in contacts using Meta-approved marketing templates. Meta may limit how many marketing messages one person receives and delivers no marketing templates to US numbers, so campaigns skip them. Charges vary by the recipient's country and are billed to your own WhatsApp Business Account. Where local rules or good practice call for quiet hours, set them in StartMessaging: campaigns wait them out and carry on by themselves. We recommend spacing campaigns at least 48 hours apart.
Do I need user consent (opt-in) before sending marketing campaigns?
Yes. WhatsApp requires opt-in before you send promotional messages. Collect it on web forms, at checkout or in chat, and record it on the contact. Anyone who replies STOP is opted out and skipped by every campaign until they send START.
How can I prevent my WhatsApp number from being blocked during campaigns?
Only target opted-in contacts, personalize and keep templates relevant, offer an easy opt-out (such as a 'Stop' quick-reply button), space marketing campaigns at least 48 hours apart, and watch your number's quality rating in account health.
Can I A/B test a WhatsApp campaign?
Yes, on the Business plan. Version B is a second approved template with the same variables, header and category. A share of the audience (10–50%) gets one of the two versions, and after 1 to 72 hours the version with more replies, reads or button taps goes to everyone else. Business also adds up to 3 follow-ups that stop as soon as someone replies, repeating campaigns, and retargeting of the people an earlier campaign didn't reach, who didn't read it, or who tapped a button.
Can a campaign send carousels or limited-time offers?
No. Campaigns send standard templates; they can't send carousel, limited-time offer, authentication or catalog templates, so the campaign picker hides them. Carousel, limited-time offer and authentication templates can go out one at a time from the inbox or through the API (POST /api/v1/messages) — for example from your own system when a customer qualifies for the offer.
Launch Your First Campaign
Start with a 14-day free trial of the Business plan.