Beehiiv Newsletter Scraper avatar

Beehiiv Newsletter Scraper

Pricing

from $0.15 / 1,000 posts

Go to Apify Store
Beehiiv Newsletter Scraper

Beehiiv Newsletter Scraper

Collect public Beehiiv newsletter profiles and posts from submitted URLs. Return publication details, post metadata, available content in plain text, Markdown, or HTML, plus images, links, and sponsor signals in an Apify dataset. Public pages need no customer credentials.

Pricing

from $0.15 / 1,000 posts

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

🐝 Turn public Beehiiv pages into usable data

Researchers, newsletter teams, marketers, and developers can use this Actor to read public Beehiiv pages and save structured rows. Get newsletter profiles, post metadata, public content, sponsor details, and product page data in an Apify dataset, so you can review or reuse source data without copying it by hand.

The Actor reads public Beehiiv pages and does not bypass private or subscriber-only content.

Try these workflows

📦 Beehiiv records in three shapes

Each saved row has a recordType and a public url. The three shapes are post, newsletterProfile, and productPage. Optional fields appear when the public page provides them.

Post rows can include publication and author details, access state, preview text, content in plain text, Markdown, and HTML, reading signals, outbound links, and sponsor details with UTM values when found.

▶️ Collect a focused Beehiiv result set

  1. Choose one result type: Posts, Newsletter profiles, or Product pages.
  2. Add the matching public Beehiiv URLs.
  3. For Posts, optionally filter by keyword, date, access level, or reading time.
  4. Set maxItems to a positive limit when you want to stop early. Leave it empty to return all available results until the source is exhausted.
  5. Start the run and open the dataset link in the output.

⚙️ Input

Choose one result type for each run. Fields for the other result types are ignored. The input form accepts public Beehiiv publication, post, or product page URLs.

Input fields

FieldTypeWhat it does
resultTypestringRequired. Chooses posts, newsletterProfiles, or productPages.
postsobjectPost options. Use when resultType is posts.
posts.urlsarray of stringsAdds public Beehiiv publication or post URLs. A publication URL finds its public posts. A post URL retrieves that post.
posts.keywordsarray of stringsOptionally keeps posts that match one or more words or phrases.
posts.dateFromdateKeeps posts published on or after this UTC date in YYYY-MM-DD form.
posts.dateTodateKeeps posts published on or before this UTC date in YYYY-MM-DD form.
posts.accessLevelstringKeeps posts with the selected public state: all, free, premium, preview, metadataOnly, or unavailable.
posts.readingTimeMinintegerKeeps posts with at least this estimated reading time in minutes.
posts.readingTimeMaxintegerKeeps posts with no more than this estimated reading time in minutes.
newsletterProfilesobjectNewsletter profile options. Use when resultType is newsletterProfiles.
newsletterProfiles.publicationUrlsarray of stringsAdds public Beehiiv publication URLs.
productPagesobjectProduct page options. Use when resultType is productPages.
productPages.urlsarray of stringsAdds public Beehiiv product page URLs.
maxItemsintegerOptional positive work limit for the selected result type. Leave it empty to return all available results until the source is exhausted.

Default input

This is the public input from a successful current-beta default-input run:

{
"resultType": "posts",
"posts": {
"urls": [
"https://product.beehiiv.com/p/post-likes-comments-sharing"
]
},
"maxItems": 1
}

🧾 Output

The run output contains a link to the default dataset. The dataset holds one row for each saved result.

Run output

FieldTypeWhat it does
datasetUrlURLOpens the collected Beehiiv results in the default dataset.

Post rows

FieldTypeWhat it does
recordTypestringAlways post for this shape.
urlURLPublic URL for the post.
titlestringPublic post title.
descriptionstringPublic post description or summary, when available.
publishedAtdate-timePublication date and time from the public page.
publicationobjectPublic identity and links for the publication.
publication.namestringPublic publication name.
publication.canonicalUrlURLCanonical public URL of the publication, when available.
publication.domainstringPublic domain used by the publication, when available.
publication.logoUrlURLPublic publication logo URL, when available.
publication.socialLinksarray of objectsPublic social links listed by the publication, when available.
publication.socialLinks[].platformstringSocial platform named by the source.
publication.socialLinks[].urlURLPublic social profile URL.
authorobjectPublic author information for the post.
author.namestringPublic author name.
author.urlURLPublic author profile URL, when available.
author.imageUrlURLPublic author image URL, when available.
accessLevelstringPublic post state: free, premium, preview, metadataOnly, or unavailable.
previewTextstringPublic preview text for the post, when available.
contentobjectPublic post content in the formats that are available.
content.plainTextstringPublic post content as plain text, when available.
content.markdownstringPublic post content as clean Markdown, when available.
content.htmlstringPublic post content as HTML, when available.
readingTimeMinutesintegerEstimated reading time in minutes, when available.
wordCountintegerNumber of words in the public post, when available.
coverImageUrlURLPublic post cover image URL, when available.
outboundLinksarray of URLsUnique public links cited in the post.
tagsarray of stringsPublic post tags or topical categories, when available.
sponsorsarray of objectsSponsor placements found in the public post, when available.
sponsors[].namestringPublic sponsor name.
sponsors[].markerPhrasestringPhrase that marked the sponsor placement, when available.
sponsors[].destinationUrlURLPublic sponsor destination URL, when available.
sponsors[].utmobjectUTM attribution values on the sponsor link, when available.
sponsors[].utm.sourcestringUTM source value.
sponsors[].utm.mediumstringUTM medium value.
sponsors[].utm.campaignstringUTM campaign value.
sponsors[].utm.termstringUTM term value.
sponsors[].utm.contentstringUTM content value.

