Campaigns & broadcasts
A campaign sends one approved template to a whole list of contacts — each message personalised from your CSV — and tracks delivery for every recipient.
What a campaign is
A campaign is a template broadcast: you pick one Meta-approved template, upload a CSV of recipients, and RichAutomate queues a personalised copy of that template for every row. Because templates can start conversations outside the 24-hour window, campaigns are how you reach customers who have not messaged you recently — sale announcements, payment reminders, delivery updates, re-engagement.
If you have not created a template yet, do that first — a campaign cannot run without one. See Message templates for how to write and submit one. Approval is up to Meta and usually takes minutes to a few hours.
Billing is per message, with no platform fee: on Client Pay you pay Rs 0.10 per message plus Meta conversation charges billed to you directly by Meta; on SaaS Pay you pay Rs 1.20 per marketing message or Rs 0.30 per utility message. Most broadcasts use marketing templates. Full breakdown on the pricing page.
Creating a campaign in the dashboard
Open the Campaigns section of your dashboard. The list page shows every past campaign with its status (Draft, Scheduled, Processing, Completed, Failed) and headline numbers — sent, delivered and read. From here:
- 1
Click Create Campaign
The Create Campaign button at the top right of the Campaigns page opens the creation form. (The Quick Send button next to it is a shortcut for small ad-hoc sends without a CSV.) - 2
Name the campaign and select a template
Enter a Campaign Name — this is internal, your customers never see it — and pick an approved template from the Select Template dropdown. Only templates already approved by Meta will send successfully. - 3
Add header media if the template needs it
If your template has an image, video or document header, a Header Media field appears. Paste a public URL or upload a file directly — uploaded files are removed after sending. - 4
Upload your contacts CSV
Drag and drop your CSV (up to 10 MB) into the Upload Contacts CSV box, or click to browse. Not sure about the format? Use the Download Sample CSV button — it generates a sample matched to the exact variables of the template you selected. - 5
Check the preview and your messaging limit
After upload, a CSV Preview table shows the first rows with the fully rendered message text, so you can confirm variables landed in the right places. The form also compares your row count against your WhatsApp messaging limit — if the list is larger than your current tier allows, the launch button stays disabled. - 6
Launch
Click Launch Campaign and confirm. Messages are queued and sent in the background; you are redirected to the campaign list where the status moves from Processing to Completed as sending finishes.
Messaging limits are set by Meta
CSV format
The CSV needs exactly one required column and as many variable columns as your template uses:
phone(required) — the recipient's number with country code and no plus sign or spaces, e.g.919876543210. Rows without a usable phone value are skipped.var_1,var_2,var_3… — optional columns that fill the template's placeholders in order:var_1replaces{{1}},var_2replaces{{2}}, and so on. Column names are case-insensitive.
For a template body like "Hi {{1}}, use code {{2}} for 20% off this week", the file looks like this:
phone,var_1,var_2
919876543210,Priya,DIWALI20
919812345678,Rahul,DIWALI20Extra columns are ignored, so you can keep names or notes in the same file. The preview step is your safety net — if a variable column is missing or misnamed, you'll see it in the rendered message text before anything sends.
Tracking delivery
Click any campaign in the list to open its detail page. It shows aggregate funnel numbers — sent, delivered, read, replied, failed — plus an hourly chart, and below that a per-recipient message log: each contact's phone number, current status (sent, delivered, read or failed) and, for failures, the reason.
Statuses update as Meta's delivery receipts arrive, so a campaign that just finished sending will keep accumulating delivered and read counts for hours afterwards. You can search the log by phone number, filter by status, retry individual failed messages, and export the full recipient list as CSV.
Common failure reasons are translated for you — for example, Meta error 131049 means the recipient has hit WhatsApp's marketing-message frequency cap and Meta is temporarily blocking further marketing messages to them; error 131026 usually means the number is not on WhatsApp or has blocked yours. A few failures in a large list are normal; a high failure rate usually means a stale list.
Sending campaigns via the API
Everything above can also be done programmatically with an API key (created in the dashboard) sent as a Bearer token. Two endpoints matter for campaigns:
/api/v1/campaigns/create-with-csv/api/v1/send-campaignCreate with CSV mirrors the dashboard flow in one call. Send multipart/form-data with three fields: name (string), template_id (integer — the template's ID from your dashboard or the templates API) and file (the CSV, same format as above). The campaign is created and queued immediately:
curl -X POST https://richautomate.in/api/v1/campaigns/create-with-csv \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "name=Diwali Sale Announcement" \
-F "template_id=42" \
-F "[email protected]"Send campaign is different: it takes a JSON body with phone and campaign_id and triggers an existing campaign's template for that one contact. This is the event-driven pattern — create a campaign once (for example an abandoned-cart reminder), then have your store or CRM call this endpoint whenever the event fires for a customer. The contact is created automatically if it doesn't exist yet, and the send appears in that campaign's delivery log like any other recipient.
Full request and response shapes, plus the rest of the endpoints, are in the API reference.
Only broadcast to opted-in contacts
Stuck? Message us on WhatsApp at +91 74349 01027 or book a free 15-minute setup call on Calendly.