Newsletter Sponsor Tracker
Pricing
from $3.40 / 1,000 sponsor rows
Newsletter Sponsor Tracker
Find who sponsors a newsletter, or which newsletters a brand sponsors. Reads public Substack, beehiiv, and other newsletter archives for sponsor placements and returns one row per sponsor with domain, placements, first and last issue seen, and issue links. For ad sales and sponsor research.
Pricing
from $3.40 / 1,000 sponsor rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Find who sponsors a newsletter, or which newsletters a brand sponsors. In newsletter mode, paste newsletter links and get one row per sponsor found in their recent issues: the sponsor name and domain, how many issues carried it, the first and last issue seen, and links to those issues, plus one summary row per newsletter. In brand mode, enter a brand and get the newsletters whose recent issues carry a sponsor placement for it. Rows are flat, so they export to CSV or drop into a Clay table.
Features
- Newsletter mode. Sponsors per newsletter from its newest issues, with placements, share of issues, first and last seen, and issue links. A summary row per newsletter lists every sponsor found.
- Brand mode. Google result pages for the brand's sponsor lines ("presented by", "brought to you by", "sponsored by", "together with") name the candidate newsletters; each candidate's own issues are then read, and only a placement found in an issue is returned.
- Substack, beehiiv, and more. Substack archives through their public archive JSON, beehiiv and other hosted newsletters through their sitemap issue pages, and anything else through its RSS feed.
- Fixed rules. A placement is a short block with a sponsor label, and the sponsor is the first outside link beside it. The same issue always gives the same rows.
- Clean sponsor links. Tracking parameters are removed. A placement sold through an ad network keeps the sponsor name and no domain, rather than the network's domain.
How it reads its sources
Public newsletter archive pages, sitemaps, and feeds, fetched directly, and in brand mode Google result pages through the Apify proxy. robots.txt is read once per host and checked before every request. A host that refuses a direct request is read through the Apify proxy. No API key, no login, no paywalled content (a paid Substack post is read from its free preview), and no other developer's actor.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
mode | string | newsletter | newsletter or brand |
newsletter_urls | array | Newsletter mode. Home page links or domains, up to 100 | |
brand_name | string | Brand mode. The sponsor name as newsletters print it | |
brand_domain | string | Brand mode. The sponsor's domain | |
newsletters_to_check | string | 10 | Brand mode. Candidate newsletters to confirm, 1 to 10 |
issues_to_scan | string | 20 | Newest issues read per newsletter, 1 to 200; at most 20 in brand mode |
since_days | string | 365 | Stop at issues older than this. 0: no limit |
max_charge_usd | string | Stop before a row would pass this amount |
Every field also accepts text, as Clay sends it: "20" or a comma separated list.
Output
One row layout for every row type. Key fields:
| Field | Rows | Example |
|---|---|---|
row_type | all | sponsor, newsletter_summary, brand_summary, no_results |
newsletter_name, newsletter_url, platform | sponsor, newsletter summary | Not Boring by Packy McCormick, https://www.notboring.co, substack |
sponsor_name, sponsor_domain, sponsor_url | sponsor | Reducto, reducto.ai, https://reducto.ai |
placements, issues_scanned, share_of_issues_pct | sponsor | 5, 10, 50 |
first_seen_at, last_seen_at, issue_urls, issue_titles, placement_labels | sponsor | |
sponsored_issues, sponsor_count, sponsors_list | newsletter summary | 9, 5, ["Reducto","Guru"] |
brand_name, brand_domain, found_via, newsletters_checked, newsletters_found | brand mode | |
row_status, error_reason, billable_events_json | all | ok, null, {"sponsor-row":1} |
The run summary (key-value store record RUN_SUMMARY) lists each newsletter's platform, issues read, and sponsors, the Google queries answered in brand mode, the requests made, and robots.txt as read per host.
Pricing
Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Sponsor row (sponsor-row): one sponsor of one newsletter | $0.004 | $0.0038 | $0.0036 | $0.0034 |
Brand search (brand-search): brand mode only, once per run | $0.065 | $0.06175 | $0.0585 | $0.05525 |
Actor start (apify-actor-start), once per run | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
Free rows: newsletter summary rows, no results rows, and error rows. In brand mode the brand summary row carries the brand search event: it pays for three Google searches and for reading up to 20 recent issues of up to 10 candidate newsletters, and it is charged when at least one candidate newsletter was read, even when no placement is confirmed. A brand search that found no candidate newsletter, or could not read Google results, is free. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 375 sponsor rows); any paid Apify plan removes that cap.
Example: one newsletter with 20 issues and 8 sponsors costs about 0.033 USD. A brand search that confirms 3 newsletters costs about 0.077 USD.
Usage examples
Apify Console or API
{ "mode": "newsletter", "newsletter_urls": ["https://www.notboring.co", "https://www.superhuman.ai"], "issues_to_scan": "30" }
{ "mode": "brand", "brand_name": "Attio", "brand_domain": "attio.com", "newsletters_to_check": "10" }
Clay
Add an Apify column, send a newsletter domain from your table, and read the sponsor rows: sponsor_name, sponsor_domain, placements, and last_seen_at. A sponsor that bought several placements in your niche is a warm lead for your own ad inventory.
MCP
The MCP server @mambalabsdev/mcp-newsletter-sponsor-tracker exposes this actor as a tool for Claude and other MCP clients.
Error handling
| Situation | What you get |
|---|---|
| No archive, sitemap, or feed is found | One free summary row with row_status no_results and the reason |
| No sponsor label in the issues scanned | The free summary row says so; no sponsor rows |
| robots.txt disallows an archive path | Those issues are skipped and the summary counts only what was read |
| Brand mode: Google result pages cannot be read | One free blocked brand summary row |
| Brand mode: no confirmed placement | One free no_results brand summary row naming how many newsletters were checked |
| Max charge reached | The run stops before the next billable row and says why in the status message |
Limitations
- A placement needs a sponsor label in a short block. A sponsor shown only as an image with no label, or a native mention inside an article, is not found.
- A paid Substack post is read from its free preview; a sponsor placed below the paywall is not seen.
- Brand mode finds candidates through Google results, so newsletters whose issues are not indexed by Google are missed.
- Sponsor names keep the casing the placement printed, except all capital labels, which are matched to the brand's own casing in the placement text when it appears there.
More from Mamba Labs
Built by Mamba Labs.