Skip to main content

Before you begin

Why export email engagement data to your warehouse

Export email engagement data to your warehouse to use it alongside purchases, product usage, and other customer data. With this data in your Customer Studio schema, you can:
  • Build engagement-based audiences. Find customers who clicked an email link in the last 30 days.
  • Exclude inactive subscribers. Identify customers who haven’t clicked an email recently.
  • Follow up based on engagement. Use a Hold until tile in a journey to send a follow-up when someone doesn’t click within three days.
  • Use engagement data in AI Decisioning. Make email engagement events available to AI Decisioning as campaign events.

Plan your export

Before choosing an export method, consider these requirements and best practices:
  • Check your ESP plan. Some export methods are paid add-ons, in beta, or turned on by your ESP account team. The Access column for each ESP below shows which. Confirm access before you set up your pipeline.
  • Plan for historical and new events. Some export methods only collect new events. If you need historical data, load older events before setting up ongoing exports.
  • Monitor for missing data. Monitor for missing files or events, not just failed jobs. If an export stops working and your ESP no longer retains the missing events, you may not be able to recover them.
  • Use clicks as a stronger engagement signal than opens. Email privacy features, such as Apple Mail Privacy Protection, can record opens even when someone hasn’t read a message. A click requires someone to select a link.
  • Match events to your customers. ESPs use their own identifiers, which may not match your warehouse records. When multiple profiles share an email address, matching by email alone can associate events with the wrong customer. Use your own customer IDs or Hightouch Identity Resolution to connect events to the correct customers.

Standardize engagement events

Map events from each ESP to a consistent set of columns in your warehouse or data pipeline before creating event models in Customer Studio. This lets you use the same audience filters and engagement calculations across providers. Some columns, such as event_type and customer_id, may need to be derived or populated during this process. If your ESP doesn’t provide an event ID, generate one from fields that uniquely identify the event. Make sure the ID stays the same across repeated exports so you can identify duplicates. If you combine data from multiple ESPs, include the provider in the identifier.

Choose an export method

Choose your ESP below to compare export methods, historical data availability, and field mappings. Availability and limits vary by ESP and plan. Check the linked ESP documentation before you set up your export.

Salesforce Marketing Cloud

Both export methods use scheduled automations in Automation Studio. Add a File Transfer activity to move exported files to your SFTP server or cloud storage. Without this step, the files stay in Marketing Cloud, even when the automation completes successfully. Each method is a sequence of Automation Studio activities. Put each activity in its own step so that each one starts only after the previous one finishes:
  • Data views: A SQL Query activity writes the events to a data extension, a Data Extract activity exports the data extension to a file, and a File Transfer activity moves the file.
  • Tracking extract: A Data Extract activity with the tracking extract type creates a .zip file, and a File Transfer activity moves it. End the output file name in .zip. Select at least the Sent, Opens, Clicks, and SendJobs outputs. The other outputs identify each send only by ID, and SendJobs adds details like the email name.
Use data views if someone on your team writes SQL and you want one file with the columns you choose. Use tracking extract to export without SQL, and plan to unzip the file and load each CSV into its own table. Filter each run to a rolling date range that overlaps the previous run, such as the last seven days, instead of fixed dates, so no events fall between runs. Remove the duplicates from overlapping runs with event_id. Map Marketing Cloud fields to the standard columns: Before you combine Marketing Cloud events with other sources, convert EventDate to UTC. Marketing Cloud stores it in Central Standard Time and doesn’t adjust it for daylight saving time.

Braze

If your warehouse is Snowflake, use Snowflake Data Sharing. There’s no pipeline to maintain, and it includes two years of history. Otherwise, turn on Currents as early as you can, since its history starts the day you connect it. If your Currents connector’s credentials expire, Braze stops sending events, and after five days it drops them permanently. Renew credentials before they expire, and monitor your storage bucket for missing files. If you don’t have a Snowflake account, Braze can create a reader account for you and share your data into it. If you use a reader account, copy the shared data into your own warehouse before you join it with other customer data. A reader account can only query the shared tables. Map Braze fields to the standard columns: A Braze campaign_id covers every send of a recurring campaign, such as a weekly newsletter. To report on each send separately, use dispatch_id for scheduled campaigns. Action-based campaigns, API-triggered campaigns, and Canvas steps get a different dispatch_id for each recipient, so you can’t use it to group the recipients of one send.

Iterable

To include historical engagement, use the Export API to load older events before enabling Data Sync or Snowflake Secure Data Sharing for ongoing updates. For near real-time events, Iterable system webhooks send sends, opens, clicks, bounces, and other events as they happen. If you use Hightouch Events, send them to a webhook event source, which can load them into your warehouse. Webhooks only send new events, so load older events with the Export API. Before you set up an Iterable export, check these details:
  • Use your project’s API host. US projects use api.iterable.com and EU projects use api.eu.iterable.com. Data Sync also requires you to allow an IP address for your project’s region.
  • Check data type names. The unsubscribe data type is emailUnSubscribe, with a capital S.
  • Deduplicate after a full refresh. For Amazon S3, a Data Sync full refresh adds the full dataset again without deleting existing files. Remove duplicates with event_id to avoid double-counting events.
Map Iterable fields to the standard columns:

Klaviyo

Data warehouse sync is part of Advanced KDP, which isn’t included in Klaviyo’s standard marketing plan. Without it, use the Events API for ongoing exports. The Bulk Export API is invite-only during beta, so request access from Klaviyo before you plan a backfill around it. When you map event_type, use Klaviyo’s metric names: Received Email maps to delivered, Opened Email to opened, and Clicked Email to clicked. Klaviyo records Received Email when a recipient receives an email and doesn’t record a separate send event, so Klaviyo counts won’t match send counts from other ESPs. Campaign Name can repeat across campaigns, so use $message to identify a specific message. Map Klaviyo fields to the standard columns:

Marketo

Both Marketo Engage export methods are APIs, so you build and maintain the integration. Use the Bulk Activity Extract API for daily exports and backfills. It has a daily export quota of 500 MB, shared across leads, activities, program members, and custom objects. Exports that other teams run against the same Marketo instance count toward the same quota. Export files expire after seven days. If you reach the quota, use the REST API until the quota resets at midnight US Central Time. Map Marketo fields to the standard columns: Marketo keeps send and delivery events for less time than open and click events, so a long backfill can include opens and clicks without their matching sends. If export jobs overlap, deduplicate on marketoGUID.

Add engagement events to Customer Studio

After loading engagement events into your warehouse, add them to your Customer Studio schema to use them in audiences and journeys.
  1. Connect events to customers. Join each event to your parent model using customer_id.
  2. Create event models. Create an event model for each event type you want to use, such as Email Sent, Email Opened, and Email Clicked. If you store all events in one table, filter each model by event_type.
  3. Set the timestamp. Select event_timestamp as the timestamp column.
  4. Set the primary key. Select event_id as the primary key. Event-based journeys require a primary key.
  5. Verify your data. Filter on events to create a test audience of customers who clicked an email in the last 30 days. Compare the number of customers in the audience with the number of unique clickers your ESP reports for the same period.
Results may differ from your ESP reports because providers count events differently or exclude events associated with deleted profiles.

Next steps

Last modified on October 20, 2026