Newsletter Scraper avatar

Newsletter Scraper

Pricing

from $0.10 / 1,000 newsletter scrapeds

Go to Apify Store
Newsletter Scraper

Newsletter Scraper

Find newsletters by topic and read public Substack and LinkedIn newsletter details and issues. Get names, authors, article text, images, and public counts when available for newsletter research.

Pricing

from $0.10 / 1,000 newsletter scrapeds

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

📰 Find newsletters and collect public issues

Newsletter researchers, content teams, and developers can use Newsletter Scraper to find newsletters by topic and read public Substack and LinkedIn newsletters. Get newsletter details or issue rows with text, authors, dates, images, and public counts when available. Use the dataset to compare publications, review articles, or build a research table without copying each page by hand.

📚 Newsletter details and readable issue content

Choose one of two result types for each run:

  • Newsletters finds newsletters across publishing platforms by topic, or reads Substack and LinkedIn newsletter URLs. Rows can include names, descriptions, topics, images, links, pricing models, and sending frequency. Substack rows can also include public author profiles, contact emails, social links, subscriber statements, creation dates, and subscription offerings.
  • Issues collects public Substack posts or LinkedIn newsletter editions. Rows include readable text and can include HTML, Markdown, authors, dates, images, and engagement counts. Substack rows can also include tags, language, access information, and previews.

Data varies by platform and page. Missing optional values may be absent or empty. Author follower counts and newsletter subscriber counts are separate fields. Subscriber statements keep words such as “over” rather than turning them into exact counts.

▶️ Choose a topic or newsletter URL and run

  1. Choose Newsletters or Issues.
  2. For Newsletters, choose Topic and enter published topic names, or choose Newsletter URLs and add Substack or LinkedIn newsletter links.
  3. For Issues, add newsletter URLs to collect archive posts or exposed editions, or add direct issue URLs.
  4. Set Maximum results to a positive number to cap the total saved rows. Leave it blank or use 0 for all available results.
  5. Start the run, then open the dataset in Apify Console to inspect or export the rows.

Substack custom domains are supported. LinkedIn newsletter collection covers only editions exposed on the public newsletter page. The Actor does not require a Substack or LinkedIn login or API key and does not include paid-only text.

⚙️ Input

Input fields

FieldTypeWhat it does
resultTypestringRequired. Choose newsletters for newsletter details or issues for public article content and issue details. The form prefills newsletters; there is no schema default.
findNewslettersBystringFor newsletters, choose topic or newsletterUrls. Defaults to topic when omitted. Ignored for issues.
topicsarray of stringsRequired for Newsletters by Topic. Enter exact published topic names, such as science or self improvement, with one phrase per entry. Names are case-sensitive and can change. Free-form keywords, aliases, and spelling corrections are not supported. The form prefills science; there is no schema default. Other choices ignore this field.
urlsarray of objects or stringsRequired for Newsletters by Newsletter URLs and for Issues. Enter complete https:// URLs. The form uses objects with a url field; plain URL strings are also accepted. Topic lookup ignores this field. No default or prefill.
urls[].urlstringA Substack publication URL, including a custom domain, or a LinkedIn newsletter URL. For Issues, a direct Substack post or LinkedIn /pulse/ issue URL is also accepted.
publishedAfterstringOptional UTC date in YYYY-MM-DD form. For Substack Issues, keep posts published strictly after midnight at the start of this date. Applies to archives and direct posts. Blank means all dates. Does not filter LinkedIn editions and is ignored for Newsletters. No default.
maxItemsintegerOptional total row limit across all submitted values, for either result type. Use a whole number of 0 or more. Omitted or 0 means all available results. The form prefills 10; this is not a schema default. No schema upper bound. A run may return fewer rows than requested.

Only fields for the chosen result type and discovery choice are used. Each run uses one result type. A list of topics or a list of supported URLs can be processed in one run.

Successful default input

This is the public input from a successful run of the current beta build.

{
"maxItems": 10,
"resultType": "newsletters",
"findNewslettersBy": "topic",
"topics": [
"science"
]
}