Example post row

This shortened row is from a successful current-beta run. Long content and the outbound link list use "..." as omission markers.

{
"recordType": "post",
"url": "https://breakingandentering.beehiiv.com/p/liv-golf-lawsuit-and-emmy-nominated-director-presented-by-tatari",
"title": "LIV Golf Lawsuit and Emmy Nominated Director | Presented by Tatari",
"description": "Last show of the week!",
"publishedAt": "2026-08-20T17:42:30.795Z",
"publication": {
"name": "what's good",
"canonicalUrl": "https://breakingandentering.beehiiv.com/",
"domain": "breakingandentering.beehiiv.com",
"logoUrl": "https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/publication/logo/0948c743-516e-495f-ba1e-baf36b9b2d51/72435995-C3C7-49A5-82EF-6B29283A7FB9.png"
},
"accessLevel": "free",
"previewText": "Last show of the week!",
"content": {
"plainText": "...",
"markdown": "...",
"html": "..."
},
"readingTimeMinutes": 1,
"wordCount": 414,
"coverImageUrl": "https://beehiiv-images-production.s3.amazonaws.com/uploads/publication/thumbnail/0948c743-516e-495f-ba1e-baf36b9b2d51/landscape_Untitled_design__4_.png",
"outboundLinks": [
"..."
],
"sponsors": [
{
"name": "Tatari",
"markerPhrase": "Presented by",
"destinationUrl": "https://lp.tatari.tv/breaking-and-entering?utm_campaign=49261468-Breaking+%26+Entering&utm_source=Breaking+%26+Entering&utm_medium=podcast&utm_content=LP",
"utm": {
"source": "Breaking & Entering",
"medium": "podcast",
"campaign": "49261468-Breaking & Entering",
"content": "LP"
}
}
],
"author": {
"name": "Jack Westerkamp",
"imageUrl": "https://beehiiv-images-production.s3.amazonaws.com/static_assets/gradient_avatar_3.png"
}
}

Newsletter profile rows

FieldTypeWhat it does
recordTypestringAlways newsletterProfile for this shape.
urlURLPublic URL used for the newsletter profile.
descriptionstringPublic newsletter description, when available.
publicationobjectPublic newsletter identity and links.
publication.namestringPublic publication name.
publication.canonicalUrlURLCanonical public URL of the publication, when available.
publication.domainstringPublic domain used by the publication, when available.
publication.logoUrlURLPublic publication logo URL, when available.
publication.socialLinksarray of objectsPublic social links listed by the publication, when available.
publication.socialLinks[].platformstringSocial platform named by the source.
publication.socialLinks[].urlURLPublic social profile URL.
categoriesarray of stringsPublic newsletter categories, when available.
avatarUrlURLPublic newsletter avatar URL, when available.
publishedPostCountintegerNumber of published posts shown by the public profile, when available.

Example newsletter profile row

This complete row is from a successful current-beta run:

{
"recordType": "newsletterProfile",
"url": "https://product.beehiiv.com/",
"description": "The latest product drops on beehiiv.",
"publication": {
"name": "Product Updates",
"canonicalUrl": "https://product.beehiiv.com/",
"domain": "product.beehiiv.com",
"logoUrl": "https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/publication/logo/a8e88f38-1bf6-4bad-8154-2c897fe51252/Social_Profile_pic.png",
"socialLinks": [
{
"platform": "facebook",
"url": "https://www.facebook.com/trybeehiiv"
},
{
"platform": "instagram",
"url": "https://www.instagram.com/beehiiv/"
},
{
"platform": "linkedin",
"url": "https://www.linkedin.com/company/beehiiv"
},
{
"platform": "tiktok",
"url": "https://www.tiktok.com/@beehiiv"
},
{
"platform": "twitter",
"url": "https://twitter.com/beehiiv"
},
{
"platform": "youtube",
"url": "https://www.youtube.com/@beehiiv"
},
{
"platform": "bluesky",
"url": "https://bsky.app/profile/beehiiv.com"
}
]
},
"avatarUrl": "https://media.beehiiv.com/cdn-cgi/image/fit=scale-down,format=auto,onerror=redirect,quality=80/uploads/publication/logo/a8e88f38-1bf6-4bad-8154-2c897fe51252/Social_Profile_pic.png",
"publishedPostCount": 150
}

