# Google News Journalist & Media Lead Finder (`fetch_cat/google-news-journalist-lead-finder`) Actor

Turn Google News searches into outreach-ready journalist and publication leads with article evidence, author metadata, and public contact signals.

- **URL**: https://apify.com/fetch\_cat/google-news-journalist-lead-finder.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Lead generation, News, Marketing
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 media leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Google News Journalist Email Finder & Media Lead Finder

Use this journalist email finder to turn Google News topics into outreach-ready journalist and publication leads. The Actor discovers recent coverage, resolves publisher articles through Google Search, extracts public author metadata, and returns any visibly published emails, social profiles, and exact evidence URLs.

Use it to find journalist contacts, build a current journalist database, or run a media contact finder workflow for digital PR prospecting, founder outreach, source research, media-list refreshes, link-building campaigns, and recurring coverage monitoring. Results are available as JSON, CSV, Excel, API output, scheduled datasets, and MCP tool calls.

### What this Actor gives you

- Recent Google News articles for each topic and locale.
- Resolved publisher URLs instead of Google News wrapper links when search resolution succeeds.
- Publication name, domain, article date, headline, and snippet.
- Journalist name and author profile URL when the publisher exposes standard metadata.
- Public emails and social links found on the article or a bounded author/contact page.
- `contactSourceUrls` so every saved email has reviewable public evidence.
- Honest `no_public_contact` and `article_unavailable` rows instead of silent omissions.

This is a lead-generation workflow, not a private-data broker. It only collects information visibly published on public pages.

### Common use cases

1. Build a current media list for a product category, funding round, or policy topic.
2. Find outlets and reporters already covering a founder's market.
3. Refresh PR outreach lists weekly with scheduled runs.
4. Identify publication domains for newsroom or partnership research.
5. Feed article-backed media leads into a CRM, spreadsheet, agent, or enrichment pipeline.
6. Monitor competitor coverage and preserve the journalist/outlet evidence behind each lead.

### Input

Paste 1–20 Google News topics. A practical first run is:

```json
{
  "queries": [
    "artificial intelligence startups",
    "climate technology funding"
  ],
  "maxArticlesPerQuery": 10,
  "freshnessDays": 7,
  "country": "US",
  "language": "en",
  "enrichPublisherPages": true,
  "maxExtraPagesPerArticle": 1,
  "includeNoContact": true
}
```

#### Input settings

| Setting | JSON key | Description |
| --- | --- | --- |
| Google News topics | `queries` | Add 1–20 searches such as climate technology funding, fintech regulation, or artificial intelligence startups. |
| Maximum articles per query | `maxArticlesPerQuery` | Resolve and save up to this many recent article leads for each query. |
| Freshness window in days | `freshnessDays` | Ask Google News for articles published within this many days, from 1 to 365. |
| Country | `country` | Two-letter Google market code such as US, GB, PT, or DE. |
| Language | `language` | Google language code such as en, de, es, or pt. |
| Inspect public publisher pages | `enrichPublisherPages` | Resolve each article and inspect its public HTML for author metadata, emails, and social links. |
| Extra author or contact pages | `maxExtraPagesPerArticle` | Inspect up to this many linked author, press, newsroom, staff, or contact pages after the article. Set to 0 for article-only enrichment. |
| Save leads without a public email | `includeNoContact` | Keep one truthful status row for every resolved result, even when no public email is visible. |
| Run time limit in seconds | `runTimeSecs` | Stop admitting new articles before this shared deadline. Use 30–270 seconds. |
| Google proxy configuration | `proxyConfiguration` | The default GOOGLE\_SERP proxy resolves publisher article URLs reliably. Change it only if your account requires a custom Apify proxy setup. |

Start with 5–10 articles per query. Increase volume after confirming that the chosen publishers expose the fields your campaign needs.

### Input recipes

- **Focused journalist list:** one narrow topic, 5–10 articles, 14 days, and one extra author/contact page.
- **Weekly PR refresh:** two or three campaign topics, 7 days, and `includeNoContact: true` for stable downstream deduplication.
- **Article-only research:** set `maxExtraPagesPerArticle` to `0` to reduce requests while retaining news, outlet, and best-effort author fields.
- **Email-only export:** set `includeNoContact` to `false` when downstream work only accepts rows with a public email.

### Output

Each dataset item is one article-backed media lead:

