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.
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.
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.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 apublication_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.Publications
Publications
The publications (newsletters) the API key can access, with their current all-time stats.Table:
publications · Primary key: id · Sync: Full tableSubscriptions
Subscriptions
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 tablePosts
Posts
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 tableSegments
Segments
Segments of every type and status, with the stats of their latest calculation.Table:
segments · Primary key: publication_id, id · Sync: Full tableSegment members
Segment members
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 tableAutomations
Automations
Automations (email workflows) with their journey counts and aggregate email stats.Table:
automations · Primary key: publication_id, id · Sync: Full tableAutomation journeys
Automation journeys
Every subscriber’s journey through every automation: when it started, finished or exited.Table:
automation_journeys · Primary key: publication_id, id · Sync: Full tableAutomation emails
Automation emails
The emails of every automation step (and A/B variant), with their engagement stats.Table:
automation_emails · Primary key: publication_id, id · Sync: Full tableDaily engagements
Daily engagements
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)Email blasts
Email blasts
One-off email blasts, active and inactive, with their stats.Table:
email_blasts · Primary key: publication_id, id · Sync: Full tableTiers
Tiers
Premium (paid) tiers with their prices and number of active subscriptions.Table:
tiers · Primary key: publication_id, id · Sync: Full tableCustom fields
Custom fields
The custom subscriber fields defined on each publication.Table:
custom_fields · Primary key: publication_id, id · Sync: Full tablePolls
Polls
Polls (voting and trivia) with their choices and vote counts.Table:
polls · Primary key: publication_id, id · Sync: Full tablePoll responses
Poll responses
Every subscriber response to every poll, with the post where it was collected.Table:
poll_responses · Primary key: publication_id, id · Sync: Full tablePodcasts
Podcasts
Podcasts hosted on beehiiv.Table:
podcasts · Primary key: publication_id, id · Sync: Full tablePodcast episodes
Podcast episodes
Episodes of every podcast.Table:
podcast_episodes · Primary key: publication_id, id · Sync: Full tableReferral program milestones
Referral program milestones
Milestones of the referral program and their rewards.Table:
referral_program_milestones · Primary key: publication_id, id · Sync: Full tableAd network reports
Ad network reports
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 tableImplementation 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) inrevenue;revenue_amountholds the same value as a number. - Deleted records: records deleted in beehiiv disappear from the Full table tables on the next sync.