# Google News Scraper: Real Article URLs & Full Text (`t3data/google-news`) Actor

Scrape Google News by keyword, topic or location in any country and language. Real publisher URLs (not Google redirects), time windows, date ranges, dedupe, and optional full article text. Pay only for articles you get.

- **URL**: https://apify.com/t3data/google-news.md
- **Developed by:** [T3 Data](https://apify.com/t3data) (community)
- **Categories:** News, SEO tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 articles

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 & Full Text

A **Google News API** alternative with no API key and no quota. Search by keyword, topic or location in any country and language, and get the **real publisher URL** for every article (not a news.google.com redirect), plus optional full article text for AI pipelines. **You only pay for articles you get**: empty searches and failed feeds are free.

| | |
|---|---|
| 💲 **Price** | $3 per 1,000 articles on Apify's Free plan, down to $1 on paid plans. Real URLs and article text are included, not extra. |
| ⚡ **Speed** | ~400 articles from 31 searches and feeds, all with real URLs, in ~40 seconds |
| 📥 **Input** | Keywords (with Google operators), topics, locations, or any news.google.com link |
| 📤 **Output** | One row per article: title, source, publish time, real URL, and optionally text, image, author, description |
| 🌍 **Coverage** | Every Google News country and language; time windows from 1 hour to 1 year, or exact date ranges |

### What people use it for

- **Brand and PR monitoring**: daily mentions of your company, product or CEO, with links you can open and store
- **Market and competitor intelligence**: track a sector, a list of competitors or a ticker
- **AI and RAG pipelines**: news text ready to summarize, classify or embed, without a second scraper
- **News aggregation**: build custom feeds from topics, locations and keywords for any country
- **Research datasets**: years of coverage on a topic, split day by day past Google's 100-result cap
- **Alerts**: schedule hourly runs with `when:1h` and push new articles to Slack, email or a sheet

### How to use it

1. Add search queries, pick topics or locations, or paste Google News links.
2. Choose a time window or date range, plus language and country. Tick **Extract article text** if you want the full text.
3. Click **Start**, then download the results as JSON, CSV or Excel, or fetch them through the API.

### For AI agents and automations

- **One job:** get Google News articles (with the real publisher URL, optionally full text) for searches, topics or locations. Minimal input: `{ "queries": ["artificial intelligence"], "maxArticlesPerFeed": 20 }`
- **Fast enough for a single tool call:** one search with 20–50 articles finishes in a few seconds; ~350 articles with real URLs in ~40 seconds, which fits inside the Apify MCP server's default 30-second wait for small inputs. For big jobs, start the run asynchronously and read the dataset when it finishes.
- **Where the results are:** dataset items (fields below). A **run summary** is in the key-value store record `OUTPUT`: `status` (`SUCCEEDED`, `PARTIAL`, `STOPPED_AT_SPEND_LIMIT`, `ABORTED`, `NO_RESULTS`, `SOURCE_UNAVAILABLE`), `results`, `errorsByCode` and a plain-English `message`.
- **Predictable billing:** pay per event. Only successful articles are charged; error rows are free.
- **Respects "Max cost per run":** it never starts work your budget can't pay for, then stops cleanly with status `STOPPED_AT_SPEND_LIMIT`. Everything fetched up to that point is kept.
- **Graceful on abort and restarts:** partial results are always kept, and a platform restart resumes without duplicates or double charges.
- **Honest failures:** if the source blocks every request or changes its format, the run fails with a clear message and you pay $0, instead of quietly returning empty results.
- Works with the **Apify MCP server** (Claude, Cursor, other agents), agentic payments, and the API.

### Input examples

Last 24 hours of news on two companies:

```json
{ "queries": ["OpenAI", "Anthropic"], "timeWindow": "1d" }
```

Business and technology headlines in Germany, in German:

```json
{ "topics": ["BUSINESS", "TECHNOLOGY"], "language": "de", "country": "DE" }
```

Every article on a topic for a month, one search per day, with full text (articles without text skipped and not charged):

```json
{ "queries": ["\"interest rates\""], "dateFrom": "2026-09-01", "dateTo": "2026-09-30", "splitByDay": true, "extractText": true, "onlyWithText": true }
```

Local news plus a topic page copied from news.google.com:

```json
{ "locations": ["Chicago"], "feedUrls": ["https://news.google.com/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB"] }
```

### Output

One item per article. From a real run with **Extract article text** on (text shortened here):

```json
{
  "status": "ok",
  "title": "Electric vehicle sales are plummeting. Will they soon become too niche?",
  "source": "ABC News - Breaking News, Latest News and Videos",
  "sourceUrl": "https://abcnews.com",
  "publishedAt": "2026-10-15T02:23:28.000Z",
  "url": "https://abcnews.com/Business/electric-vehicle-sales-plummeting-become-niche/story?id=130752429",
  "googleNewsUrl": "https://news.google.com/rss/articles/CBMimgFBVV95cUxQWnQ4MU9n...?oc=5",
  "articleId": "CBMimgFBVV95cUxQWnQ4MU9n...",
  "feedType": "search",
  "query": "electric vehicles",
  "position": 2,
  "feedTitle": "\"electric vehicles when:7d\" - Google News",
  "language": "en-US",
  "country": "US",
  "text": "Demand for electric vehicles in the U.S. has cratered since last September, when the $7,500 federal tax credit for EVs expired. The financial losses have forced automakers to write off billions...",
  "wordCount": 888,
  "image": "https://i.abcnewsfe.com/a/e6cc7042-b813-4b70-8795-d5ee21808334/charger-2-gty-gmh-260304_1772633716702_hpMain_16x9.jpg?w=1600",
  "author": "Morgan Korn",
  "description": "Nearly 96% of electric vehicle owners say they would consider purchasing or leasing another one in the future, according to one study.",
  "sitePublishedAt": "2026-03-08T10:02:00.000Z",
  "articleLanguage": "en"
}
```

| Field | Meaning |
|---|---|
| `title`, `source`, `sourceUrl` | Headline (with the " - Source" suffix removed), publisher name and homepage |
| `publishedAt` | When Google News indexed the article (ISO, UTC) |
| `url` | The **real article URL** at the publisher |
| `googleNewsUrl`, `articleId` | Google's redirect link and its id |
| `feedType`, `query`, `position`, `feedTitle` | Which search, topic, location or link found it, and its rank there |
| `day` | With **Split date range by day**: the day searched |
| `text`, `wordCount` | Main article text (only with **Extract article text**) |
| `image`, `author`, `description`, `sitePublishedAt`, `articleLanguage` | Taken from the publisher's page (only with **Extract article text**) |
| `textError` | Why text is missing: `TEXT_BLOCKED` (paywall or bot wall), `TEXT_UNAVAILABLE`, `NO_TEXT_FOUND`. With **Only articles with text**, these articles are skipped and not charged |
| `urlDecoded` | `false` only in the rare case Google refused to decode the link |

### Cost examples

| Job | Articles | Cost (Free plan) |
|---|---|---|
| 10 brands, last 24 hours | ~500 | ~$1.50 |
| All 8 topics in 5 countries | ~2,500 | ~$7.50 |
| One keyword, every day for a year (`splitByDay`) | up to 36,500 | up to ~$110 |

Duplicates across queries are skipped and never charged. Set **Max cost per run** or **Max articles in total** to cap any run, and the actor stops cleanly at the limit.

### Integrations

- **API**: `client.actor("t3data/google-news").call({ queries: [...] })` (JS), or `client.actor("t3data/google-news").call(run_input={"queries": [...]})` (Python). Full snippets are on the **API** tab.
- **AI agents (MCP)**: available as a tool through the Apify MCP server.
- **No-code**: Make, Zapier, n8n, Google Sheets, Slack and webhooks, through Apify integrations. Use **Schedules** for hourly or daily monitoring.
- **Export**: JSON, CSV, Excel, XML, HTML or RSS.

### Error codes (never charged)

| Code | Meaning |
|---|---|
| `NO_RESULTS` | Google News has no articles for this search or feed |
| `INVALID_TOPIC` | Not one of TOP, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH |
| `INVALID_URL` | Not a news.google.com link |
| `INVALID_DATE` | A date isn't in YYYY-MM-DD form |
| `FEED_NOT_FOUND` | Google has no feed at that link |
| `SOURCE_UNAVAILABLE` (run status) | Every request was blocked, or the source changed its format. The run fails with $0 charged; retry later |
| `BLOCKED` | Google kept refusing after every retry (rare; try again) |

### FAQ

**Why only 100 articles per search?** That is Google News's own limit per search. Set a date range and tick **Split date range by day** to run one search per day, which gets up to 100 articles for each day.

**Are the URLs the real article links?** Yes. Google News wraps every link in a news.google.com redirect. This actor decodes each one to the publisher's URL, at no extra cost. `googleNewsUrl` keeps the original.

**Why is text missing for some articles, and do I pay for those?** In our tests text came back for about 2 in 3 articles. Some publishers (Reuters, WSJ, NYT, AP, Bloomberg and others) block bots or sit behind a paywall. By default those articles are still returned with the title, source, date and real URL, plus a `textError` saying why, and charged like any article: the price is the same with or without text extraction, so you never pay extra for text you didn't get. If you only want articles with text, tick **Only articles with text**: articles without text are then skipped and **not charged**.

**Which languages and countries work?** All of Google News's editions. Set `language` (e.g. `en-GB`, `fr`, `es-419`, `pt-BR`, `ja`) and `country` (e.g. `GB`, `FR`, `MX`, `BR`, `JP`).

**Can I use search operators?** Yes: `"exact phrase"`, `site:`, `intitle:`, `OR` and `-word` all work as on Google News.

**Do I need a proxy or an API key?** No. Proxies and retries are built in and included in the price.

**Is it legal?** It reads public Google News listings and public article pages. Article text is copyrighted by its publisher, so check your use (summaries and analysis are common; republishing full text usually isn't allowed).

**Something broke?** Open an issue on the **Issues** tab with your input. Fixes usually ship within a day.

**Found it useful?** A star rating on this page helps other people find it.

### Limits

- Up to 100 articles per search or feed (Google's cap; use day splitting for more).
- Article text is best effort and depends on the publisher allowing access.
- `publishedAt` is Google's timestamp; `sitePublishedAt` is the publisher's own, when available.
- With day splitting, Google's day boundaries aren't UTC, so `publishedAt` can be up to a day after the `day` searched.
- `site:` only finds publishers that Google News covers in the chosen country and language edition.

### More from T3 Data

- [YouTube Transcripts](https://apify.com/t3data/youtube-transcripts): full transcripts, SRT and AI-ready chunks for videos, playlists and channels
- [YouTube Comments Scraper](https://apify.com/t3data/youtube-comments): comments and replies with likes, pinned and creator-hearted flags
- [YouTube Channel & Shorts Scraper](https://apify.com/t3data/youtube-channel): channel info plus every video and Short with exact views, likes and dates
- [Google Ads Transparency Scraper](https://apify.com/t3data/google-ads-transparency): every ad an advertiser or domain runs on Google, with dates, images and YouTube videos
- [Google Trends Scraper](https://apify.com/t3data/google-trends): interest over time, by region, related queries, and trending now
- [Google Hotels Scraper](https://apify.com/t3data/google-hotels): hotel prices, ratings and booking-site prices for any city and dates

***

*This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Google. It only accesses publicly available news listings and articles.*

# Actor input Schema

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

Keywords to search on Google News, one per line. Google operators work: "exact phrase", site:reuters.com, intitle:, OR, -exclude.

## `topics` (type: `array`):

Google News topic sections (headlines for the selected country and language).

## `locations` (type: `array`):

Local news for a city, region or country, e.g. "Chicago", "Bavaria", "Japan" (Google News geo feeds).

## `feedUrls` (type: `array`):

Any news.google.com page or RSS link: a topic, a publication, a story or a saved search. It is converted to its RSS feed.

## `timeWindow` (type: `string`):

Only articles published in this window. Ignored when a date range is set.

## `dateFrom` (type: `string`):

Articles published on or after this date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Articles published before this date (YYYY-MM-DD).

## `splitByDay` (type: `boolean`):

Google returns at most 100 articles per search. With a date range set, this runs one search per day, so you can collect far more articles (up to 100 per day).

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

Google News language code (hl), e.g. en-US, en-GB, de, fr, es-419, pt-BR, ja.

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

Two-letter country code (gl), e.g. US, GB, DE, IN, BR, JP.

## `maxArticlesPerFeed` (type: `integer`):

Google News returns up to 100 articles per feed.

## `maxArticles` (type: `integer`):

Stop after this many articles across all feeds. 0 = no limit.

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

Turn Google's news.google.com redirect links into the publisher's real article URL. Included in the price.

## `extractText` (type: `boolean`):

Also download each article and extract its main text, image, author and description. Best effort: some publishers block bots or use paywalls. Included in the price.

## `onlyWithText` (type: `boolean`):

With text extraction on, skip articles whose publisher blocks it (paywalls, bot walls). Skipped articles are not saved and not charged.

## `dedupe` (type: `boolean`):

Skip articles already returned by an earlier query or feed in the same run (duplicates are not charged).

## `maxConcurrency` (type: `integer`):

How many requests to run at the same time.

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

Apify Proxy is used by default. If Google blocks an IP, the actor retries on fresh IPs and switches to residential IPs automatically. Proxy cost is included in the price.

## Actor input object example

```json
{
  "queries": [
    "artificial intelligence"
  ],
  "timeWindow": "any",
  "splitByDay": false,
  "language": "en-US",
  "country": "US",
  "maxArticlesPerFeed": 100,
  "maxArticles": 0,
  "decodeUrls": true,
  "extractText": false,
  "onlyWithText": false,
  "dedupe": true,
  "maxConcurrency": 40,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `articles` (type: `string`):

One item per news article, plus free error rows for feeds that failed or had no results.

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

One JSON object: status (SUCCEEDED, PARTIAL, STOPPED_AT_SPEND_LIMIT, ABORTED, NO_RESULTS, SOURCE_UNAVAILABLE), results count, failed inputs by error code, and a plain-English message.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("t3data/google-news").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"] }

# Run the Actor and wait for it to finish
run = client.actor("t3data/google-news").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"
  ]
}' |
apify call t3data/google-news --silent --output-dataset

```

## MCP server setup

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

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/SNS43R4CAU2G0iggD/builds/qxbnA1VyghKsbnhG2/openapi.json
