OrbTop

Buttondown Newsletter Archive Scraper

LEAD GENERATIONFOR CREATORS

Buttondown Newsletter Archive Scraper

Scrape posts from any Buttondown newsletter publication. Input a list of publication usernames and get back every post with title, publish date, excerpt, cover image, tags, paid flag, and full body text. Supports multi-publication fan-out in a single run.

What it does

Buttondown is the leading privacy-first newsletter platform used by developers, indie authors, and technical writers. This actor crawls the server-rendered Buttondown archive — no login required.

For each username you provide, the actor:

  1. Fetches https://buttondown.com/<username>/sitemap.xml to discover all post URLs.
  2. Visits the publication's archive page to extract the publication name, description, and per-post card metadata (excerpt, cover image, date, tags, paid flag).
  3. Visits each post's detail page to extract the title, publish date, and full body text.

Input

Field Type Description
usernames array Required. List of Buttondown usernames (e.g. ["cassidoo", "buttondown"]). You can also pass full URLs like https://buttondown.com/cassidoo.
maxItems integer Maximum posts to scrape per publication. Set 0 for unlimited. Default: 10.

Example input

{
  "usernames": ["cassidoo", "swyx"],
  "maxItems": 50
}

Output

Each record in the dataset contains:

Field Description
publication_username Buttondown username (e.g. cassidoo)
publication_name Publication display name
publication_description Publication about text
post_url Full URL to the post
post_title Post title
post_subtitle Subtitle, if present
author Author name
publish_date Publication date as shown on the page (e.g. May 25, 2026)
excerpt Short excerpt from the archive listing card
cover_image_url Cover image URL from the archive card
tags Comma-separated tag list
is_paid Whether the post is behind a paid subscription wall
full_text Full body text of the newsletter email
scraped_at ISO timestamp when this record was scraped

Example output record

{
  "publication_username": "cassidoo",
  "publication_name": "rendezvous with cassidoo",
  "publication_description": "Interviews, tips, and thoughts on software engineering...",
  "post_url": "https://buttondown.com/cassidoo/archive/permit-yourself-to-change-your-mind/",
  "post_title": "Permit yourself to change your mind",
  "post_subtitle": "",
  "author": "rendezvous with cassidoo",
  "publish_date": "May 25, 2026",
  "excerpt": "Hey friends! I hope you had a good week...",
  "cover_image_url": "",
  "tags": "",
  "is_paid": false,
  "full_text": "Hey friends!\nI hope you had a good week!...",
  "scraped_at": "2026-05-28T17:15:00.000Z"
}

How to find a Buttondown username

The username is the part of the publication URL after buttondown.com/. For example:

  • https://buttondown.com/cassidoo → username is cassidoo
  • https://buttondown.com/swyx → username is swyx

Any publication that has a public archive at https://buttondown.com/<username>/archive/ or a sitemap at https://buttondown.com/<username>/sitemap.xml works.

Limitations

  • Private posts: Posts behind a free-subscription gate are still fetched but flagged is_paid: false. Posts behind a paid-tier wall are flagged is_paid: true and may have truncated full_text.
  • Sitemap coverage: Only posts listed in the publication's sitemap are discovered. Publications without a sitemap or with a private-only archive return zero results.
  • Rate limiting: The actor uses a polite crawl rate. For large publications with thousands of posts, use maxItems to cap the run size.