Buttondown Newsletter Scraper avatar

Buttondown Newsletter Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Buttondown Newsletter Scraper

Buttondown Newsletter Scraper

Scrape posts and info from any public Buttondown newsletter (buttondown.com/{newsletter}) via its public archive pages. Browse a newsletter's full public archive, look up specific posts by URL, or fetch newsletter info. No login required.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Scrape posts and info from any public Buttondown newsletter — buttondown.com/{newsletter} — via its public archive pages. Works globally against any Buttondown-hosted newsletter. No login, no API key, no proxy required.

What this actor does

  • Three modes: posts, byPostUrls, newsletterInfo
  • Full archive pagination: walks a newsletter's entire public archive, newest first
  • Optional full-body enrichment: fetch each post's individual page for exact timestamps, author info, and complete HTML body
  • Filters: publish-date range, keyword (title/excerpt substring)
  • Empty fields are omitted — every record only contains fields that actually have data

Output fields

Posts (recordType: "post")

FieldDescription
postId{newsletterSlug}/{postSlug} composite ID
newsletterSlug, postSlugPost identity
title, excerptTitle and short description (always present, from the archive listing)
publishedDatePublish date, YYYY-MM-DD (from the archive listing, day precision)
featureImageCover image URL, if the post has one
postUrlCanonical archive URL
htmlFull HTML body (only with includeFullBody: true or mode=byPostUrls)
publishedAt, updatedAtExact ISO timestamps (only with full-body enrichment)
isAccessibleForFreeWhether the post is publicly free vs. paid-subscriber-gated (only with full-body enrichment; not present for Buttondown's own cross-posted /blog/ articles, which are always free)
articleSectionCategory/section label, when the post has one (only with full-body enrichment)
authorName, authorUrl, authorImageAuthor info (only with full-body enrichment)
ogTitle, ogDescription, ogImageSocial card fields (only with full-body enrichment)
languageNewsletter's declared page language (e.g. en, fr, pt-br), from the newsletter owner's account language setting

Newsletter info (recordType: "newsletter")

newsletterSlug, newsletterName, newsletterDescription, icon, language, newsletterUrl, archiveUrl, socialLinks (the author's own configured identity links — GitHub, X/Twitter, Bluesky, Mastodon, personal site, etc. — as {platform, url} pairs; only present when the newsletter owner has configured them)

Every record also includes recordType and scrapedAt (UTC ISO timestamp).

Input

FieldTypeDefaultDescription
modestringpostsposts / byPostUrls / newsletterInfo
newsletterSlugstringbuttondownThe newsletter's Buttondown slug, or a full URL
postUrlsarraymode=byPostUrls: exact archive post URLs
includeFullBodybooleanfalsemode=posts: fetch each post's page for full body/timestamps/author (slower)
dateFromstringISO date, published on/after
dateTostringISO date, published on/before
keywordstringCase-insensitive substring match on title/excerpt
maxItemsinteger50Hard cap (1–1000)

Example: a newsletter's full archive

{
"mode": "posts",
"newsletterSlug": "buttondown",
"maxItems": 50
}

Example: with full post bodies

{
"mode": "posts",
"newsletterSlug": "thesephist",
"includeFullBody": true,
"maxItems": 20
}

Example: posts in a date range

{
"mode": "posts",
"newsletterSlug": "buttondown",
"dateFrom": "2026-01-01",
"dateTo": "2026-12-31",
"maxItems": 50
}

Example: single post lookup

{
"mode": "byPostUrls",
"newsletterSlug": "buttondown",
"postUrls": ["https://buttondown.com/buttondown/archive/updates-from-july-4795/"]
}

Use cases

  • Content research — pull a newsletter's full public archive with metadata
  • Migration / backup — export a Buttondown newsletter's post history
  • Content monitoring — track a newsletter's publishing cadence and topics
  • Curation — filter posts by date range or keyword across a newsletter's history

FAQs

Does this require a Buttondown account or API key? No. This actor reads the same public archive pages any visitor sees at buttondown.com/{newsletter}/archive — no login required.

Will this work on any Buttondown newsletter? Yes, as long as the newsletter owner has public archives enabled (Buttondown lets writers mark individual emails as public, subscriber-only, or paid-only — this actor only sees what's publicly visible, same as a logged-out visitor).

Why is publishedDate day-precision but publishedAt has exact time? publishedDate comes from the archive listing page (which only shows a date, e.g. "August 6, 2026"). Set includeFullBody: true to also fetch each post's individual page, which includes an exact ISO timestamp.

What if a newsletter slug doesn't exist? The actor fails soft with a clear status message and emits zero records — it never crashes on a bad or private newsletter slug.

Is this actor global? Yes — Buttondown hosts newsletters worldwide with no regional restrictions. Any public newsletter's slug works as input.