> ## Documentation Index
> Fetch the complete documentation index at: https://docs.digifist.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Campaign Analytics

> Track sent, delivered, read, and failed message counts for every campaign in Galantis.

Campaign analytics give you a clear picture of how each broadcast performed — from the number of messages dispatched to how many were opened by recipients. Every metric is tracked at the individual message level through the WhatsApp API and aggregated per campaign, giving you accurate delivery data without estimation.

## What this covers

* The four core delivery metrics and what each measures
* How campaign status reflects delivery progress
* How to interpret results and identify issues

## Core metrics

Each campaign tracks four delivery metrics drawn from the WhatsApp Cloud API's message status callbacks:

<Tabs>
  <Tab title="Sent">
    **Sent** is the count of messages successfully dispatched from Galantis to the WhatsApp API.

    A message reaching `SENT` status means it left Galantis and was accepted by Meta's infrastructure. It does not confirm the message reached the customer's device.

    If the sent count is lower than your estimated audience size, the gap typically reflects:

    * Customers whose consent status changed to non-`SUBSCRIBED` between estimation and send time
    * Messages that failed the API submission step — review `FAILED` count for details
  </Tab>

  <Tab title="Delivered">
    **Delivered** is the count of messages confirmed as received by the customer's device.

    A delivered message has reached the recipient's WhatsApp client. The customer may not have opened it yet.

    A significant gap between sent and delivered counts can indicate:

    * Recipients with inactive WhatsApp accounts or phone numbers
    * Temporary device or connectivity issues on the recipient's end
    * Phone numbers that are no longer registered on WhatsApp

    A consistently low delivery rate relative to sent count across multiple campaigns is worth investigating — it may point to list quality issues.
  </Tab>

  <Tab title="Read">
    **Read** is the count of messages opened by the recipient. WhatsApp sends a read receipt when the customer opens the message, which Galantis records as a status update.

    Read rate (read ÷ delivered) is your primary engagement metric. It reflects how compelling your message subject and sender context is — customers decide whether to open based on the message preview visible in their WhatsApp notification.

    <Note>
      Some customers disable read receipts in their WhatsApp privacy settings. For these recipients, a message that was opened will not generate a read status update. Actual open rates are likely higher than the read count reflects.
    </Note>
  </Tab>

  <Tab title="Failed">
    **Failed** is the count of messages that could not be delivered. The error reason is tracked per message and is visible in the campaign detail view.

    Common failure reasons:

    | Error                              | Cause                                                      |
    | ---------------------------------- | ---------------------------------------------------------- |
    | `CUSTOMER_IS_NOT_OPTED_IN`         | Customer's consent state changed after audience estimation |
    | `CUSTOMER_IS_MISSING_CALLING_CODE` | Phone number is missing the country calling code           |
    | `INSUFFICIENT_CREDITS`             | Credit balance ran out during dispatch                     |

    A high failure count warrants immediate review. Widespread `CUSTOMER_IS_NOT_OPTED_IN` failures suggest a list quality issue. `CUSTOMER_IS_MISSING_CALLING_CODE` failures indicate a data quality problem in your customer records. `INSUFFICIENT_CREDITS` failures mean the campaign ran out of credits partway through dispatch.
  </Tab>
</Tabs>

## How metrics are tracked

Delivery status updates are received from Meta via webhook. Each time a message status changes — from `sent` to `delivered`, or `delivered` to `read`, or to `failed` — Galantis updates the `Message` model record for that specific message.

Galantis monitors delivery status during and after dispatch to tally counts and update the campaign-level status. When all messages have a terminal status, the campaign moves to `SENT`, `PARTIALLY_SENT`, or `FAILED`.

## Reading campaign results

Navigate to **Campaigns → \[Campaign Name]** to view the full analytics breakdown. Results are available as soon as dispatch begins — metrics update in real time as status webhooks arrive from Meta.

Use the per-message error view to drill into `FAILED` messages and identify the specific error reason per recipient.

## Interpreting performance

| Signal                          | Likely meaning                                                     |
| ------------------------------- | ------------------------------------------------------------------ |
| High sent, low delivered        | List contains inactive or invalid numbers                          |
| High delivered, low read        | Message content or timing needs improvement                        |
| High read, low click-through    | CTA button or offer relevance needs review                         |
| High failed with consent errors | List quality issue — review audience data sources                  |
| High failed with credit errors  | Insufficient credits — review billing balance before next campaign |

## Best practices

* **Review failed messages after every campaign.** Even a small failure rate contains actionable signal — error types tell you whether the issue is data quality, consent, or billing.
* **Track read rate over time, not just per campaign.** A single campaign's read rate is affected by timing, audience, and content simultaneously. Trends across campaigns are more meaningful than individual results.
* **Compare delivered-to-read rate across campaign types.** Promotional and informational campaigns often have different baseline read rates. Comparing like-for-like gives more useful benchmarks.
* **Act on `CUSTOMER_IS_MISSING_CALLING_CODE` failures.** These indicate phone number records that will always fail until corrected. Update affected contact records in Shopify so they sync correctly into Galantis.

## Related guides

* [Scheduling & Throttling](./scheduling-throttling) — How batch dispatch affects when metrics appear
* [Compliance Checks](./compliance-checks) — Pre-launch validations that reduce failure rates
* [Audience Targeting](./audience-targeting) — List and segment quality practices that improve deliverability
* [Quality & Deliverability](/whatsapp/compliance/quality-deliverability) — How delivery performance affects your phone number rating
