# Google News Scraper (Real Article URLs) (`juliob.rangel/google-news-scraper-fast`) Actor

Scrape Google News results for any keyword, in any country and language: headline, publisher, publish date and the real article URL (decoded from Google's redirect). Filter by last hour, day, week or year. Export to Excel, CSV or JSON.

- **URL**: https://apify.com/juliob.rangel/google-news-scraper-fast.md
- **Developed by:** [Julio Barcellos Rangel](https://apify.com/juliob.rangel) (community)
- **Categories:** News, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 article scrapeds

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/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

## Google News Scraper (Real Article URLs)

This Google News scraper collects Google News results for any keyword, in any country and language, and returns the headline, publisher, publish date and the real article URL decoded from Google's redirect link. It is made for PR and communications teams, analysts, investors, researchers and anyone who builds news alerts or news datasets. Use it to export Google News to Excel or CSV, or as a news monitoring feed filtered by the last hour, day, week or year.

### What does Google News Scraper do?

For each search term, the robot reads the Google News search results for the language and country you choose and keeps up to **Max articles per search term**. For every article it returns:

- the **headline**, without the " - Publisher" ending Google adds;
- the **publisher** name and its website;
- the **publish date**, converted to UTC;
- the **Google News link**;
- the **real article URL** on the publisher's site. Google News links are redirects, so the robot asks Google News' own decoder for the final address. This is on by default and can be turned off.

You can search for keywords, company or brand names, people in the news or topics. Google News operators work inside a search term, for example `"tesla" site:reuters.com`. The **Published within** filter limits results to the last hour, 24 hours, 7 days or year; the robot adds Google's `when:` operator to the query for you.

**Language** and **country** pick the Google News edition, for example `en-US` with `US`, `pt-BR` with `BR`, or `de` with `DE`. Each run uses one edition, and every row records the language and country, so you can combine runs for several countries in one spreadsheet.

What comes out is one row per article: search term, position, title, source, source URL, article URL, publish date, Google News URL, language, country and collection time.

### What data can you extract?

| Field | What it means | Example |
|---|---|---|
| `query` | Search term as you entered it (without the time filter) | `artificial intelligence` |
| `position` | Position of the article in the results for that term, starting at 1 | `2` |
| `title` | Headline, without the publisher suffix | `Georgia Tech Announces New Online Master’s Degree in Artificial Intelligence` |
| `source` | Publisher name | `Georgia Tech News Center` |
| `sourceUrl` | Publisher website | `https://news.gatech.edu` |
| `articleUrl` | Real URL of the article on the publisher's site (`null` if decoding is off or failed) | `https://news.gatech.edu/news/2026/10/06/georgia-tech-announces-new-online-masters-degree-artificial-intelligence` |
| `publishedAt` | Publish date and time in UTC | `2026-10-06T19:32:43.000Z` |
| `googleNewsUrl` | Google News link to the article | `https://news.google.com/rss/articles/CBMi…?oc=5` |
| `language` | Language used for the search | `en-US` |
| `country` | Country used for the search | `US` |
| `scrapedAt` | When the row was collected (UTC) | `2026-10-09T20:09:33.974Z` |
| `error` | Only on error rows: what went wrong | `No articles found` |

### How to use Google News Scraper

1. Open the robot in Apify Console and go to the **Input** tab.
2. Add one or more **Search terms**, one per line, for example a brand, a competitor, a stock name or a topic.
3. Choose **Published within**: any time, last hour, last 24 hours, last 7 days or last year.
4. Set **Language** (for example `en-US`, `pt-BR`, `es-419`) and **Country** (for example `US`, `BR`, `GB`).
5. Set **Max articles per search term** (1 to 100) and keep **Get real article URLs** on if you need publisher links.
6. Click **Start** and wait for the run to finish.
7. Open the **Output** tab to see the Articles table, then export the data as JSON, CSV, Excel or HTML.
8. Optional: save the input as a task and schedule it every hour or every morning for news alerts.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `queries` | array of strings | `["artificial intelligence"]` | Keywords, company names or topics. Google News operators work. |
| `timeRange` | string | `7d` | `any`, `1h`, `1d`, `7d` or `1y`: only articles from that period. |
| `language` | string | `en-US` | Interface language code, e.g. `en-US`, `pt-BR`, `es-419`, `de`, `fr`. |
| `country` | string | `US` | Two-letter country code, e.g. `US`, `BR`, `GB`, `IN`, `DE`. |
| `maxArticlesPerQuery` | integer | `30` | Articles per search term, from 1 to 100. |
| `decodeUrls` | boolean | `true` | Decode Google's redirect links into the publisher's real article URL. |
| `proxy` | object | `{"useApifyProxy": true}` | Apify Proxy settings. The default works for most runs. |

Example input:

```json
{
  "queries": ["artificial intelligence", "\"tesla\" site:reuters.com"],
  "timeRange": "1d",
  "language": "en-US",
  "country": "US",
  "maxArticlesPerQuery": 50,
  "decodeUrls": true,
  "proxy": { "useApifyProxy": true }
}
```

Example for Brazilian news in Portuguese:

```json
{
  "queries": ["petrobras"],
  "timeRange": "7d",
  "language": "pt-BR",
  "country": "BR",
  "maxArticlesPerQuery": 10
}
```

### Output example

One real row from the latest run (search term `artificial intelligence`, `en-US`, `US`). The Google News URL is shortened.

```json
{
  "query": "artificial intelligence",
  "position": 2,
  "title": "Georgia Tech Announces New Online Master’s Degree in Artificial Intelligence",
  "source": "Georgia Tech News Center",
  "sourceUrl": "https://news.gatech.edu",
  "articleUrl": "https://news.gatech.edu/news/2026/10/06/georgia-tech-announces-new-online-masters-degree-artificial-intelligence",
  "publishedAt": "2026-10-06T19:32:43.000Z",
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMisgFBVV95cUxPcXRtclE5eHgxeG55N2gxTDlGbzI0d1EzTXVEOWRNSUxZRzdwb28wd1BaemhwY0JkRTBW…?oc=5",
  "language": "en-US",
  "country": "US",
  "scrapedAt": "2026-10-09T20:09:33.974Z"
}
```

When a search term returns nothing, you get an error row such as `{"query": "your search term", "error": "No articles found"}`.

### How much does it cost?

The robot uses **pay per event** pricing: you pay **$1.00 per 1,000 articles** ($0.001 per article returned) on the Free plan. Platform usage is included in the price, so there is no separate charge for compute or proxy.

| Apify plan | Price per 1,000 articles |
|---|---|
| Free | $1.00 |
| Bronze (10% off) | $0.90 |
| Silver (20% off) | $0.80 |
| Gold and higher (30% off) | $0.70 |

Worked examples on the Free plan:

- One search term with the default 30 articles: **$0.03**.
- 20 brand names at 100 articles each: up to 2,000 articles = up to **$2.00**.
- 10,000 articles collected over a month of scheduled runs: **$10.00** (or $7.00 on Gold).

What is **not** charged: error rows (`Could not load Google News` and `No articles found`). Articles whose real URL could not be decoded are still returned and charged, with `articleUrl` set to `null` and `googleNewsUrl` filled. Turning `decodeUrls` off does not change the price.

### Use cases

- **Brand monitoring:** follow every mention of your company, products or executives in the news.
- **Competitor tracking:** schedule daily searches for competitor names and send new rows to Slack or email.
- **PR coverage reports:** list the articles and publishers that covered a launch or announcement.
- **Market and investment alerts:** watch news about a stock, a sector or a commodity every hour.
- **Media lists:** find which publishers write about a topic, using `source` and `sourceUrl`.
- **AI datasets:** collect headlines and article URLs for summaries, topic clustering or sentiment analysis.
- **International news:** compare how the same topic is covered in different countries and languages.

### Tips and limits

- **About 100 articles per search term.** That is the most Google News returns for one search, and the maximum of `maxArticlesPerQuery`. For more coverage, split a topic into several narrower search terms.
- **Headlines, not full text.** The robot returns titles, publishers, dates and links. It does not download the article text, images or snippets. To get the text, run the article URLs through a web page to Markdown crawler.
- **`articleUrl` can be `null`.** If Google's decoder does not answer for an article, the row keeps `googleNewsUrl`, which still opens the article in a browser.
- **Turn off decoding for speed.** With `decodeUrls` off, the robot skips the extra requests and `articleUrl` is always `null`.
- **Order of results.** Articles keep the order of the Google News results. Sort by `publishedAt` if you need the newest first.
- **No duplicate filter.** An article that matches two search terms appears once for each and is charged each time.
- **Retries:** each request is tried up to 4 times. If the search itself cannot be loaded, you get the error row `Could not load Google News`.

### Use it from the API, Python or JavaScript

JavaScript (Node.js) with the official `apify-client` package:

```javascript
const { ApifyClient } = require('apify-client');

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const input = { queries: ['openai', 'anthropic'], timeRange: '1d', maxArticlesPerQuery: 50 };
const run = await client.actor('juliob.rangel/google-news-scraper-fast').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python with the official `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')
input = {'queries': ['petrobras'], 'timeRange': '7d', 'language': 'pt-BR', 'country': 'BR'}
run = client.actor('juliob.rangel/google-news-scraper-fast').call(run_input=input)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

You can also connect the robot to Make, Zapier or n8n, export results to Google Sheets, send them to a webhook when a run finishes, or let AI agents call it through the Apify MCP server.

### FAQ

**Do I need a Google account, cookies or an API key?**
No. The robot reads public Google News results. You only need an Apify account.

**Can I export the articles to Excel or CSV?**
Yes. Download the dataset as JSON, CSV, Excel or HTML from the Output tab, or read it through the API.

**How many articles can I get?**
Up to about 100 per search term, and you can add as many search terms as you like in one run.

**Why is `articleUrl` empty for some rows?**
Either `decodeUrls` is off, or Google's decoder did not return the final URL for that article. The `googleNewsUrl` link still works.

**Can I get news from the last hour only?**
Yes. Set `timeRange` to `1h` and schedule the robot to run every hour.

**Why did I get an error row?**
`No articles found` means Google News had no results for that term and period. `Could not load Google News` means the search did not load after several tries. Error rows are free.

**Is scraping Google News legal?**
The robot only collects publicly available data: headlines, publisher names, dates and links. You are responsible for complying with Google's terms, publishers' rights and privacy laws such as GDPR and LGPD. If you process personal data, for example names of people in the news, you need a legitimate reason to do so.

### Related scrapers

- [Website to Markdown Crawler](https://apify.com/juliob.rangel/website-to-markdown-crawler) to turn the article URLs into clean text.
- [Substack Scraper (Posts, Likes, Comments, Full Text)](https://apify.com/juliob.rangel/substack-scraper-fast) for newsletters on the same topics.
- [Telegram Channel Scraper (Posts, Views, Reactions)](https://apify.com/juliob.rangel/telegram-channel-scraper-fast) to follow news channels on Telegram.
- [YouTube Search Scraper (Fast & Cheap)](https://apify.com/juliob.rangel/youtube-search-fast) for video coverage of a topic.
- [Threads Scraper (Profiles, Posts, Search)](https://apify.com/juliob.rangel/threads-scraper-fast) to see what people post about the news.

***

## Google News Scraper (PT-BR)

Busca no **Google Notícias** por qualquer termo, em qualquer país e idioma: título, veículo, data e o **link real da matéria**. Filtro por última hora, 24 horas, 7 dias ou ano. Você paga só por notícia retornada.

# Actor input Schema

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

Keywords, company names or topics. Google News operators work, e.g. "tesla" site:reuters.com

## `timeRange` (type: `string`):

Only articles from this period.

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

Interface language code, e.g. en-US, pt-BR, es-419, de, fr.

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

Two-letter country code, e.g. US, BR, GB, IN, DE.

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

Google News returns up to about 100 articles per search.

## `decodeUrls` (type: `boolean`):

Decode Google's redirect links into the publisher's real article URL.

## `proxy` (type: `object`):

Apify Proxy settings.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "timeRange": "7d",
  "language": "en-US",
  "country": "US",
  "maxArticlesPerQuery": 30,
  "decodeUrls": true,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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"
    ],
    "language": "en-US",
    "country": "US",
    "maxArticlesPerQuery": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("juliob.rangel/google-news-scraper-fast").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"],
    "language": "en-US",
    "country": "US",
    "maxArticlesPerQuery": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("juliob.rangel/google-news-scraper-fast").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"
  ],
  "language": "en-US",
  "country": "US",
  "maxArticlesPerQuery": 30
}' |
apify call juliob.rangel/google-news-scraper-fast --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,juliob.rangel/google-news-scraper-fast"
        }
    }
}
```

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/98mXMshRJ10oa8Xla/builds/ITcxOMSN1pfUVrq5j/openapi.json
