--- title: "Setting up S3-compatible storage integrations" updated: 2026-03-26 --- # Setting up S3-compatible storage integrations > **Notice** > > Cloud storage integrations are available on [Enterprise plans](https://www.beehiiv.com/pricing) as a paid add-on. To learn more, contact your Customer Success Manager or access our chatbot in the bottom corner of this page to reach out to support. The beehiiv S3 integration lets you export subscriber interaction data, including email clicks, opens, and  bounces, directly to your own cloud storage bucket for ingestion into an external database or analytics platform. The following S3-compatible storage providers are supported: - Amazon Web Services (AWS S3) - Cloudflare R2 - Backblaze B2 - Wasabi Cloud Storage In this article, you'll learn how to: - Configure your bucket and user permissions for each platform. - Connect your storage provider to your beehiiv workspace. - Understand the CSV data that beehiiv uploads to your storage platform. --- ## How to connect your storage account to your publication > **Note** > > These steps use AWS S3 as an example. The process is similar for Cloudflare R2, Backblaze B2, and Wasabi Cloud Storage — please refer to the platform-specific sections below the steps for details. 1. Click on **Settings** in the bottom left corner of your beehiiv account.  2. From the left panel menu, go to **Integrations >** [**Browse apps**](https://app.beehiiv.com/settings/workspace/integrations/available-apps). Once the Available Apps open, navigate to your storage provider and click **Connect**.  ![](https://beehiivhelp.zendesk.com/hc/article_attachments/39319897422615) 3. A setup wizard will walk you through the process. You'll first be prompted to enter your bucket name. Once entered, the **IAM Policy** field below will populate with a JSON object showing the access policy required to access your bucket. Copy this policy and apply it to your bucket permissions before proceeding. When ready, click **Next**. ![](https://beehiivhelp.zendesk.com/hc/article_attachments/39319854576023) 4. In the **Test your connection** step, enter your bucket's region and the credentials used to access it. When done, click **Next**. ![](https://beehiivhelp.zendesk.com/hc/article_attachments/39319854578327) > **Note** > > If you run into issues testing your connection at this step, refer to the platform-specific sections below. 5. On the final screen, configure your delivery settings. Specify a directory name, file type, and compression type, then click **Connect**. Data can be exported in CSV or Parquet format, with the following compression options: LZ4, GZIP, or no compression. Uncompressed files are split into 16 MB parts. ![](https://beehiivhelp.zendesk.com/hc/article_attachments/39319897438103) --- ## AWS S3 Access Control Lists are used to access buckets on AWS S3. Before testing your connection, make sure ACLs are enabled in your bucket's permissions settings. You'll need to provide an **Access Key** and **Secret Access Key** from AWS to grant access to your S3 bucket. If you're unfamiliar with IAM users and access keys, refer to the [AWS IAM documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-account-iam.html). --- ## Backblaze B2 Default B2 bucket permissions are sufficient for this integration. When creating an application key scoped to your bucket, be sure to grant **read/write permissions** and **list access**. In the setup wizard, enter your credentials as follows: - **Key ID**: Access Key ID - **Application Key**: Secret Access Key Your bucket's region can be found in the **Endpoint** field on the bucket details page. ![AWS S3.02.png](https://beehiivhelp.zendesk.com/hc/article_attachments/39319897440151) --- ## Wasabi Cloud Storage After entering your bucket name, you’ll see an access policy displayed as a large JSON object. Follow the steps in the [Wasabi documentation](https://docs.wasabi.com/v1/docs/bucket-policy) to add this access policy to your bucket. Once done, navigate to **Access Keys** in the left toolbar and [create a set of access keys](https://docs.wasabi.com/docs/creating-a-new-access-key). --- ## Cloudflare R2 The R2 setup requires two pieces of information. **Bucket URL:** Navigate to your R2 bucket and click **Settings**. The bucket URL appears under the **General** section, labeled **S3 API**. ![](https://beehiivhelp.zendesk.com/hc/article_attachments/39319854584471) **API credentials**: The API credentials will need to be generated on the R2 Overview page. Once there, find **Account Details** on the right side and then on the click **Manage** next to **API Tokens**. ![](https://beehiivhelp.zendesk.com/hc/article_attachments/39319897446167) > **Tech Note** > > API tokens used to connect to beehiiv require **Admin Read & Write** permissions to access your bucket. --- ## Understanding exported data Data is exported from beehiiv to your bucket on a nightly basis. The exported files follow the schema below. Fields marked as nullable may not always contain a value. | Column Name | Data Type | Nullable | Description | Sample Value | | ------------------- | --------- | -------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | | event_id | String | No | Unique identifier for the event | 5732d85c-95e5-4dd3-939b-30523c0710f1 | | publication_name | String | No | Name of the publication | John Doe’s Newsletter | | publication_id | String | No | Unique identifier for the publication | pub_b95740fa- | | post_name | String | No | Title of the post | Example Newsletter: Feb 2nd, 2026 | | post_id | String | No | Unique identifier for the post | post_4e498cac-57e6-460b-84c1- | | email | String | No | Subscriber email address | example@example.com | | subscription_id | String | No | Unique identifier for subscriber | sub_e53b0251-b57a- | | timestamp | DateTime | No | Time of event | January 21, 2026, 12:41 PM | | event | String | No | Type of event | One of: click, delivered, processed, deferred, open, bounce, dropped, spamreport | | is_verified | Boolean | Yes | Whether click is verified | One of: True, False | | ip_address | String | Yes | IP address of subscriber | 2a09:bac3:c911:2da5::48c:68 | | user_agent | String | Yes | User agent string of subscriber | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 | | latitude | String | Yes | Latitude coordinate (if available) | 45.10 | | longitude | String | Yes | Longitude coordinate (if available) | -94.39 | | city | String | Yes | City of subscriber (if available) | Darwin | | region | String | Yes | Region (state) of subscriber (if available) | Minnesota | | country | String | Yes | Country of subscriber (if available) | US | | subscriber_timezone | String | Yes | Timezone of subscriber (if available) | America/Chicago | | url | String | Yes | Full URL of event click | https://www.example.com/category/article.html?foo=bar | | url_host | String | Yes | Hostname of the URL | https://www.example.com | | url_path | String | Yes | Path portion of URL | /category/article.html | | url_query | String | Yes | Query string parameters of URL | ?foo=bar | ---