Newsletter Sponsorship Intelligence — Substack, beehiiv & Ghost avatar

Newsletter Sponsorship Intelligence — Substack, beehiiv & Ghost

Pricing

from $10.00 / 1,000 newsletter issues

Go to Apify Store
Newsletter Sponsorship Intelligence — Substack, beehiiv & Ghost

Newsletter Sponsorship Intelligence — Substack, beehiiv & Ghost

Extract sponsors and ad placements from Substack, beehiiv, and Ghost newsletters. Give it newsletter URLs and get, per issue: the sponsor brand names, the marker phrase (Presented by / Together with / Sponsored by), the sponsor link, and utm_source / utm_campaign. Pure HTTP, no logins, no LLM.

Pricing

from $10.00 / 1,000 newsletter issues

Rating

0.0

(0)

Developer

Esteban Ortega

Esteban Ortega

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Newsletter Sponsorship Intelligence — Who Sponsors Substack, beehiiv & Ghost (Sponsor & Advertiser Extractor)

Find out who sponsors a newsletter — any Substack, beehiiv, or Ghost newsletter you choose. Give this actor a list of newsletter URLs and it returns, for each recent issue, the sponsor brand names, the marker phrase that flagged the ad ("Presented by", "Together with", "Sponsored by", "Brought to you by"), the sponsor link, and the utm_source / utm_campaign tracking parameters. Pure HTTP, no logins, no API keys, no LLM — just fast, deterministic parsing, with 1.000 precision and recall on the ground-truth test set across all three platforms.

Built for ad-sales teams, competitive-intelligence analysts, media buyers, and sponsorship marketplaces who need to know which brands are advertising in which newsletters — and how often.

Sponsorship analytics on newsletters you choose to monitor: you supply the URLs, and the actor reads only public issue pages. No inbox access, no private content.


