Campaign analytics
Once your campaign is sent, Reepli feeds a real-time dashboard visible on the campaign page. This article explains each metric, how to interpret them, and which levers to pull to improve your results.

How the metrics are fed
Reepli tracks every message sent. When a lifecycle event comes back from WhatsApp (delivery, read, failure), the message status is updated, along with the campaign's aggregated counters.
Send → WhatsApp accepts
│
▼
Delivery events
│
┌──────────┼──────────┐
▼ ▼ ▼
Delivered Read Failed
│ │ │
└──────────┼──────────┘
▼
Aggregated counters updated
No manual refresh needed — the campaign page updates in real time.
The 5 main metrics
Sent
Number of messages accepted by WhatsApp. This is the total you attempted to send, minus immediate rejections (malformed number, invalid template).
It's the basis for calculating all the other rates.
Delivered
Number of messages that actually reached the recipient's phone. A single grey tick at first, then two grey ticks on the WhatsApp side.
| Delivery rate | Assessment |
|---|---|
| > 95% | Excellent |
| 90 – 95% | Good |
| 80 – 90% | Needs improvement (clean up the database) |
| < 80% | Problematic (stop and fix) |
Causes of delivery failure:
- Number not registered on WhatsApp.
- Contact has blocked your number.
- Invalid or malformed number.
- Meta limit reached (rate or tier).
Read
Number of messages opened by the recipient. Double blue tick on the WhatsApp side.
| Read rate (of delivered) | Assessment |
|---|---|
| > 80% | Excellent — engaged audience |
| 60 – 80% | Normal WhatsApp performance |
| 40 – 60% | Average — check timing and relevance |
| < 40% | Low — rethink targeting and content |
Some WhatsApp users disable read receipts in their settings. These contacts show as delivered but never as read, which underestimates your real rate. Consider a correction factor of around 10 to 15%.
Replied
Number of contacts who sent a message back within a 7-day window after receiving it.
| Reply rate (of delivered) | Assessment |
|---|---|
| > 20% | Excellent — very engaging campaign |
| 10 – 20% | Good |
| 5 – 10% | Normal for an informational campaign |
| < 5% | Low — the message doesn't prompt a reply |
Failed
Number of messages with a permanent error: nonexistent number, block, limit exceeded.
Watch the failure rate especially: a spike indicates either a database to clean up or a quality rating in free fall.
Common failure causes
| Failure type | Description | Action |
|---|---|---|
| Invalid format | Malformed number | Fix the number in the contact record |
| No WhatsApp account | The number has no WA account | Remove the contact from your audiences |
| Blocked | The contact has blocked your number | Remove them |
| Rate exceeded | Tier exceeded | Stagger your sends |
| Template suspended | Template suspended by Meta | Check the template's quality |
| Message not delivered | The message couldn't be sent for a regulatory or technical reason | Check the recipient's connectivity |
The Errors tab of a campaign lists the failed contacts with a description, and lets you export to CSV for cleanup.
A campaign's funnel
On the campaign page, the metrics dashboard is complemented by a visual funnel:
Sent 1,000 (100%)
│
▼
Delivered 950 (95% of sent)
│
▼
Read 720 (76% of delivered)
│
▼
Replied 180 (25% of read)
│
▼
Conversions 45 (per your business objective)
Each stage shows the absolute number and the percentage relative to the previous stage. This immediately visualizes where it drops off.
Identifying what isn't working
Symptom by symptom:
| Symptom | Likely cause | Action |
|---|---|---|
| Delivery rate < 90% | Database with many dead numbers | Clean up via the Errors tab → exclude from future campaigns |
| Read rate < 50% | Wrong timing, poorly engaged audience | Change the time, segment more finely |
| Reply rate < 5% | No clear call to action, generic message | Rewrite with a precise, personalized CTA |
| Unsubscribe rate > 2% | Inappropriate content or excessive frequency | Space out, rethink the content, check the opt-in |
| Lots of contacts blocking you | Perceived as spam | Stop everything, wait, redo a clean opt-in |
Comparing multiple campaigns
To identify winning patterns:
- Go to the Campaigns section.
- Filter by period (last 30 days, 90 days…).
- Compare the overall rates.
Ideally, keep a file (Notion, Sheets) where you track:
- Send date and time slot.
- Template category.
- Audience (count, main filters).
- Read and reply rates.
- Meta cost.
After 5 or 10 campaigns, you'll clearly identify what works for your audience.
Exporting the data
CSV export
On the campaign page, the Errors tab offers Export to CSV: the list of all failed contacts with the error cause, directly usable.
To export all recipients (with their status), use the export from the contacts list after filtering.
No automatic PDF
Reepli does not generate PDF reports — the idea is to keep the analysis operational on the dashboard rather than producing documents that get archived without being read again.
The real cost after sending
Once the campaign is complete, Reepli displays:
- Pre-authorized cost (amount initially held on the card).
- Actual cost (amount charged after adjusting for failures).
- Difference refunded if applicable.
The actual cost is generally slightly lower than the pre-authorized one: failures (nonexistent numbers, immediate blocks) are not billed by Meta.
Measuring business conversions
Reepli does not automatically track conversions beyond Replied. If you want to measure a specific objective (sale, appointment booking, signed quote), there are two approaches:
1. Label + filter
Before the campaign, tag the audience (campagne-soldes-mai). After a few days, filter stage = Won AND label = campagne-soldes-mai to count the attributable sales.
2. URL button with UTM
If your template has a URL button, add UTM parameters (?utm_source=whatsapp&utm_campaign=soldes-mai). You track on the web analytics side.
Best practices
- Look at the metrics 24h later, not immediately — the read rate climbs gradually.
- Compare against your own benchmarks, not web averages — every industry, every database has its own reality.
- Iterate — keep a record of the changes (audience, time slot, content) between campaigns to identify the effect of each lever.
- React quickly to weak signals — a rising unsubscribe rate is more important than a falling read rate.
Related articles
To interpret a campaign's results or diagnose a high failure rate, support is reachable via the chat at the bottom right of the dashboard or by email at [email protected].