```json
{
  "query": "artificial intelligence startups",
  "headline": "Startup launches new AI research platform - Example News",
  "googleNewsUrl": "https://news.google.com/rss/articles/...",
  "articleUrl": "https://example.com/technology/ai-research-platform",
  "outletName": "Example News",
  "outletUrl": "https://example.com/",
  "publicationDomain": "example.com",
  "journalistName": "Alex Rivera",
  "authorProfileUrl": "https://example.com/authors/alex-rivera",
  "publishedAt": "2026-08-11T10:00:00.000Z",
  "publicEmails": ["newsroom@example.com"],
  "primaryEmail": "newsroom@example.com",
  "socialLinks": ["https://www.linkedin.com/company/example-news"],
  "contactSourceUrls": ["https://example.com/contact"],
  "contactConfidence": "author_or_contact_page",
  "status": "found",
  "error": null,
  "collectedAt": "2026-08-11T21:30:00.000Z"
}
```

The output schema also includes the Google News snippet and explicit diagnostics for article-specific failures. The `RUN_SUMMARY` key-value-store record reports query coverage, saved rows, contacts found, no-contact rows, unavailable pages, and bounded errors.

### Output fields

| Field | JSON key | Description |
| --- | --- | --- |
| Query | `query` | Original Google News topic. |
| Headline | `headline` | News article headline. |
| Google News URL | `googleNewsUrl` | Google News result evidence URL. |
| Article URL | `articleUrl` | Resolved publisher article URL when available. |
| Outlet | `outletName` | Publication or outlet name reported by Google News. |
| Outlet URL | `outletUrl` | Publication home URL reported by Google News. |
| Publication domain | `publicationDomain` | Normalized publisher domain. |
| Journalist | `journalistName` | Public author name from article metadata when exposed. |
| Author profile | `authorProfileUrl` | Public author profile URL when linked by the publisher. |
| Published | `publishedAt` | Normalized publication timestamp. |
| Snippet | `snippet` | Google News result summary text. |
| Public emails | `publicEmails` | Unique emails visibly published on inspected pages. |
| Primary email | `primaryEmail` | First public email found. |
| Social links | `socialLinks` | Public social profile URLs found on inspected pages. |
| Contact evidence | `contactSourceUrls` | Exact public URLs where emails were found. |
| Contact confidence | `contactConfidence` | article\_page, author\_or\_contact\_page, or none. |
| Status | `status` | found, no\_public\_contact, or article\_unavailable. |
| Error | `error` | Article-specific diagnostic when enrichment was unavailable. |
| Collected | `collectedAt` | UTC collection timestamp. |

### Status and contact semantics

- `found`: at least one public email was found on an inspected page.
- `no_public_contact`: the article or outlet was accessible, but no public email was visible.
- `article_unavailable`: the publisher article could not be resolved or fetched within the bounded attempt.
- `article_page`: the email appeared directly on the resolved article page.
- `author_or_contact_page`: the email appeared on a linked author, press, newsroom, staff, or contact page.
- `none`: no public email was found.

A missing email is not a failed run. Many publishers intentionally expose a contact form or social profile instead of an address.

### API examples

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~google-news-journalist-lead-finder/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["cybersecurity startups"],"maxArticlesPerQuery":5,"freshnessDays":14}'
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/google-news-journalist-lead-finder').call({
  queries: ['cybersecurity startups'],
  maxArticlesPerQuery: 10,
  freshnessDays: 14,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/google-news-journalist-lead-finder").call(run_input={
    "queries": ["cybersecurity startups"],
    "maxArticlesPerQuery": 10,
    "freshnessDays": 14,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### MCP and agent use

The Actor exposes input, output, and dataset schemas, so agents can discover its fields and call it through the official Apify MCP server.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/google-news-journalist-lead-finder",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

Useful prompts:

- "Find media leads covering European climate-tech funding in the last 14 days and group them by publication."
- "Run the Google News Journalist Lead Finder for AI security, keep rows with a journalist name or public email, and prepare a review sheet."
- "Schedule a weekly media-list refresh for warehouse robotics and summarize newly found outlets."

### Pricing

This Actor uses pay-per-event pricing: one `start` charge when a run begins and one tiered `result` charge for every row saved to the dataset. Status rows such as `no_public_contact` and `article_unavailable` are charged when saved because they preserve a complete, reviewable outcome for each discovered article.