What it does

  • Auto-detects the platform from a bare newsletter URL: Substack (including custom domains), beehiiv, or Ghost.
  • Enumerates recent issues — Substack archive API, beehiiv /archive + sitemap.xml, Ghost /rss/ full-content feed (Ghost depth is capped at the RSS window, ~15 newest issues).
  • Extracts sponsors with pure heuristics — case-insensitive marker phrases anchored to standalone ad headers or sentence-initial lines, brand names repaired from the block's outbound link (destination domain, redirect-link slug, or utm_source as a last resort).
  • Avoids the usual false positives — footer "sponsoring the podcast" boilerplate, utm_source strings buried in <script>, self-promotion (absolute links back to the newsletter's own domain are treated as internal), and organic "in partnership with…" prose are all filtered out.
  • Fails gracefully, bills honestly — an unsupported platform (e.g. a custom Next.js site like Milk Road) returns a single unsupported_platform record; an unreachable site returns a single error record; per-issue fetch failures are retried (2 retries with backoff), then counted in the newsletter's summary (issues_failed) instead of being pushed as junk rows. At most one error record per newsletter URL.
  • Streams results — each item is pushed to the dataset the moment it is scraped, so a timeout or migration keeps everything collected so far.

Output fields

One dataset item per successfully read issue (type: "issue"), plus an optional per-newsletter summary. Every record carries the same key set (summary-only fields are null on issue records and vice versa).

{
"type": "issue",
"newsletter": "https://www.therundown.ai",
"platform": "beehiiv",
"url": "https://www.therundown.ai/p/google-gemini-lineup-has-a-pro-sized-hole",
"slug": "google-gemini-lineup-has-a-pro-sized-hole",
"date": "2026-07-22",
"title": "Google’s Gemini lineup has a Pro-sized hole",
"is_paid_truncated": false,
"sponsor_count": 2,
"sponsors": [
{
"name": "Unwrap",
"marker_phrase": "together with",
"link": "https://cal.com/unwrap/quick-connect",
"utm_source": null,
"utm_campaign": null
},
{
"name": "Google for Startups",
"marker_phrase": "presented by",
"link": "https://cloud.google.com/startup",
"utm_source": null,
"utm_campaign": null
}
],
"scraped_at": "2026-07-23T08:15:00.000000+00:00",
"error": null,
"issues_found": null,
"issues_with_sponsors": null,
"total_sponsors": null,
"issues_failed": null
}
FieldMeaning
typeissue, newsletter_summary, unsupported_platform, or error
newsletterBase URL of the publication
platformsubstack, beehiiv, ghost, or unsupported
url, slug, date, titleIssue identity
is_paid_truncatedtrue when a Substack paid issue returned only the free preview (late-body ads may be missed; sponsor blocks usually sit above the paywall)
sponsor_countNumber of distinct sponsors found in the issue
sponsors[]name, marker_phrase, link, utm_source, utm_campaign
scraped_atISO timestamp of the scrape (every record)
errorError message: on an error/unsupported_platform record the reason; on a newsletter_summary the first per-issue fetch error, if any
issues_foundSummary only: issues successfully read for this newsletter
issues_with_sponsorsSummary only: how many of those issues carried at least one sponsor
total_sponsorsSummary only: total sponsor mentions across the issues
issues_failedSummary only: issue fetches that still failed after retries (not billed as rows)

Input

FieldTypeDescription
newsletterUrlsarray (required)Newsletter home/base URLs. Platform is auto-detected. An explicitly empty list runs nothing (the demo defaults apply only when the field is omitted).
maxIssuesPerNewsletterintegerMost-recent issues to read per newsletter (default 3). Each successfully read issue is one billed result; Ghost is capped at its ~15-issue RSS window.
dateFloorstringOptional ISO date (YYYY-MM-DD); skip issues published before it. Any other format fails the run immediately, before any billing.
includeSummarybooleanEmit a per-newsletter newsletter_summary record (default true). If disabled and fetches failed, a single error record still reports the failures.
requestDelayintegerPolite seconds between requests (default 2).
proxyConfigurationobjectApify Proxy config. Datacenter is the default; switch to residential if Substack/beehiiv challenge you.

Minimal input:

{
"newsletterUrls": ["https://www.therundown.ai", "https://blog.bytebytego.com"],
"maxIssuesPerNewsletter": 5
}

A pay-per-use alternative to Who Sponsors Stuff, Rephonic, and Podscan — no monthly seat

The incumbent sponsor-intelligence tools are subscriptions: Who Sponsors Stuff is a yearly contract, Rephonic runs $99–299/month, Podscan $100+/month — and none of them lets you point the crawl at the exact newsletters you care about, or hands you the raw utm_source/utm_campaign attribution as data you own.

This actor turns "who sponsors my competitor's newsletter?" from a monthly seat into a few-dollar sweep: at $0.01 per result, scanning 50 newsletters × 5 recent issues ≈ 300 results ≈ $3 all-in, pay-per-use, structured JSON out. Run it once for a campaign or on a weekly schedule for a rolling sponsor database.

Who sponsors my competitor's newsletter? (reverse prospecting for ad sales)

The highest-value use: find which brands are actively buying newsletter sponsorships in your niche, then pitch them your inventory — they are already spending.

  1. List the newsletters your advertisers (or your competitors' advertisers) appear in.
  2. Run with dateFloor set to ~30 days back to capture the current buying cycle.
  3. Pivot the sponsors[] records by name: brands appearing across multiple newsletters are active category buyers; their utm_campaign values often reveal the campaign scope and naming conventions.

Use cases

  • Ad-sales prospecting — find every brand already buying newsletter placements in your vertical, and pitch the ones spending near you.
  • Competitive ad intelligence — track which competitors sponsor which newsletters, and how frequently, over time.
  • Sponsorship rate benchmarking — map sponsor frequency across a set of newsletters to estimate demand and inventory.
  • Media-buying research — before booking a newsletter, see who else advertises there and what their landing pages / UTM conventions look like.
  • Newsletter marketplaces & databases — enrich a directory of newsletters with live sponsor rosters.
  • Brand monitoring — watch for your own or a competitor's brand appearing in newsletter ad slots.

FAQ

How do I find out who sponsors a newsletter?

Point this actor at the newsletter's URL. It reads the public issue content directly over HTTP and returns the sponsor brands, marker phrases, landing links, and UTM tags per issue — no publisher API, no account, no key. Works on Substack (including custom domains), beehiiv, and Ghost.

How do I extract sponsors and advertisers from beehiiv and Ghost newsletters?

The same way — paste the beehiiv or Ghost URL into newsletterUrls. beehiiv issues are enumerated via the archive and sitemap; Ghost via its full-content RSS feed. Both return the identical structured sponsor records as Substack.

Which newsletter platforms are supported?

Substack (including custom domains), beehiiv, and Ghost. Other/custom platforms return a single unsupported_platform record so your run never breaks.

Does this scrape private inboxes?

No — you supply the public newsletter URLs you choose to monitor. The actor reads only the public issue archive pages each platform serves; there is no inbox access, no login, and no private content.

How accurate is it?

1.000 precision and recall on our ground-truth test set across Substack, beehiiv, and Ghost — every extraction is deterministic heuristics corroborated by the ad block's outbound link, so results are reproducible run to run.

Does it use an LLM to detect sponsors?

No. Detection is deterministic heuristics — marker phrases plus outbound-link corroboration — so results are fast, cheap, and reproducible.

Can it read paid / members-only issues?

It reads the free preview that the platform serves publicly. Sponsor blocks are usually placed above the paywall, so they are typically captured; is_paid_truncated flags issues where later content was cut.

Will I get blocked?

Requests use an honest desktop User-Agent with a polite delay and no CAPTCHA/WAF evasion. Substack is Cloudflare-fronted and beehiiv uses a CDN; if datacenter IPs are challenged, select the residential proxy group in proxyConfiguration.

How is it billed?

Pay-per-result: one item per successfully read issue, plus one optional summary per newsletter. Failed fetches are never billed as rows — they are retried, then aggregated into the summary's issues_failed count (at most one error record per newsletter URL). Use maxIssuesPerNewsletter and dateFloor to control volume and cost.

Notes & limitations

  • Image-only sponsor logo strips with no adjacent link or text can be missed (no brand text to read).
  • Sponsor names lifted from all-caps ad headers are naively title-cased (e.g. TOGETHER WITH CDATACdata); exact stylization (CData, iPhone-style casing) may differ from the brand's own.
  • Ghost newsletters expose only their RSS window (~15 newest issues); a larger maxIssuesPerNewsletter logs a warning and returns what the feed offers. There is no deeper Ghost backfill in v1.
  • Respect each publication's terms of service. This actor reads public web content for analytics; you are responsible for how you use the output.