Newsletter Sponsor Finder: InboxReads Directory Scraper avatar

Newsletter Sponsor Finder: InboxReads Directory Scraper

Pricing

from $2.00 / 1,000 newsletter results

Go to Apify Store
Newsletter Sponsor Finder: InboxReads Directory Scraper

Newsletter Sponsor Finder: InboxReads Directory Scraper

$4/1K newsletters | Find newsletters that accept sponsorships, swap promotions or are for sale. Topics, cadence, audience countries and ad platforms where listed. No login or API key. Not affiliated with InboxReads.

Pricing

from $2.00 / 1,000 newsletter results

Rating

0.0

(0)

Developer

Nomad.Devs

Nomad.Devs

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

5

Monthly active users

3 days ago

Last modified

Share

$4/1K newsletters | Find newsletters that accept sponsorships, swap promotions or are for sale. Topics, cadence, audience countries and ad platforms where listed. No login or API key. Not affiliated with InboxReads.

Our scraper collects newsletters from the public InboxReads directory and lets you filter by topic, language, sponsorship acceptance, cross-promotion, for-sale status and the ad platform a newsletter sells through. Every row carries the newsletter's pitch, topics, send cadence and the sponsorship signals shown on its listing. It is ideal for sponsor prospecting, newsletter market research and acquisition scouting.

Key Benefits

  • No login or API key: nothing to set up and no account at risk, because the Actor reads only public listing pages.
  • Low pricing: $4.00 per 1,000 newsletters on the Free plan, $3.53 on Starter, $3.00 on Scale and $2.00 on Business.
  • Sponsor-ready filters: keep only newsletters that accept sponsorships, are open to cross-promotion or are for sale.
  • Buying route, where detected: sponsorshipPlatforms lists the ad networks (such as Paved or BuySellAds) found in a newsletter's tooling.
  • No repeats across runs: schedule the same search and newsletters already delivered to you are skipped.

How It Works

  1. Choose your topics (e.g., business, marketing, finance) or leave them empty for the whole directory.
  2. Narrow the list:
    • (optional) Only newsletters accepting sponsors (e.g., true).
    • (optional) Sponsorship platforms (e.g., Paved, BuySellAds).
    • (optional) Language (e.g., english, spanish).
  3. Run the Actor and download the dataset as JSON, CSV or Excel.

The Console form is prefilled with business and marketing topics, sponsors only, and 15 newsletters, so one click on Start returns real rows. A second click with the same search returns only newsletters you have not received yet, and may return none; set dedupe.enabled to false to see everything again.

More settings:

  • maxItems - Maximum number of newsletters to return and bill. 0 means no cap (the whole directory). Default is 100.
  • concurrency - Parallel listing fetches. Default is 4.

You pay only for newsletters returned, never for listings scanned and filtered out; the run stops at maxItems.

InboxReads gates subscriber counts and open rates behind its Pro plan, so this Actor does not return them. Some listings omit details: in a 10-newsletter sample, audience countries were present on 8, sponsorship platforms on 7, a sponsor-contact flag on 7, an advertise link on 5 and a launch date on 3.

Data You'll Receive

  • Newsletter: name, tagline, description, topics, language and listing URL.
  • Sponsorship signals: accepts sponsorships, open to cross-promotion, for sale.
  • Sponsor route: sponsorship platforms and tools (on some newsletters), plus flags for a sponsor-contact route and an advertise link.
  • Cadence: send interval and frequency.
  • Audience: top reader countries with a relative score (on most newsletters).
  • Directory data: favourites, ranks, listing timestamps and related newsletters.
  • Stable id (inboxreads:<slug>) for deduplication across runs.

Sample output data

Here is an example newsletter from this Actor:

{
"id": "inboxreads:theskimm",
"listingId": 981,
"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": 178,
"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": 2045,
"audienceCountryCount": 2045,
"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": []
}

InboxReads Newsletter API

Results are stored in a dataset that you can export as CSV, JSON or Excel, or read on demand through the Apify API.

Support and Feedback

We improve these scrapers from your feedback. If something breaks or you need a filter:

  • Open an issue on the Actor's Issues tab
  • If this Actor saved you time, a short review on the Store helps other users find it.

Run evidence

Start with one input and output

An Apify account is required. Use your Apify API token when calling the API; Console runs do not need that token pasted into the input. No source login or AI-provider key is required for this quickstart. none.

