Journalist and Media List Builder
Pricing
from $6.80 / 1,000 journalist returneds
Journalist and Media List Builder
Build a media list from the news. Enter your beats or topics and get the journalists who wrote about them recently: name, outlet, author page, matching article count, latest article, and the article links as proof. Press release wires left out. No key needed. Clay ready.
Pricing
from $6.80 / 1,000 journalist returneds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Build a media list from what journalists actually wrote. Enter the beats or topics you want press for, such as "sales automation" or fintech funding, and get one row per journalist and outlet: the name from the byline, the outlet, their author page, how many matching articles they wrote, their latest one, and the article links as proof.
Bought by PR agencies, founders, and comms teams who want reporters who covered the topic in the last weeks, not a stale database export.
Rows are flat and snake_case, so they load straight into a spreadsheet, a CRM, or a Clay table.
✨ Features
- Topics in, journalists out. Up to 20 topics per run. Google News search words work, such as quotes for an exact phrase and
OR. - Read from the byline. Each article page is read for its author: the article's structured data first, then the author meta tag, then author links. A name is kept only when it reads as a person.
- Proof on every row. The matching article count, the newest article with its date, and up to 10 article links.
- Author page and X handle when the article page links them.
- Press release wires left out by default, because their author is the company issuing the release.
- Outlet filters. Keep only the outlets you pitch, or leave out ones you never pitch.
- No key, no login.
🔧 How it works
- This actor starts the Mamba Labs News and Media Mention Monitor (Actor ID
gol1PPUKrsIk4QLBd) on your Apify account with your topics. It returns the newest articles for each topic with the publisher's own URL. - Each article page is read once, with robots.txt honored, and its byline is extracted.
- Bylines are grouped by journalist and outlet, counted, and sorted: most matching articles first, then the newest.
📥 Input
| Field | Type | Description |
|---|---|---|
topics | list | 1 to 20 topics or beats. Required |
since_days | string | Days back, 1 to 90. Default 30 |
country | string | Google News country edition, two letters. Default US |
language | string | Language code. Default en |
outlets_include | list | Only these outlet domains |
outlets_exclude | list | Never these outlet domains |
include_press_releases | string | false (default) or true |
min_articles | string | Least matching articles per journalist, 1 to 20. Default 1 |
max_articles_per_topic | string | Newest articles read per topic, 1 to 100. Default 30 |
max_journalists | string | Most journalist rows, 1 to 500. Default 50 |
max_charge_usd | string | Optional cap on the whole run, the news run included |
Example:
{ "topics": ["\"sales automation\"", "\"revenue operations\""], "since_days": "30", "min_articles": "1" }
📤 Output
One row per journalist and outlet. Every row carries every field; a field that does not apply is null.
| Field | Example | Notes |
|---|---|---|
journalist_name | Ramin Skibba | From the article byline |
outlet, outlet_domain | The Guardian, theguardian.com | The same name at two outlets is two rows |
author_page_url | https://www.theguardian.com/profile/ramin-skibba | When the article links it |
x_handle | @dannyvena | When the article page names it for this author |
article_count | 2 | Matching articles with this byline at this outlet |
latest_article_title, latest_article_url, latest_published_at | Their newest matching article | |
topics_matched | ["\"sales automation\""] | Which of your topics found them |
article_urls | Up to 10 matching articles, newest first | |
byline_source | jsonld | jsonld, meta, or rel_author |
news_run_id | The news run this actor started, for audit | |
row_type, row_status | journalist, ok | |
billable_events_json | {"journalist-row":1} | What the row was billed as; {} is free |
since_days, country, language, source, checked_at |
When a run returns no journalist, it returns one free summary row instead, with the article, page, and byline counts and the reason.
Emails are not returned. To find a journalist's work email, pass journalist_name and outlet_domain to an email finder on your own key.
📏 Measured results
Measured on the private build on 2026-10-28, before launch:
| Run | Topics | Articles found | Article pages read | Named a journalist | Journalist rows |
|---|---|---|---|---|---|
Three topics ("sales automation", "revenue operations", fintech funding), 30 days, 30 articles each | 3 | 62 | 49 | 21 | 16 |
| Five company and topic terms, 14 days (byline check on the article list) | 5 | 87 | 65 | 31 | 33 |
On the three topic run that is about 3.9 articles read per journalist row, so the run cost at the free plan prices was 16 journalist rows plus 62 articles from the news run plus the two start fees. Press release wires were left out of both (4 and 5 articles).
💵 Pricing
Pay per event. You pay for each journalist returned and a small start fee per run. The articles come from the News and Media Mention Monitor run this actor starts on your Apify account, which charges its own price per article read.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Journalist returned (journalist-row), per journalist and outlet | $0.008 ($8.00 per 1,000) | $0.0076 ($7.60 per 1,000) | $0.0072 ($7.20 per 1,000) | $0.0068 ($6.80 per 1,000) |
Actor start (apify-actor-start), per run | $0.0025 | $0.0025 | $0.0025 | $0.0025 |
Article from the news run (article-row), per article read | $0.0023 | $0.002185 | $0.00207 | $0.001955 |
News run start (apify-actor-start), per run | $0.0015 | $0.0015 | $0.0015 | $0.0015 |
- About half of news article pages name a journalist in their markup, so expect roughly 2 to 3 articles per journalist row. See the measured numbers above.
max_articles_per_topicsets how many articles are read, and so the news run's cost. - A summary row is free, and so is the row for a refused input; the start fee is charged on every run that starts.
max_charge_usdcovers both actors: up to 60 percent goes to the news run, always leaving room for one journalist row, and the run stops before the total would pass it. A cap too small for one article and one journalist row starts no news run and returns one free summary row. A run also stops at the maximum cost per run you set in Apify.- Free Apify plan: 1.50 USD of evaluation a month for this actor, which is 188 journalists at the free plan price. Any paid Apify plan removes the cap.
- The events above are all you pay. Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
🚀 Usage examples
Reporters on your beat this month.
{ "topics": ["\"sales automation\"", "\"sales tech\" startup"], "since_days": "30", "max_journalists": "40" }
Only repeat writers at the outlets you pitch.
{ "topics": ["fintech funding"], "outlets_include": ["techcrunch.com", "fintechfutures.com", "finextra.com"], "min_articles": "2" }
Clay. Call the actor from a Clay column with a topic column mapped to topics. Clay sends every field as a string, which this actor accepts.
API. POST https://api.apify.com/v2/acts/mambalabs~journalist-media-list-builder/runs with the input above, then read the default dataset.
MCP. The @mambalabsdev/mcp-journalist-media-list-builder server exposes the tool find_journalists to AI agents.
⚠️ Error handling
| Situation | What you get |
|---|---|
| Input with no usable topic, or a value of the wrong kind | One free row, row_status error, error_reason starting with input_invalid:. The run succeeds and no news run starts. No journalist is charged; the run start fee applies, because Apify charges it when the run starts. A missing or empty topics list gets the same row |
| No article matched | One free summary row, no_results |
| Google News did not answer | One free summary row, blocked |
| Articles were read but none named a journalist | One free summary row, no_results, with the counts |
| The news run did not succeed, or refused its input | One free summary row, error, starting with stage_failed: and naming the run |
| An article page refuses or does not answer | That article is skipped; the run goes on |
⚠️ Limitations
- About half of news pages carry a byline in their markup. Paywalled pages, pages that block automated reads, and pages that print the byline only as plain text are skipped.
- A journalist who wrote about your topic outside Google News's newest 100 articles per topic is missed.
- Emails and phone numbers are not returned.
- Agency and wire bylines (Reuters, Associated Press, staff and desk labels) are left out on purpose.
- The same person at two outlets is two rows, because you pitch a person at an outlet.
🧩 Want other GTM data?
Mamba Labs builds custom actors for B2B go-to-market teams. The public versions of that work live here on the Store.
Every actor in the suite takes a domain, a company, or a person and returns flat rows, so they stack in the same table without reshaping anything.
🛠️ Need something custom built? Talk to Mamba Labs.
🆘 Support
Found a bug? Open an issue on the Issues tab. Response time is typically within 48 hours.
ℹ️ Sourcing. Articles come from public Google News pages through the Mamba Labs News and Media Mention Monitor; bylines come from each article's own public page, read directly with robots.txt honored. No key, no login. You are responsible for how you use the output.
Built by Mamba Labs.