🧾 Output

Output fields

Each saved row is one newsletter or one issue. Optional fields depend on what the public page provides. The two row shapes use the tables below.

Newsletter rows

FieldTypeWhat it does
resultTypestringAlways newsletter.
urlstringPublic newsletter URL.
titlestringNewsletter name.
platformstringStated publishing platform, when known.
descriptionstringNewsletter description.
topicsarray of stringsPublished topics and categories.
imageUrlstringCover or logo image URL.
websiteUrlstringNewsletter website URL.
signupUrlstringPublic signup page URL.
pricingModelstringStated free or paid pricing model. An unknown model can be absent.
frequencystringStated sending or publication frequency.
subscriberCountstringPublic subscriber statement, including qualifiers such as “over.”
createdAtstringPublication creation date stated by the platform.
authorsarray of objectsPublic newsletter authors or creators.
authors[].namestringAuthor name.
authors[].urlstringAuthor profile URL.
authors[].idstringPlatform author ID.
authors[].biographystringPublic author biography.
authors[].imageUrlstringAuthor image URL.
authors[].followerCountnumberPublic author follower count.
authors[].emailsarray of stringsPublic author contact email addresses, when available.
authors[].socialLinksarray of stringsPublic author social profile URLs.
authors[].accountAttributesarray of objectsAccount attributes stated by Substack.
authors[].accountAttributes[].namestringAttribute name.
authors[].accountAttributes[].valuestringStated attribute value, including values such as false.
subscriptionOfferingsarray of objectsStated subscription offerings. These describe the newsletter, not Actor charges.
subscriptionOfferings[].namestringOffering name.
subscriptionOfferings[].pricestringStated price, currency, and billing period. Prices can be expressed in minor currency units.
subscriptionOfferings[].descriptionstringStated offering details and benefits.

Genuine newsletter row

This complete row came from a successful current-beta run. Its subscription prices and subscriber count are saved page values, not current offers or Actor prices.

{
"resultType": "newsletter",
"platform": "Substack",
"url": "https://www.lennysnewsletter.com",
"title": "Lenny's Newsletter",
"description": "Deeply researched product, growth, and career advice for product leaders, founders, and ambitious builders.\n",
"createdAt": "2019-06-01T15:35:37.885Z",
"imageUrl": "https://substackcdn.com/image/fetch/$s_!8MSN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F441213db-4824-4e48-9d28-a3a18952cbfc_592x592.png",
"authors": [
{
"id": "1849774",
"name": "Lenny Rachitsky",
"url": "https://substack.com/@lenny",
"biography": "Writing • Angel investing • Advising",
"imageUrl": "https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/afba5161-65bb-4d99-8d6b-cce660917fa1_1540x1540.png",
"followerCount": 1386994,
"emails": [],
"socialLinks": [
"https://x.com/lennysan",
"https://tiktok.com/@lennyrachtsky",
"https://www.youtube.com/c/LennysPodcast"
],
"accountAttributes": [
{
"name": "profile_disabled",
"value": "false"
}
]
},
{
"id": "3667529",
"name": "Kiyani",
"url": "https://substack.com/@kiyani",
"biography": "Student of products. I write to learn, share and meet kindred spirits ✨. ",
"imageUrl": "https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/48e9d3e5-91eb-41be-9701-420b01f6585f_313x321.jpeg",
"followerCount": 2060,
"emails": [],
"socialLinks": [
"https://x.com/KiyaniBba"
],
"accountAttributes": [
{
"name": "profile_disabled",
"value": "false"
}
]
}
],
"subscriptionOfferings": [
{
"name": "Free",
"description": "Occasional free newsletter posts on product, growth, and career"
},
{
"name": "Monthly",
"price": "USD 2000 minor units / 1 month",
"description": "Full archive: 500+ newsletter posts, podcast transcripts & key takeaways\nPrivate Slack with 30K+ PMs, founders & leaders + local meetups, AMAs & mentorship\nProduct Pass access: Free 20+ premium AI and product tools ($30,000+ in value)"
},
{
"name": "Annual",
"price": "USD 20000 minor units / 1 year",
"description": "Full archive: 500+ newsletter posts, podcast transcripts & key takeaways\nPrivate Slack with 30K+ PMs, founders & leaders + local meetups, AMAs & mentorship\nProduct Pass access: Free 20+ premium AI and product tools ($30,000+ in value)"
},
{
"name": "Insider Tier",
"price": "USD 40000 minor units / 1 year",
"description": "Full archive: 500+ newsletter posts, podcast transcripts & key takeaways\nPrivate Slack with 30K+ PMs, founders & leaders + local meetups, AMAs & mentorship\nProduct Pass access: Free 20+ premium AI and product tools ($30,000+ in value)\nEverything in Annual, plus priority access to every new Product Pass tool + Insider-only exclusives"
}
],
"pricingModel": "Paid subscriptions available",
"subscriberCount": "Over 1,200,000 subscribers",
"websiteUrl": "https://www.lennysnewsletter.com",
"signupUrl": "https://www.lennysnewsletter.com/subscribe"
}