Product page rows

FieldTypeWhat it does
recordTypestringAlways productPage for this shape.
urlURLPublic URL used for the product page.
titlestringPublic product title.
publishedAtdate-timePublication date and time supplied by the public page.
descriptionstringPublic product description or summary.
contentobjectPublic product page content in the formats that are available.
content.plainTextstringPublic product content as plain text, when available.
content.markdownstringPublic product content as clean Markdown, when available.
content.htmlstringPublic product content as HTML, when available.
mediaarray of objectsPublic media assets available on the product page.
media[].urlURLMain public URL for the media asset.
media[].typestringMedia type supplied by the public page, when available.
media[].altTextstringPublic alternative text for the media asset, when available.

Example product page row

This complete row is from a successful current-beta run:

{
"recordType": "productPage",
"url": "https://www.theunpanickedself.com/products/3-step-protocol-for-panic",
"title": "3-Step Protocol For Panic",
"publishedAt": "2026-03-06T19:23:21.312Z",
"description": "A free, practical guide for anyone experiencing panic attacks. The 3 Step Protocol For Panic walks you through a simple, actionable framework to stop fighting panic — and start listening to it instead. No breathing exercises required. Just three steps grounded in real experience and the science of how panic actually works.",
"content": {
"plainText": "Most advice tells you to calm panic down. This guide takes a different approach — because fighting panic is exactly what makes it worse. \nThe 3 Step Protocol For Panic is built on one core insight: panic isn't the enemy. It's a signal. And the moment you stop trying to eliminate it, something shifts. Inside you'll find a clear, actionable framework to move through a panic attack without resistance — and guiding questions to make each step personal to your experience. Designed for the moment when nothing else is working.",
"markdown": "Most advice tells you to calm panic down. This guide takes a different approach — because fighting panic is exactly what makes it worse. \n\nThe 3 Step Protocol For Panic is built on one core insight: **panic isn't the enemy.** It's a signal. And the moment you stop trying to eliminate it, something shifts. Inside you'll find a clear, actionable framework to move through a panic attack without resistance — and guiding questions to make each step personal to your experience. Designed for the moment when nothing else is working.",
"html": "<p>Most advice tells you to calm panic down. This guide takes a different approach — because fighting panic is exactly what makes it worse. </p><p>The 3 Step Protocol For Panic is built on one core insight: <strong>panic isn't the enemy.</strong> It's a signal. And the moment you stop trying to eliminate it, something shifts. Inside you'll find a clear, actionable framework to move through a panic attack without resistance — and guiding questions to make each step personal to your experience. Designed for the moment when nothing else is working.</p>"
},
"media": [
{
"url": "https://beehiiv-images-production.s3.amazonaws.com/uploads/product_variant_asset/asset/650dd961-f098-4ca4-b858-a9e229519995/3-step-protocol-image.png"
}
]
}

💳 Pricing

What is charged

One successfully saved public post is one billable event. The event uses tiered pricing, so the amount depends on the Apify pricing tier on your account. A run with no saved post does not create this post event. Newsletter profile and product page rows are not charged by this event.

🔌 Integrations

Use the Apify Console or API to start a run and read the datasetUrl in its output. The Actor reads public Beehiiv URLs and does not need customer credentials for those pages.

Video guide

❓ FAQ

Can it read private or paid Beehiiv posts?

No. It does not promise private or subscriber-only full text. Use the public access state and preview fields when the source exposes them.

Should I submit a publication URL or a post URL?

Use a publication URL when you want to find its public posts. Use a direct post URL when you want that post. Both go in posts.urls.

What does maxItems do?

It is an optional positive work limit for the selected result type. Leave it empty to return all available results until the source is exhausted.

What content formats can a post row include?

When public content is available, a post row can include plain text, clean Markdown, and HTML. A restricted page may expose less content.

What does a newsletter profile row contain?

It can include the publication name, canonical URL or domain, logo, social links, description, avatar, categories, and published-post count when the public page shows them.

Can one run use Posts and Newsletter profiles together?

No. Choose one result type for a run, then add the matching URLs. Run the Actor again for another result type.

What does the access-level filter do?

It keeps posts with the public state you choose. It does not unlock premium or private content.

What does a product page row contain?

It can include the page title, date, description, available text formats, and public media links.

📝 Changelog

v0.0 (22-09-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré