Newsletter Sponsors Scraper — InboxReads Directory avatar

Newsletter Sponsors Scraper — InboxReads Directory

Pricing

from $2.60 / 1,000 newsletter results

Go to Apify Store
Newsletter Sponsors Scraper — InboxReads Directory

Newsletter Sponsors Scraper — InboxReads Directory

Find newsletters that accept sponsorships, cross-promotions or are up for sale — scraped from the InboxReads public directory. Topics, cadence, audience geography, email tooling and sponsor-contact signals per newsletter. Built for sponsor prospecting and newsletter market research.

Pricing

from $2.60 / 1,000 newsletter results

Rating

0.0

(0)

Developer

Nomad.Dev

Nomad.Dev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Find newsletters that accept sponsorships, are open to cross-promotion or are up for sale — scraped from the InboxReads public directory (~3,300 newsletters). Per newsletter: topics, send cadence, audience geography, the email/sponsorship tooling it runs on (Paved, BuySellAds, Passionfroot, beehiiv, Mailchimp...), whether a sponsor-contact route exists, and directory popularity ranks. No login, no proxies.

Built for sponsor prospecting (media buyers and brands hunting placement inventory), newsletter competitive research, and acquisition scouting (onlyForSale).

What makes this different

Other InboxReads scrapers return name, description and topics. This one is built around sponsor intelligence — a combination of first-class, filterable fields no other newsletter-directory Actor exposes:

  • acceptsSponsorships, allowsCrossPromotion, isForSale — filter the directory straight down to buyable / swappable / acquirable inventory.
  • sponsorshipPlatforms — the ad networks a newsletter actually sells through (Paved, BuySellAds, Passionfroot...), detected from its tooling stack rather than self-reported, so you know where to go buy. Filter on it directly.
  • hasSponsorContact / hasAdvertiseUrl — whether a contact route / media kit exists.
  • audienceCountries — reader geography, for market-matched buys.

On the fields we deliberately leave out: we do not emit subscriber counts or open/click rates. InboxReads gates those behind its Pro plan on every public listing, so a scraper can only ever return them as null (or a fabricated guess). We return what is actually public and skip the always-empty columns — see the FAQ below.

Input

FieldTypeDefaultDescription
topicsarray of strings["business", "marketing"]Only newsletters tagged with at least one of these topics (case-insensitive). Empty list = all topics. Full topic list: inboxreads.co/topics.
onlyAcceptingSponsorsbooleanfalseOnly newsletters whose listing says they accept paid sponsorships/ads (roughly half the directory).
onlyOpenToCrossPromotionbooleanfalseOnly newsletters open to cross-promotion swaps.
onlyForSalebooleanfalseOnly newsletters marked as up for sale.
sponsorshipPlatformsarray of strings(empty)Only newsletters that sell sponsorships through at least one of these platforms (case-insensitive), e.g. Paved, BuySellAds, Passionfroot. Detected from the tooling stack, not self-reported. Empty = any platform.
languagestring(empty)Only newsletters written in this language, e.g. english, spanish. Empty = any.
onlyNewSinceLastRunbooleanfalseOnly output newsletters not seen in previous runs with this flag — see Delta mode.
maxItemsinteger100Hard cap on directory listings fetched (considered) per run. 0 = the whole directory (~3,300 listings — use with care). With filters on, fewer records may actually be pushed and billed.
concurrency (Advanced)integer4Parallel listing fetches. Keep low — this is a small independent directory site.

What newsletter data does this scraper extract?

One flat JSON record per newsletter listing:

FieldMeaning
idStable id, inboxreads:<slug>
sourceAlways inboxreads
slugListing slug
urlListing page on InboxReads
nameNewsletter name
taglineOne-line pitch
descriptionLonger description
topicsTopic tags, e.g. ["business", "tech"]
languageLanguage, e.g. english
sendIntervalDaysSend cadence in days (1 = daily, 7 = weekly) — null if not stated
sendFrequencyHuman label derived from the above (daily, weekly, biweekly, ...)
acceptsSponsorshipstrue if the listing says it accepts paid sponsorships/ads
allowsCrossPromotiontrue if open to cross-promo swaps
isForSaletrue if the newsletter is listed for sale
paidStatusfree / paid-subscription status of the newsletter itself
hasSponsorContacttrue if the directory exposes a contact route for this newsletter
hasAdvertiseUrltrue if the newsletter publishes its own advertise/media-kit link
favouritesDirectory likes — popularity proxy
ranksDirectory rank overall and per topic, e.g. {"all": 1, "news": 1}
audienceCountriesTop reader countries with relative score, [{"country", "score"}]
audienceCountryCountHow many countries the readership spans
emailToolsDetected stack, [{"name", "category"}] — category sponsorship shows which sales platform (Paved, BuySellAds, Passionfroot...) the newsletter sells through
sponsorshipPlatformsFlat list of the sponsorship sales platforms from emailTools, e.g. ["Paved", "BuySellAds"] — the actionable "where to go buy" signal, and the sponsorshipPlatforms input filters on it
listingCreatedAt / listingUpdatedAtListing timestamps (ISO 8601)
relatedSlugsSimilar newsletters (slugs) — feed them back in as seeds
parseConfidencehigh / medium / low — how cleanly the page parsed
warningsParse warnings, empty when clean
isNewtrue on every pushed record — only present when Only new since last run is on