Issue rows

Substack and LinkedIn issues share this row shape. Substack includes all three content formats. The schema requires readable text for every issue; other values are present when available.

FieldTypeWhat it does
resultTypestringAlways issue.
platformstringSubstack or LinkedIn.
urlstringPublic issue URL.
titlestringIssue title.
newsletterUrlstringParent newsletter URL, when stated.
subtitlestringIssue subtitle.
publishedAtstringStated publication date and time.
modifiedAtstringStated modification date and time.
excerptstringStated excerpt or content preview.
topicsarray of stringsStated Substack post tags and categories.
languagestringStated Substack post language.
accessstringStated Substack paid-access information, such as everyone.
authorsarray of objectsPublic issue authors. Substack uses the issue's byline authors, which can differ from newsletter contributors.
authors[].namestringAuthor name.
authors[].urlstringAuthor profile URL.
authors[].idstringPlatform author ID.
authors[].biographystringPublic author biography.
authors[].imageUrlstringAuthor image URL.
authors[].followerCountnumberPublic author follower count.
authors[].emailsarray of stringsPublic author contact email addresses, when available.
authors[].socialLinksarray of stringsPublic author social profile URLs.
authors[].accountAttributesarray of objectsAccount attributes stated by Substack.
authors[].accountAttributes[].namestringAttribute name.
authors[].accountAttributes[].valuestringStated attribute value.
contentobjectPublicly readable issue content. Formats can differ in links, images, and layout.
content.textstringReadable issue text.
content.htmlstringPublic issue content in HTML.
content.markdownstringPublic issue content in Markdown.
imagesarray of objectsPublic issue images. URLs link to image files; the Actor does not store image copies.
images[].urlstringDirect image URL.
images[].altTextstringStated alternative text.
images[].captionstringStated caption.
images[].widthnumberImage width in pixels.
images[].heightnumberImage height in pixels.
engagementobjectPublic engagement totals stated by the platform.
engagement.likesnumberStated Substack like total.
engagement.reactionsnumberStated reaction total.
engagement.commentsnumberStated comment total.

Genuine issue row, shortened

This row came from a successful current-beta run. The large content object is replaced by "..." to keep the example short. In the dataset, it holds the public article body in text, HTML, and Markdown for this row.