Cost: Total = Actor event charges + platform usage if separately billed + any BYO-provider charges. See “Current costs” for your event rates, plan tiers and a calculation. A sample does not promise future billable volume.

Input and output below were read from the same successful run oiRnh7eCiluop8BrB (2026-10-04, immutable build HJ5anGC64pMUpTKd7). This is an observed example, not a guarantee that repeating it returns this row. It used the selected build at capture time.

Input JSON

{
"onlyAcceptingSponsors": false,
"onlyOpenToCrossPromotion": false,
"onlyForSale": false,
"maxItems": 100,
"concurrency": 4,
"analyticsEnabled": false
}

Matching output excerpt

Long strings and arrays are shortened for display; this is not a complete dataset fixture.

{
"id": "inboxreads:theskimm",
"listingId": 981,
"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"
],
"language": "english",
"sendIntervalDays": 1,
"sendFrequency": "daily",
"acceptsSponsorships": true,
"allowsCrossPromotion": false,
"isForSale": false,
"paidStatus": "free",
"hasSponsorContact": false,
"hasAdvertiseUrl": true,
"favourites": 177,
"ranks": {
"all": 2,
"news": 2,
"sports": 2,
"business": 2,
"politics": 2,
"entertainment": 1
},
"audienceCountries": [
{
"country": "United States",
"score": 191
},
{
"country": "India",
"score": 22
}
],
"audienceCountryTotal": 2024,
"audienceCountryCount": 2024,
"emailTools": [
{
"name": "Paved",
"category": "sponsorship"
},
{
"name": "BuySellAds",
"category": "sponsorship"
}
],
"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"
],
"parseConfidence": "high",
"warnings": []
}

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).

A focused sponsorship shortlist

Start with topics: ["business"], onlyAcceptingSponsors: true, language: "english" and maxItems: 25. Compare the returned public sponsorship-platform, cadence and audience-geography signals, then open each listing to confirm its current contact or media-kit route. Export a shortlist keyed by stable id and retain your capture date. On later runs, compare those IDs downstream; this Actor does not create an outreach campaign or a schedule for you.

Public directory signals do not establish subscriber reach or campaign performance. A sponsor-contact flag means a route exists, not that an email address was extracted. Use the API example below with the bounded input above; check the current Apify event prices before executing it.

What makes this different

This Actor is built around sponsor intelligence: first-class, filterable fields such as:

  • 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(none; form prefill ["business", "marketing"])Only newsletters tagged with at least one of these topics (case-insensitive). Empty list or absent = 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 analytics endpoint. 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}'

Run the same search again and you get only newsletters you have not received yet; set dedupe.enabled to false to see everything again.

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. The Actor’s Pricing tab lists the current per-record and per-run charges for your Apify plan. Filters run before billing; records filtered out are not charged. Estimate your run using the current rates and maxItems, and use a charge limit for API runs. Directory size changes over time.

Build a prospect list for a specific sponsorship use case, then inspect the public listings to confirm their current contact routes. This Actor bills runs and returned records rather than selling a prospecting 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.

Fast setup and source code

Public repository · Agent setup skill.

Use the Actor’s current input form for filters, or start with its documented API example. Select the latest build. Read the dataset together with the run summary: a successful status alone does not show that every source was reached.

Restrictive filters or repeat-delivery suppression can produce zero results.

Observed output example

Selected fields from a real source record inspected on 2026-10-03; consult the output schema for the full contract. Values change with the source.

{
"id": "inboxreads:theskimm",
"listingId": 981,
"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": 177,
"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": 2020,
"audienceCountryCount": 2020,
"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": []
}

Current costs

Current Actor event rates, checked 2026-10-18. USD; use the Pricing tab for your plan and later changes.

EventFreeBronzeSilverGoldPlatinumDiamond
Newsletter result (result)$0.004$0.00353$0.003$0.002$0.002$0.002
Actor start (actor-start)$0.00005$0.00005$0.00005$0.00005$0.00005$0.00005

For example, 100 × result, 1 × actor-start totals $0.40005 in Actor event charges on Free. This is an arithmetic example; actual charged events depend on the run and selected options. It is not a promise of output or a charge for simply setting an item cap.

Your total is the charged Actor events, plus platform usage only if this Actor’s Pricing tab bills it separately, plus any external provider you use with your own key. Do not add platform usage twice when it is included. Apify credits and plan discounts affect your invoice. Set a run cost limit in Console before starting.