Setting up S3-compatible storage integrations

Notice: Cloud storage integrations are available on Enterprise plans 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. Once the Available Apps open, navigate to your storage provider and click Connect

  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.

  4. In the Test your connection step, enter your bucket's region and the credentials used to access it. When done, click Next.

Note: If you run into issues testing your connection at this step, refer to the platform-specific sections below.
  1. 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.


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.


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.


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 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.


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.

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.

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 NameData TypeNullableDescriptionSample Value
event_idStringNoUnique identifier for the event5732d85c-95e5-4dd3-939b-30523c0710f1
publication_nameStringNoName of the publicationJohn Doe’s Newsletter
publication_idStringNoUnique identifier for the publicationpub_b95740fa-<yourpublicationid>
post_nameStringNoTitle of the postExample Newsletter: Feb 2nd, 2026
post_idStringNoUnique identifier for the postpost_4e498cac-57e6-460b-84c1-<id>
emailStringNoSubscriber email address[email protected]
subscription_idStringNoUnique identifier for subscribersub_e53b0251-b57a-<id>
timestampDateTimeNoTime of eventJanuary 21, 2026, 12:41 PM
eventStringNoType of eventOne of: click, delivered, processed, deferred, open, bounce, dropped, spamreport
is_verifiedBooleanYesWhether click is verifiedOne of: True, False
ip_addressStringYesIP address of subscriber2a09:bac3:c911:2da5::48c:68
user_agentStringYesUser agent string of subscriberMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
latitudeStringYesLatitude coordinate (if available)45.10
longitudeStringYesLongitude coordinate (if available)-94.39
cityStringYesCity of subscriber (if available)Darwin
regionStringYesRegion (state) of subscriber (if available)Minnesota
countryStringYesCountry of subscriber (if available)US
subscriber_timezoneStringYesTimezone of subscriber (if available)America/Chicago
urlStringYesFull URL of event clickhttps://www.example.com/category/article.html?foo=bar
url_hostStringYesHostname of the URLhttps://www.example.com
url_pathStringYesPath portion of URL/category/article.html
url_queryStringYesQuery string parameters of URL?foo=bar


Was this article helpful?

Related Articles