Data Export
You can export certain types of analytics data into your own storage for your own analysis.
To receive our event stream, you must set up an S3 bucket in your own AWS account and grant us permission to write to it.
Available event types and sources
Section titled “Available event types and sources”E-mails
Section titled “E-mails”| Event type | Description |
|---|---|
send |
An email/post was sent to a recipient |
open |
A recipient opened the email/post |
click |
A recipient clicked a link in the email/post |
bounce |
The email/post bounced and did not reach the recipient |
unsubscribe |
The recipient unsubscribed (includes spam complaints) |
fail |
Delivery or processing failed |
Data structure
Section titled “Data structure”Each exported CSV row for an email event has the following columns:
| Column | Description |
|---|---|
event_id |
Unique identifier for this event |
event_time |
Timestamp of when the event occurred |
email_id |
Identifier grouping every event tied to the same sent email (its send, open, click, etc. all share this value) |
sender |
The system that sent the email |
recipient |
User ID of the recipient |
event_name |
The event type — one of the values in the table above |
type_id |
Log message type (for internal use) |
source |
Reference to the object that triggered the send (e.g. the post or automation it came from) |
label |
Optional classification label on open/click events (e.g. whether the open looks human, automated, or from mail privacy protection prefetching) |
url |
The URL that was clicked — present on click events only |
reason |
The reason given for an unsubscribe — present on unsubscribe events only |
channel_id |
Numeric ID of the specific link that was clicked — present on click events only |
message_id |
The message ID from the sending provider (SES) for send events |
properties |
Additional event metadata in JSON |
Columns not applicable to a given event_name are left empty for that row.
Automations
Section titled “Automations”| Event type | Description |
|---|---|
trigger |
An automation was triggered for a recipient |
enter |
A recipient entered an automation |
did_not_enter |
A recipient did not enter an automation (conditions not met) |
already_in_queue |
A recipient was already queued in the automation |
condition_success |
An automation condition step passed |
condition_fail |
An automation condition step failed |
open |
A recipient opened the email sent by the automation |
click |
A recipient clicked a link in the email sent by the automation |
fail |
Delivery or processing failed |
Bucket setup
Section titled “Bucket setup”1. Create a bucket
Section titled “1. Create a bucket”Create an S3 bucket (in any region) that will receive the exported event files.
2. Attach the bucket policy
Section titled “2. Attach the bucket policy”Attach the following bucket policy, replacing [yourbucketname] in both
places with your actual bucket name:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "bucket permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::509145357191:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::[yourbucketname]" }, { "Sid": "object permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::509145357191:root" }, "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::[yourbucketname]/*" } ]}This policy grants our AWS account (509145357191) only the access needed
to list, write, and overwrite/remove objects it previously wrote. It does
not grant any access to read the contents of existing objects, nor any
access beyond this one bucket.
3. Share with WhiteBeard
Section titled “3. Share with WhiteBeard”Once your bucket policy is in place, reach out to our support team with:
- The name of your bucket
- The event types you wish to receive (see below)
We’ll configure the export on our side to start delivering to your bucket.
File format and layout
Section titled “File format and layout”Files are delivered as gzip-compressed CSV (.csv.gz), with a header row
naming each column. New files are added on an ongoing basis — existing
files are never overwritten or removed, so your bucket accumulates a
growing set of files over time.
Files are organized into the following directory structure within your bucket:
<event_name>/<yyyymmdd>/<hhiiss>-<random>.csv.gz