Newsletter Sponsor Finder — InboxReads Directory Scraper avatar

Newsletter Sponsor Finder — InboxReads Directory Scraper

Pricing

from $2.60 / 1,000 newsletter results

Go to Apify Store
Newsletter Sponsor Finder — InboxReads Directory Scraper

Newsletter Sponsor Finder — InboxReads Directory Scraper

Find newsletters that accept sponsorships, cross-promotions or are up for sale — from the InboxReads public directory. Topics, cadence, audience geo, ad-platform and sponsor-contact signals per newsletter. For sponsor prospecting and market research. From $0.004/newsletter, no subscription.

Pricing

from $2.60 / 1,000 newsletter results

Rating

0.0

(0)

Developer

NomadDev

NomadDev

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

5

Monthly active users

4 days ago

Last modified

Share

Claude / Codex skill to describe and setup this actor: SKILL.md

Find newsletters that accept sponsorships, are open to cross-promotion or are up for sale — scraped from the InboxReads public directory (3,365 listings in the 2026-08-17 sitemap snapshot). 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.
maxItemsinteger100Stop after this many newsletters have been returned (= billed results). Filters don't shrink your result count — the scraper keeps scanning until it has this many matches or the directory is exhausted. 0 = no cap (whole directory; 3,365 listings in the 2026-08-17 sitemap snapshot).
concurrency (Advanced)integer4Parallel listing fetches. Keep low — this is a small independent directory site.
analyticsEnabled (Privacy)booleanfalseOpt in to privacy-safe aggregate debug analytics sent to the Actor creator's Netcup receiver. No caller IDs, filters, records, URLs, source text, raw errors or credentials are sent.

What newsletter data does this scraper extract?

One flat JSON record per newsletter listing:

FieldMeaning
idStable id, inboxreads:<slug>
listingIdInboxReads' numeric listing ID, useful for source reconciliation
sourceAlways inboxreads
slugListing slug
urlListing page on InboxReads
nameNewsletter name
taglineVerbatim one-line pitch from the public directory listing; InboxReads controls its length
descriptionVerbatim description from the public directory listing; not generated, summarized, or truncated by this Actor. It is listing copy, not a newsletter issue or full editorial archive.
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"}]
audienceCountryTotalRaw total supplied with InboxReads' country distribution. It is not a number of countries and the public listing does not document its unit, so do not interpret it as subscribers.
audienceCountryCountDeprecated compatibility alias for audienceCountryTotal; retained for existing integrations and carries the same raw value.
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
listingApprovedAt / listingCreatedAt / listingUpdatedAtListing timestamps (ISO 8601)
launchedAtNewsletter launch timestamp, when stated by the listing
hasPublicArchive / hasSampleIssuePublic-directory signals that an archive or sample issue exists; this Actor does not fetch either resource
relatedSlugsSimilar newsletters (slugs) — feed them back in as seeds
parseConfidencehigh / medium / low — how cleanly the page parsed
warningsParse warnings, empty when clean

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. Schedule the run and compare snapshots downstream 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}
],
"audienceCountryTotal": 1911,
"emailTools": [
{"name": "Paved", "category": "sponsorship"},
{"name": "BuySellAds", "category": "sponsorship"},
{"name": "Marigold Engage by Sailthru", "category": "email service provider"}
],
"sponsorshipPlatforms": ["Paved", "BuySellAds"],
"listingApprovedAt": "2017-09-08T16:45:16.000Z",
"listingCreatedAt": "2017-09-08T16:45:16.000Z",
"listingUpdatedAt": "2024-09-24T22:30:18.311Z",
"launchedAt": null,
"hasPublicArchive": false,
"hasSampleIssue": false,
"relatedSlugs": ["axios-am-pm", "need-2-know", "tip-news", "1440-daily-digest", "daily-dose-1", "boardroom-newsletters"],
"parseConfidence": "high",
"warnings": []
}

Pricing

Pay per event: $0.004 per newsletter record pushed (volume discounts down to $0.0026 on higher Apify plans) plus a negligible $0.00005 per Actor start. Filters run before billing — records filtered out are never charged. A typical filtered topic run (maxItems: 100) costs $0.40; a full-directory sweep (maxItems: 0, no filters) is 3,365 records in the 2026-08-17 sitemap snapshot, or about $13.46 at the base result price.

Compare: newsletter-sponsorship prospecting subscriptions run $8–58/month (InboxReads Pro) to $39–199/month (SponsorGap, Passionfroot). One $0.40 run builds a prospect list for a single use case — pay only when you actually pull data, with no subscription.

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.

What happens if the source or dataset is unavailable? Dataset rows are always newsletter records, never synthetic error rows. A source outage before any records are available, or a run where no valid records can be persisted, correctly fails the run. Individual listing failures and later batch-write failures do not discard rows already persisted; the run log states the exact partial-delivery count. If a result charge cannot be confirmed after a successful dataset write, the row remains delivered and the Actor does not retry the ambiguous charge.

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.


Found sponsorship inventory with this Actor? A quick ⭐ review on the Actor page helps other media buyers find it — and tells us which signals to add next. Missing a field or a filter? Open an issue and we usually ship it within days.