Skip to main content
beehiiv is a newsletter platform: you publish posts by email and on the web, grow an audience of subscribers, organize them in segments and newsletter lists, run email automations, sell premium tiers and earn from the beehiiv Ad Network. This connector reads your workspace through the official beehiiv API and brings, for every publication, your subscribers, posts with their email and web stats, segments and their members, automations with their journeys and emails, daily engagement metrics, email blasts, tiers, custom fields, newsletter lists, polls, podcasts, the referral program and ad network reports.
The connector only reads data. It never creates, changes or deletes anything in beehiiv.

Configuring beehiiv as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the beehiiv option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

The beehiiv API uses an API key. To create one, open beehiiv and go to Settings > Integrations > API, click Create New API Key, give it a name (for example, Nekt) and copy the key. It is shown only once.
  • API Key: the key you created.
  • Start Date: the first day of the daily engagement metrics (the Daily engagements table). Every other table is always read in full, whatever this date.
  • Publication IDs (advanced, optional): the publications to sync, by ID (they start with pub_). Leave it empty to sync every publication of your workspace.
Create a key only for Nekt. beehiiv limits the number of requests per minute per key according to your plan (30 on Free, 180 on Lite, 500 on Pro, 800 on Enterprise), and a key shared with other tools makes the syncs slower. When the limit is reached, the sync pauses until it resets and then continues; no data is lost.
Once you’re done, click Next.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
  • Sync Type: keep the suggested type. Daily engagements is Incremental: each sync reads the last days again (they are still accumulating) and the new ones, and merges them into the table. The other tables are Full table: the beehiiv API cannot list records changed since a date, while statuses, tiers and stats keep changing on old records, so each sync reads them whole and replaces the table.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Most tables are read whole on every sync, so a daily sync is recommended; large audiences take longer, especially on the Free plan’s request limit. Optionally, you can configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here. Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Streams and Fields

Available streams

The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description. Every table except Publications has a publication_id column.

Tables that depend on a beehiiv feature

The API key reads everything your workspace has; there is no permission to grant per table. Some tables, however, read features that beehiiv offers only on some plans or to eligible publications:
When beehiiv refuses access to a table for any of your publications, that table is skipped in the sync (it is not updated) and the log names it and the publication; the other tables keep syncing. Deselect the table to stop the warning.

Fields by stream

Dates and times are in UTC. Fields marked String (JSON) hold a nested object or list as JSON text; use your warehouse’s JSON functions to read them. Stats are all-time totals as of the sync; use Daily engagements for opens and clicks per day.
The publications (newsletters) the API key can access, with their current all-time stats.Table: publications · Primary key: id · Sync: Full table
Every subscriber of every publication, whatever the status (active, inactive, pending…), with acquisition UTMs, custom fields, newsletter lists and engagement stats.Table: subscriptions · Primary key: publication_id, id · Sync: Full table
Every post (draft, scheduled, sent, archived) with its all-time email and web stats. Clicks per URL are in stats_clicks.Table: posts · Primary key: publication_id, id · Sync: Full table
Segments of every type and status, with the stats of their latest calculation.Table: segments · Primary key: publication_id, id · Sync: Full table
Which subscriptions belong to each segment, as of the segment’s last calculation. Join subscription_id with subscriptions.id.Table: segment_members · Primary key: publication_id, segment_id, subscription_id · Sync: Full table
Automations (email workflows) with their journey counts and aggregate email stats.Table: automations · Primary key: publication_id, id · Sync: Full table
Every subscriber’s journey through every automation: when it started, finished or exited.Table: automation_journeys · Primary key: publication_id, id · Sync: Full table
The emails of every automation step (and A/B variant), with their engagement stats.Table: automation_emails · Primary key: publication_id, id · Sync: Full table
Opens and clicks per day for each publication, for every email sent (posts and automations).Table: engagements · Primary key: publication_id, date · Sync: Incremental (by date, one bookmark per publication)
One-off email blasts, active and inactive, with their stats.Table: email_blasts · Primary key: publication_id, id · Sync: Full table
Premium (paid) tiers with their prices and number of active subscriptions.Table: tiers · Primary key: publication_id, id · Sync: Full table
The custom subscriber fields defined on each publication.Table: custom_fields · Primary key: publication_id, id · Sync: Full table
Newsletter lists (sub-newsletters subscribers opt in to).Table: newsletter_lists · Primary key: publication_id, id · Sync: Full table
Which subscriptions joined each newsletter list, and when they joined and left.Table: newsletter_list_subscriptions · Primary key: publication_id, id · Sync: Full table
Authors (users and guest authors) available to the posts.Table: authors · Primary key: publication_id, id · Sync: Full table
Polls (voting and trivia) with their choices and vote counts.Table: polls · Primary key: publication_id, id · Sync: Full table
Every subscriber response to every poll, with the post where it was collected.Table: poll_responses · Primary key: publication_id, id · Sync: Full table
Podcasts hosted on beehiiv.Table: podcasts · Primary key: publication_id, id · Sync: Full table
Episodes of every podcast.Table: podcast_episodes · Primary key: publication_id, id · Sync: Full table
Milestones of the referral program and their rewards.Table: referral_program_milestones · Primary key: publication_id, id · Sync: Full table
Ad network performance and payments: one row per advertisement link per post. Only for publications in the beehiiv Ad Network.Table: ad_network_reports · Primary key: publication_id, post_id, ad_link_id · Sync: Full table

Implementation notes

  • Page limit of the beehiiv API: lists that beehiiv pages by number (posts, segment members, segments and others) can be read up to page 100, that is 10,000 rows per list. A list beyond that fails its table with a message in the log instead of loading part of it. In practice, a segment with more than 10,000 members makes Segment members fail: deselect that table if you have such a segment.
  • Schedule: most tables are read whole on every sync, so a daily sync is recommended.
  • Segment members reflect the last calculation of each segment; dynamic segments are recalculated by beehiiv about once a day.
  • Ad network revenue comes formatted by beehiiv (for example $12.34) in revenue; revenue_amount holds the same value as a number.
  • Deleted records: records deleted in beehiiv disappear from the Full table tables on the next sync.