If you've set up a WhatsApp data export to Google Sheets or SFTP, this article explains what each column in your file actually means.
WAX exports come in several types:
One per WhatsApp (or RCS or SMS) event: Sent, Delivered, Clicked, Quick Reply, Failed, Undeliverable, Manual Inbound Message, Interacted, Billed Message, Opt In, Opt Out (will appear as "Metric exports" in the table below)
Plus dedicated exports for
Performance rollups,
WhatsApp,
Click Events, and
Contact Lists.
Not every column appears in every export. Use the table below to find the column you're looking for, see which export(s) it belongs to, and understand exactly what it measures.
Metric exports
Column name | Definition | Expected value type |
unique_id | Identifier tying the row back to its source message/interaction; used to dedupe and correlate an event across the delivery funnel | String/identifier |
phone_number | Contact's WhatsApp phone number (built-in, mandatory column) | String (phone number) |
occurred_at | Timestamp the event actually happened | Timestamp |
metric_name | Internal event-type name identifying which metric this row is — e.g. whatsapp_sent, whatsapp_delivered; this is what actually distinguishes "Sent" from "Delivered" etc. | String (enum-like) |
reference_name (optional — org toggle "include reference name") | Name of the Automation or Broadcast the event is tied to | String |
reference_type (optional — same toggle) | Automation or Broadcast | String (enum) |
reference_id (optional — same toggle) | DB id of that Automation/Broadcast | Number (integer) |
properties (optional — org toggle "include properties") | Raw JSON of event-specific extra data; contents vary by metric type (e.g. Billed Message → category/currency/channel, never a cost value — most other metric types export an empty object) | JSON/text |
phone_number (attribute) (optional) | Same phone number, added a second time as a selectable contact attribute (can duplicate the built-in column) | String |
first_name (optional) | Contact's first name | String |
last_name (optional) | Contact's last name | String |
email (optional) | Contact's email | String (email) |
language (optional) | Contact's language setting | String |
whatsapp_valid (optional) | Whether this number is confirmed reachable on WhatsApp — TRUE after a confirmed delivery, FALSE after a confirmed send failure, blank = never yet confirmed | Boolean (nullable) |
whatsapp_opt_in_status (optional) | WhatsApp-channel consent status: opted_in, opted_out, or unknown (default) | String (enum) |
sms_opt_in_status (optional) | Same, for SMS channel consent | String (enum) |
external_id (optional) | Contact's external system id (e.g. from an integration) | String |
created_at (contact) (optional) | Date the contact record was created | Date |
(any custom attribute) (optional) | Any org-defined custom contact attribute (tags, custom fields) | Varies by attribute type |
WhatsApp Messages
Column name | Definition | Expected value type |
id | Internal DB id of the record (WhatsappMessage id) | Number (integer) |
phone_number | Contact's WhatsApp phone number (built-in, mandatory column) | String (phone number) |
timestamp | Message creation time | Timestamp |
kind | Message type — template, temporary_template, etc. | String |
category | WhatsApp Business template category — marketing / utility / authentication; blank if not applicable | String |
inbound | Whether the message came from the contact (TRUE) or was sent by WAX (FALSE) | Boolean |
whatsapp_error_code | Error code from Meta/360Dialog if the message failed to send; blank if no error | String/code |
message_payload | Raw message content — template body/params, or free text | Text (JSON-like string) |
agent_email | Email of the human agent who sent the message; blank for automated/template sends | String (email) |
reference_name (optional — org toggle "include reference name") | Name of the Automation or Broadcast the message is tied to | String |
reference_type (optional — same toggle) | Automation or Broadcast | String (enum) |
reference_id (optional — same toggle) | DB id of that Automation/Broadcast | Number (integer) |
phone_number (attribute) (optional) | Same phone number, added a second time as a selectable contact attribute | String |
first_name (optional) | Contact's first name | String |
last_name (optional) | Contact's last name | String |
email (optional) | Contact's email | String (email) |
language (optional) | Contact's language setting | String |
whatsapp_valid (optional) | Whether this number is confirmed reachable on WhatsApp — TRUE after a confirmed delivery, FALSE after a confirmed send failure, blank = never yet confirmed | Boolean (nullable) |
whatsapp_opt_in_status (optional) | WhatsApp-channel consent status: opted_in, opted_out, or unknown (default) | String (enum) |
sms_opt_in_status (optional) | Same, for SMS channel consent | String (enum) |
external_id (optional) | Contact's external system id (e.g. from an integration) | String |
created_at (contact) (optional) | Date the contact record was created | Date |
(any custom attribute) (optional) | Any org-defined custom contact attribute (tags, custom fields) | Varies by attribute type |
Click Events
Column name | Definition | Expected value type |
id | Internal DB id of the record (ClickEvent id) | Number (integer) |
phone_number | Contact's WhatsApp phone number (built-in, mandatory column) | String (phone number) |
timestamp | Click time | Timestamp |
kind | Click type — url, quick_reply, list_option, flow, dial_phone, or ctwa (Click-to-WhatsApp ad touchpoint) | String (enum) |
button_text | Text of the button clicked; populated for quick-reply/list/dial-phone clicks, blank for plain URL clicks | String |
url | Destination URL for a kind: url click; blank otherwise | String (URL) |
reference_name (optional — org toggle "include reference name") | Name of the Automation or Broadcast the click is tied to | String |
reference_type (optional — same toggle) | Automation or Broadcast | String (enum) |
reference_id (optional — same toggle) | DB id of that Automation/Broadcast | Number (integer) |
phone_number (attribute) (optional) | Same phone number, added a second time as a selectable contact attribute | String |
first_name (optional) | Contact's first name | String |
last_name (optional) | Contact's last name | String |
email (optional) | Contact's email | String (email) |
language (optional) | Contact's language setting | String |
whatsapp_valid (optional) | Whether this number is confirmed reachable on WhatsApp — TRUE after a confirmed delivery, FALSE after a confirmed send failure, blank = never yet confirmed | Boolean (nullable) |
whatsapp_opt_in_status (optional) | WhatsApp-channel consent status: opted_in, opted_out, or unknown (default) | String (enum) |
sms_opt_in_status (optional) | Same, for SMS channel consent | String (enum) |
external_id (optional) | Contact's external system id (e.g. from an integration) | String |
created_at (contact) (optional) | Date the contact record was created | Date |
(any custom attribute) (optional) | Any org-defined custom contact attribute (tags, custom fields) | Varies by attribute type |
Performances
One row per day per Automation/Broadcast. No contact-level or optional columns.
Column name | Definition | Expected value type |
date | Calendar day of the row | Date |
reference_name | Name of the Automation or Broadcast the aggregate is tied to (mandatory here) | String |
reference_type | Automation or Broadcast | String (enum) |
reference_id | DB id of that Automation/Broadcast | Number (integer) |
cost_eur | WhatsApp/RCS/SMS messaging cost billed by Meta/BSP for that day+reference (not ad spend) | Currency, EUR (decimal) |
delivered | Count of delivered events that day for that reference | Number (integer count) |
read | Count of read events | Number (integer count) |
interacted | Count of interacted events — includes every click type except ctwa | Number (integer count) |
quick_reply | Count of quick-reply button clicks | Number (integer count) |
clicked | Count of link/URL clicks specifically | Number (integer count) |
converted_read | Count of orders (Shopify/PrestaShop/etc.) attributed to a prior "read" touchpoint, within the org's configurable read-attribution window | Number (integer count) |
converted_interacted | Same, attributed to an "interacted" touchpoint | Number (integer count) |
converted_clicked | Same, attributed to a "clicked" touchpoint | Number (integer count) |
revenue_read_eur | Order subtotal revenue (EUR) attributed to read | Currency, EUR (decimal) |
revenue_interacted_eur | Same, attributed to interacted | Currency, EUR (decimal) |
revenue_clicked_eur | Same, attributed to clicked | Currency, EUR (decimal) |
whatsapp_opt_in | Count of opt-in events that day | Number (integer count) |
whatsapp_opt_out | Count of opt-out events that day | Number (integer count) |
billed_message | Count of billed messages (WhatsApp+RCS+SMS combined) that day — count only, no cost/value figure exists at message level | Number (integer count) |