See the live [Google News Journalist Lead Finder Pricing tab](https://apify.com/fetch_cat/google-news-journalist-lead-finder/pricing) for the exact rates for your Apify plan.

### Practical limit and data availability

- Google News RSS and publisher pages can change independently.
- Some publishers block automation, require consent, render author data only in JavaScript, or expose contact forms instead of emails.
- Search resolution is best effort and bounded by the shared deadline.
- The Actor does not guess private addresses, bypass paywalls, or claim that a public newsroom email belongs to a specific journalist.
- Review source URLs before outreach, follow applicable laws and site terms, and honor opt-outs.
- For recurring monitoring, schedule moderate runs and deduplicate downstream by `articleUrl` or `googleNewsUrl`.

### FAQ

#### What data can I export with this journalist email finder?

You can export headlines, publication dates, outlet names and domains, journalist names, public emails, social profiles, article URLs, and exact contact-evidence URLs as JSON, CSV, Excel, or API output.

#### Can I run Google News Journalist & Media Lead Finder through an API, schedule, or MCP client?

Yes. Run it through the Apify API, save recurring schedules, or call it as an MCP tool; each method accepts the same Actor input and returns the same dataset fields.

#### How much does it cost to use Google News Journalist & Media Lead Finder?

The Actor charges one start event per run and one result event per saved row. See the Pricing and limits section above for current event prices and example totals.

#### Does every row contain a journalist email?

No. The Actor returns public evidence only. It may find a journalist name without an email, an outlet newsroom address without a named journalist, social links only, or no public contact at all.

#### Why keep no-contact rows?

They preserve coverage, prevent repeated work, and still provide useful article, outlet, author, and publication-domain fields. Disable `includeNoContact` if you only want rows containing a public email.

#### Why is the article URL sometimes null?

Google News uses wrapper links. The Actor resolves them with a separate Google Search request, but an automation challenge or indexing gap can prevent resolution. The original `googleNewsUrl` remains as evidence.

#### Can I search a company name?

Yes. Combine a company, category, geography, funding stage, or policy topic to produce a focused media list.

#### Is this a generic Google News scraper?

No. It performs a contact-oriented workflow: news discovery, publisher resolution, author metadata extraction, bounded contact-page inspection, evidence capture, and lead status normalization.

### Related FetchCat Actors

#### More Google scrapers

- [Google People Also Ask & Related Questions Scraper](https://apify.com/fetch_cat/google-people-also-ask-scraper)
- [Google News Scraper](https://apify.com/fetch_cat/google-news-scraper)
- [Google Scholar Profiles Scraper](https://apify.com/fetch_cat/google-scholar-profiles-scraper)
- [Google Autocomplete Scraper](https://apify.com/fetch_cat/google-autocomplete-scraper)
- [Google Play Store App Search Scraper](https://apify.com/fetch_cat/google-play-store-app-search-scraper)

* [Website Contact Finder](https://apify.com/fetch_cat/website-contact-finder) — crawl known domains for public contacts.

### Support

Open an issue from the Actor page and include the run ID or run URL, full input JSON, expected output, actual output, and one reproducible public URL. Do not post tokens, private CRM data, or personal credentials.

# Actor input Schema

## `queries` (type: `array`):

Add 1–20 searches such as climate technology funding, fintech regulation, or artificial intelligence startups.

## `maxArticlesPerQuery` (type: `integer`):

Resolve and save up to this many recent article leads for each query.

## `freshnessDays` (type: `integer`):

Ask Google News for articles published within this many days, from 1 to 365.

## `country` (type: `string`):

Two-letter Google market code such as US, GB, PT, or DE.

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

Google language code such as en, de, es, or pt.

## `enrichPublisherPages` (type: `boolean`):

Resolve each article and inspect its public HTML for author metadata, emails, and social links.

## `maxExtraPagesPerArticle` (type: `integer`):

Inspect up to this many linked author, press, newsroom, staff, or contact pages after the article. Set to 0 for article-only enrichment.

## `includeNoContact` (type: `boolean`):

Keep one truthful status row for every resolved result, even when no public email is visible.

## `runTimeSecs` (type: `integer`):

Stop admitting new articles before this shared deadline. The 90-second default completes reliably in short automation windows; use 30–270 seconds.

## `proxyConfiguration` (type: `object`):

The default GOOGLE\_SERP proxy resolves publisher article URLs reliably. Change it only if your account requires a custom Apify proxy setup.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence startups",
    "climate technology funding"
  ],
  "maxArticlesPerQuery": 10,
  "freshnessDays": 7,
  "country": "US",
  "language": "en",
  "enrichPublisherPages": true,
  "maxExtraPagesPerArticle": 1,
  "includeNoContact": true,
  "runTimeSecs": 90,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (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 = {
    "queries": [
        "artificial intelligence startups",
        "climate technology funding"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/google-news-journalist-lead-finder").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 = { "queries": [
        "artificial intelligence startups",
        "climate technology funding",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/google-news-journalist-lead-finder").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 '{
  "queries": [
    "artificial intelligence startups",
    "climate technology funding"
  ]
}' |
apify call fetch_cat/google-news-journalist-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fetch_cat/google-news-journalist-lead-finder"
        }
    }
}

```

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/KpyvP2P4lvl0Yr85p/builds/ztwdya0OvOQcLCClO/openapi.json