{
"resultType": "issue",
"platform": "LinkedIn",
"newsletterUrl": "https://www.linkedin.com/newsletters/ask-richard-6792750480419241984",
"url": "https://www.linkedin.com/pulse/whats-one-belief-you-had-unlearn-order-keep-growing-richard-branson-9gdzc",
"title": "What's one belief you had to unlearn in order to keep growing?",
"publishedAt": "2026-08-07T15:52:56.000+00:00",
"modifiedAt": "2026-08-07T15:53:25.000+00:00",
"excerpt": "What a fantastic question. Thank you for asking it, Jean.",
"authors": [
{
"name": "Richard Branson",
"url": "https://www.linkedin.com/in/rbranson",
"imageUrl": "https://media.licdn.com/dms/image/v2/C4D03AQHh6_Wth5f3rQ/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1625181963183?e=2147483647&v=beta&t=zA3HEaoUjuU4RhgSNCrqX5NlSldv_di7CeIK7-iyjqI",
"followerCount": 18646717
}
],
"content": "...",
"images": [
{
"url": "https://media.licdn.com/dms/image/v2/D5612AQG5DV-WqDJl8A/article-cover_image-shrink_720_1280/B56Z_c6JyTHcAQ-/0/1786117661308?e=2147483647&v=beta&t=VkzhNom3yM8LrKiZMK3MCkkDB_oiRRXUBF0RTaBeu1E",
"altText": "What's one belief you had to unlearn in order to keep growing?",
"caption": "",
"width": 1280,
"height": 720
},
{
"url": "https://media.licdn.com/dms/image/v2/D5612AQE-4M3KRKhUDg/article-inline_image-shrink_1000_1488/B56Z_c6_U6KEAI-/0/1786117879472?e=2147483647&v=beta&t=_Mq_1iA0sXIzR79yVOTm8G6IGrk28WCjpH8csJkVz1k",
"altText": "Article content",
"caption": "Me, and the team at Student",
"width": 800,
"height": 512
}
],
"engagement": {
"reactions": 3870,
"comments": 999
}
}

💳 Pricing

The Actor uses pay-per-event pricing. Newsletter scraped charges once for each saved newsletter. Newsletter issue charges once for each saved public issue. Both events have the same price for each Apify tier:

Apify tierPrice per newsletter or issue
Free$0.0002
Bronze$0.00015
Silver$0.00015
Gold$0.0001
Platinum$0.00005
Diamond$0.00005

There is no separate Actor event for setup, failed lookups, or empty searches. Only successfully saved rows incur these event charges. Repeated result URLs are saved and charged once per run. Check the Store pricing and your run charge limit before starting.

🔌 Integrations

Read and export the dataset in Apify Console, or fetch rows through the Apify API. Use Apify schedules for repeat runs and webhooks to notify your own workflow when a run finishes.

❓ FAQ

Why did my topic return no newsletters?

Topic lookup needs an exact published name. It does not accept general search phrases or fix spelling. For example, use science, not a misspelling or a longer search phrase. Topic names can change. A run can also return fewer rows when pages are unavailable.

Does LinkedIn collection include every past edition?

No. A newsletter URL collects only the edition links exposed on its public newsletter page. You can also submit a direct public LinkedIn issue URL. The Substack date filter does not apply to LinkedIn editions.

Can I collect paid-only content or private subscriber lists?

No. The Actor collects public newsletter data and readable issue content. It does not include text behind paid access restrictions, private subscriber identities, or private analytics. Public subscriber statements and author follower counts may be available.

Does the date filter include the chosen day?

For Substack Issues, publishedAfter uses a strict timestamp comparison with midnight UTC at the start of the chosen date. A post later that day qualifies; a post exactly at that midnight does not. It applies to direct posts and archives.

What happens when the same newsletter or issue appears twice?

The Actor saves the first eligible row for a result URL and skips later rows with that same URL in the run. It does not combine fields from those later matches. The limit counts saved rows across all submitted values.

What if one lookup fails?

The Actor can keep valid rows while other lookups fail. Missing optional data stays absent or empty. A technical failure that prevents all requested data from being read can fail the run. A successful run with no matching data can have an empty dataset.

Can I collect Beehiiv or Ghost article archives?

This Actor can discover newsletter details across platforms by topic. URL-based newsletter and issue collection supports Substack and LinkedIn. Use a separate platform Actor for Beehiiv or other article archives.

Is this an open-source newsletter scraper I run on my computer?

This page describes the hosted Apify Actor. Run it in Apify Console or call it through the Apify API. It does not promise a separate open-source package or local setup.

📝 Changelog

v0.0 (29-10-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é