Subscriber counts and open/click rates are not included: InboxReads gates them behind its Pro plan on every listing we sampled, and this actor only reads public pages — no always-empty columns, no fabricated numbers.

How to find newsletter sponsorship inventory with this Actor

  1. Set topics to your target verticals (marketing, finance, ai, ...) — or leave empty for the whole directory.
  2. Turn on Only newsletters accepting sponsors to keep just the sponsorable inventory; add language if you buy in one market.
  3. Read sponsorshipPlatforms in the output — the platforms (Paved, BuySellAds, Passionfroot...) where that newsletter actually sells placements, i.e. where to go buy. To target one ad network, put its name in the Sponsorship platforms input (e.g. ["Paved"]) and only newsletters selling through it come back.
  4. Turn on Only new since last run and schedule the run to monitor newly listed newsletters (new inventory alert).
  5. Export JSON, CSV or Excel — or call it over the API:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("nomad-agent/newsletter-sponsors-scraper").call(run_input={
"topics": ["marketing", "business"],
"onlyAcceptingSponsors": True,
"maxItems": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], "|", item["sendFrequency"], "|", item["url"])
curl -X POST \
"https://api.apify.com/v2/acts/nomad-agent~newsletter-sponsors-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"topics": ["marketing"], "onlyAcceptingSponsors": true, "maxItems": 100}'

Output example

Real record (fetched 2026-07-02):

{
"id": "inboxreads:theskimm",
"source": "inboxreads",
"slug": "theskimm",
"url": "https://inboxreads.co/n/theskimm",
"name": "Daily Skimm",
"tagline": "The morning newsletter that millions wake up to",
"description": "Meet, news without all the noise. The Daily Skimm connects the dots on how the day's biggest stories affect your life.",
"topics": ["news", "business", "sports", "politics", "entertainment"],
"language": "english",
"sendIntervalDays": 1,
"sendFrequency": "daily",
"acceptsSponsorships": true,
"allowsCrossPromotion": false,
"isForSale": false,
"paidStatus": "free",
"hasSponsorContact": false,
"hasAdvertiseUrl": true,
"favourites": 174,
"ranks": {"all": 2, "news": 2, "sports": 2, "business": 2, "politics": 2, "entertainment": 1},
"audienceCountries": [
{"country": "United States", "score": 191},
{"country": "India", "score": 22},
{"country": "Morocco", "score": 14},
{"country": "Brazil", "score": 12},
{"country": "Canada", "score": 12}
],
"audienceCountryCount": 1835,
"emailTools": [
{"name": "Paved", "category": "sponsorship"},
{"name": "BuySellAds", "category": "sponsorship"},
{"name": "Marigold Engage by Sailthru", "category": "email service provider"}
],
"sponsorshipPlatforms": ["Paved", "BuySellAds"],
"listingCreatedAt": "2017-09-08T16:45:16.000Z",
"listingUpdatedAt": "2024-09-24T22:30:18.311Z",
"relatedSlugs": ["axios-am-pm", "need-2-know", "tip-news", "1440-daily-digest", "daily-dose-1", "boardroom-newsletters"],
"parseConfidence": "high",
"warnings": []
}

isNew (delta mode) is added on top of this shape when that input is used.

Delta mode

Turn on Only new since last run (onlyNewSinceLastRun) to have the Actor remember which listings it has already returned (keyed by slug) across runs and skip them.

  • Skipped (already-seen) listings are not fetched, not pushed and not billed — repeat runs only pay for newsletters newly added to the directory.
  • Every record pushed with this flag on is tagged "isNew": true.
  • State is kept in a dedicated key-value store (separate from the run's default store), so it persists across scheduled runs.
  • Failed fetches are not marked as seen — they retry on the next run.

Pricing

Pay per event: $0.05 per Actor start + $0.004 per newsletter record pushed. Filters run before billing — records filtered out are never charged. A full-directory sweep (maxItems: 0, no filters) is ~3,300 records ≈ $13.25; a typical filtered topic run (maxItems: 100) costs at most $0.45.

FAQ

Where does the data come from? The public InboxReads directory (inboxreads.co) — listing pages only. The actor respects the site's robots.txt: InboxReads' own media-kit, ad-rate, sponsor-list and API paths are disallowed there and are never fetched.

Why are there no subscriber counts or CPM prices? InboxReads gates subscriber/open-rate/click-rate metrics behind its Pro plan, and newsletter rate cards live on each newsletter's own media-kit page. This actor reports what is public: sponsorship acceptance flags, contact/advertise-URL signals and which sponsorship platform each newsletter sells through (emailTools) — enough to build a prospect list; pricing conversations happen on the newsletter's own advertise page.

How fresh is the data? Each run fetches live pages. listingUpdatedAt tells you when the newsletter's listing itself last changed.

Some fields are null — why? Newsletters self-report unevenly. Fields the listing doesn't state come back null (never guessed); parseConfidence + warnings flag records where the page shape looked unusual.

Can I monitor for new newsletters? Yes — schedule the actor with onlyNewSinceLastRun: true. Only newly listed newsletters are pushed (and billed) on each run.

Integrations

Export results as JSON, CSV or Excel, or wire this Actor into Make, Zapier or n8n; call it programmatically with run-sync-get-dataset-items; or use it from AI agents via the Apify MCP server.