# Newsletter Sponsor Leads: Substack Newsletters That Take Ads (`forgelabs/newsletter-sponsor-leads`) Actor

Enter a niche, get Substack newsletters that sell sponsorships, with proof: advertise page, sponsored posts, past sponsors, subscribers, engagement, audience fit, a labeled cost-per-send estimate and publisher-listed business email. For brands, agencies and AI agents.

- **URL**: https://apify.com/forgelabs/newsletter-sponsor-leads.md
- **Developed by:** [Forge Labs](https://apify.com/forgelabs) (community)
- **Categories:** Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 sponsor leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Newsletter Sponsor Leads: Find Substack Newsletters That Take Sponsors

**Enter your niche. Get a ranked list of Substack newsletters that already sell sponsorships, with proof.** Each lead includes the advertise page, sponsored posts, past sponsors, subscribers, engagement, audience fit and a clearly labeled cost-per-send estimate. You also get a business email, but only when the publisher lists one publicly.

Built for **brands and startups buying newsletter ads**, **agencies and media buyers**, **newsletter ad networks** and **AI agents** that plan sponsorship campaigns.

Just press **Start**. The default niches return about 12 to 15 sponsor-ready leads in roughly 70 seconds.

### Real output (default run on the Apify platform, Oct 15, 2026)

| # | Newsletter | Subscribers | Sponsor evidence | Past sponsors | Est. cost per send\* |
|---|---|---|---|---|---|
| 1 | The Founders Corner | 77,000 | [Sponsorship page](https://www.the-founders-corner.com/p/sponsorship), with a public business email | n/a | $1,540 to $3,850 |
| 2 | On Brand Magazine | 27,000 | Sponsored posts | Tracksuit | $540 to $1,350 |
| 3 | Behind the Craft | 154,000 | [Sponsorships page](https://creatoreconomy.so/p/sponsorships) | n/a | $3,080 to $7,700 |
| 4 | MKT1 Newsletter (Emily Kramer) | 87,000 | Sponsored posts | Framer, Profound, Traction Complete | $1,740 to $4,350 |
| 5 | Because of Marketing | 96,000 | Sponsored posts | Lions Across Europe, Tracksuit | $1,920 to $4,800 |
| 6 | Product Growth (Aakash Gupta) | 241,000 | Sponsored posts | n/a | $4,820 to $12,050 |

\*An **estimate**, not a quote. It assumes typical newsletter CPMs of $20 to $50 per 1,000 subscribers. Real rates vary, so always confirm with the publisher. If the publisher's advertise page lists prices, they appear in `listedPricesOnAdPage`.

One full row, shortened:

```json
{
  "rank": 1,
  "leadScore": 60.2,
  "newsletter": "The Founders Corner®",
  "url": "https://www.the-founders-corner.com",
  "takesSponsors": "yes",
  "sponsorLikelihood": 55,
  "advertisePage": "https://www.the-founders-corner.com/p/sponsorship",
  "publicBusinessEmail": "founderscornermedia@gmail.com",
  "contactSource": "publisher's advertise/sponsor page",
  "estimatedCostPerSend": "ESTIMATE $1,540-$3,850 per send (assumes typical $20-$50 CPM on 77,000 subscribers; not a quoted price)",
  "subscribers": 77000,
  "credibilityScore": 64.9,
  "audienceFit": 63,
  "medianEngagementPerPost": 43.5,
  "postsPerWeek": 4.06,
  "niche": "B2B SaaS growth"
}
```

### How sponsor detection works

1. **Advertise or sponsor page:** we look for a link on the newsletter's homepage and check common paths such as /p/sponsorships and /advertise.
2. **Sponsored posts:** we read the full text of recent free posts and look for "sponsored by", "presented by", "brought to you by", "today's sponsor", "in partnership with" and "(ad)".
3. **Past sponsors:** we pull brand names from those sponsor lines, so you can see who already buys placements.

`takesSponsors` is **yes** when there's an advertise page, at least 2 sponsored posts or named past sponsors. It's **likely** when there's one sponsored mention, and **not detected** otherwise. Turn on *Include newsletters with no sponsor evidence* to see the rest.

### Lead score (0 to 100)

- 45% sponsor likelihood (page, sponsored posts, past sponsors)
- 45% credibility score (subscribers, engagement per post, comment depth, consistency, recency, topic fit)
- 10% audience fit with your niche

### Privacy and compliance

- Public data only. No login, and nothing behind a paywall.
- Contact details come only from what the **publisher lists publicly**: the email on its own advertise or sponsor page, or the support email shown on the publication. We never guess, build or enrich personal email addresses.
- Estimates are always labeled as estimates.

### Input

| Field | Default | Notes |
|---|---|---|
| `niches` | AI tools for marketers, B2B SaaS growth, creator economy | Your audience's topics. Be specific. |
| `maxLeads` | 15 | Each lead is $0.02 |
| `minSubscribers` | 1,000 | Filters out tiny newsletters |
| `includeNotDetected` | false | Also return newsletters with no sponsor evidence |
| `postsToScan` | 6 | Recent free posts read in full for each newsletter |
| `candidatePool` | 18 | Newsletters checked per niche |

### Pricing (pay per event, no subscription)

- **$0.20 per run** (search started)
- **$0.02 per sponsor lead** returned

A 15-lead run costs $0.50, and 1,000 leads cost about $20 plus run fees. You only pay for leads that appear in your dataset.

### Use with AI agents (MCP and API)

The tool works with the Apify MCP server (mcp.apify.com) and any HTTP client. Example agent prompt: *"Find 20 Substack newsletters about personal finance that take sponsors, with at least 10K subscribers, and list their advertise pages."* Fields are flat and self-describing, and the `SUMMARY` record in the key-value store gives a plain-text list.

### FAQ

**Only Substack?** Yes, for now. Substack hosts many of the largest independent newsletters, and its data is public.

**Why is a newsletter I know missing?** It may not rank in Substack search for your niche, or it may sell sponsorships privately. Try more specific niches or raise `candidatePool`.

**Is the cost estimate a price quote?** No. Contact the publisher for real rates.

### Support

Open an issue on the Actor's Issues tab. We read every issue and usually reply within 1 to 2 days.

# Actor input Schema

## `niches` (type: `array`):

Your audience's niches, e.g. 'AI tools for marketers', 'B2B SaaS growth', 'personal finance'. We find Substack newsletters in each that show public evidence of taking sponsors.

## `maxLeads` (type: `integer`):

Maximum sponsor-ready newsletters to return (each is one $0.02 lead).

## `minSubscribers` (type: `integer`):

Skip newsletters smaller than this. Newsletters with no public count are kept only if they have followers above this.

## `includeNotDetected` (type: `boolean`):

Off = only newsletters with an advertise page or sponsored posts. On = also return the rest (marked 'not detected').

## `postsToScan` (type: `integer`):

Full-text scan for 'sponsored by', 'presented by', 'brought to you by' and past sponsor names.

## `candidatePool` (type: `integer`):

How many relevant newsletters per niche are checked for sponsor evidence. Higher = more leads, slower.

## `searchDepth` (type: `integer`):

Substack search pages per phrase.

## `language` (type: `string`):

e.g. 'en'.

## Actor input object example

```json
{
  "niches": [
    "AI tools for marketers",
    "B2B SaaS growth",
    "creator economy"
  ],
  "maxLeads": 15,
  "minSubscribers": 1000,
  "includeNotDetected": false,
  "postsToScan": 6,
  "candidatePool": 18,
  "searchDepth": 4
}
```

# Actor output Schema

## `leads` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "niches": [
        "AI tools for marketers",
        "B2B SaaS growth",
        "creator economy"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("forgelabs/newsletter-sponsor-leads").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "niches": [
        "AI tools for marketers",
        "B2B SaaS growth",
        "creator economy",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("forgelabs/newsletter-sponsor-leads").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "niches": [
    "AI tools for marketers",
    "B2B SaaS growth",
    "creator economy"
  ]
}' |
apify call forgelabs/newsletter-sponsor-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,forgelabs/newsletter-sponsor-leads"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/aT9WkFfNtlztxRffe/builds/bM9kaNvIkd7YbKOpM/openapi.json
