Google News Scraper: Search, Topics, Real Publisher URLs avatar

Google News Scraper: Search, Topics, Real Publisher URLs

Pricing

$1.50 / 1,000 news articles

Go to Apify Store
Google News Scraper: Search, Topics, Real Publisher URLs

Google News Scraper: Search, Topics, Real Publisher URLs

Google News scraper and API: search any keyword, topic or feed in any language and country, with every news.google.com link decoded to the publisher's real URL. Title, source, time, image, description, author. $1.50 per 1,000 articles. No login, no API key.

Pricing

$1.50 / 1,000 news articles

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Google News Scraper and API: search any keyword or topic, with real publisher URLs

Search Google News by keyword, section or feed URL, in any language and country, and get one row per article: headline, source, publish time, and the publisher's real article URL instead of the news.google.com redirect. Image, description and author are added from the publisher page where the site provides them. JSON, CSV or Excel. No login, no API key, no browser. $1.50 per 1,000 articles, URL decoding included.

Why this one

  • Real article links. Google's links redirect through news.google.com, so a normal crawler cannot open or deduplicate them. Every row carries articleUrl (the publisher's page) next to the original googleNewsUrl; it works as a Google News URL decoder for a downstream scraper, a database or an LLM pipeline. Decoding is on by default and in the price.
  • You choose how many, and the time window. maxArticlesPerQuery caps each query (and your cost), and timeframe filters to the past hour, day, 7 days, 30 days or year. splitByTime goes past Google's 100-article feed ceiling, up to 5,000 per search query over the last 90 days.
  • Any language, any country. Set language and country (de/DE, ja/JP, zh-TW/TW, es-419/MX...); Google operators such as site:reuters.com, "exact phrase" and OR work in queries.
  • Search, sections and feed URLs in one run. Queries, the sections TOP to HEALTH, or any news.google.com URL (converted to its RSS feed).
  • Works from Apify's servers without a proxy. It reads Google's public RSS feeds over plain HTTP.
  • Honest about metadata. Description, image and author come from each publisher's page: about a third of publishers block automated requests or set no such tag, so those fields can be null while the link and headline are always there.

Minimal input

{"queries": ["openai"], "timeframe": "1d", "maxArticlesPerQuery": 20}

An empty input runs 5 articles for "artificial intelligence".

Sample output row

A real row from a platform run on 2026-10-11 (query openai, US edition; googleNewsUrl shortened):

{
"title": "OpenAI to bring in $20 billion less than previously expected",
"source": "Mashable",
"sourceUrl": "https://mashable.com",
"articleUrl": "https://mashable.com/tech/openai-20-billion-less-revenue",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMiZ0FVX3lxTE1wRW5JWTFpTG5WZ0taS...",
"publishedAt": "2026-10-10T23:40:48Z",
"publishedTimestamp": 1791675648000,
"description": "Investors expected more.",
"imageUrl": "https://helios-i.mashable.com/imagery/articles/03JI1NtsPJWfUM6aQRFzLZM/hero-image.fill.size_1200x675.v1791561333.jpg",
"author": "Matt Binder",
"articlePublishedAt": "2026-10-09T18:56:41Z",
"relatedArticles": [],
"position": 2,
"sourceType": "search",
"query": "openai",
"topic": null,
"timeframe": "1d",
"feedUrl": "https://news.google.com/rss/search?q=openai+when:1d&hl=en-US&gl=US&ceid=US:en",
"language": "en-US",
"country": "US",
"scrapedAt": "2026-10-11T06:10:02Z",
"input": "openai"
}

Price

$1.50 per 1,000 articles ($0.0015 each), publisher-URL decoding included. 5 queries at 100 articles each is 500 articles = $0.75; 20 queries a day at 100 articles each is $3.00 a day. Set a maximum charge and the run stops when it is reached.

What does Google News Scraper do?

  • Searches Google News by keyword, with Google operators ("exact phrase", OR, -exclude, site:reuters.com, intitle:).
  • Reads the front page and the standard sections: TOP, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH.
  • Accepts any news.google.com URL (search page, /topics/... page, RSS link) and converts it to its RSS feed.
  • Filters searches by time: past hour, day, 7 days, 30 days or year.
  • Works in any language edition (Chinese, Japanese, German, Spanish, Portuguese and more).
  • Opens each publisher page (on by default) to add image, description and author from its meta tags. Turn fetchArticleMeta off for a faster run with links only.
  • Optionally goes past Google's 100-article feed ceiling on search queries with splitByTime.

Typical uses: media and brand monitoring, PR and competitor tracking, financial news feeds, news datasets for LLM and RAG pipelines, alerts on a topic, regional news comparison.

Input

FieldTypeWhat it does
querieslist of textSearch queries. Default ["artificial intelligence"]. Google operators work.
topicslist of choicesOptional: TOP, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH.
feedUrlslist of textOptional: any news.google.com RSS or page URL. Page URLs are converted to RSS.
languagetextInterface language hl, default en-US.
countrytextEdition country gl, default US.
timeframechoiceany (default), 1h, 1d, 7d, 30d, 1y. Applied to search queries only, through Google's when: operator.
maxArticlesPerQuerynumberDefault and maximum 100 (Google's per-feed ceiling). Also your cost cap per feed.
splitByTimeyes/noDefault no. Go past 100 articles per search query (see Limits). Search queries only, not topics or feed URLs.
splitMaxArticlesnumberDefault 500, range 100 to 5,000. Cap per search query when splitByTime is on, and your cost cap per query.
decodeUrlsyes/noDefault yes. Resolve the publisher URL.
fetchArticleMetayes/noDefault yes. Read image, description, author and published time from the publisher page. Turn off for a faster run with links only. Needs decodeUrls.
requestDelaySecondsnumberPause before requests, default 0.3.
maxConcurrencynumberConcurrent decodes, default 5.
proxyConfigurationobjectOptional Apify Proxy. Default none.
{
"queries": ["tesla", "openai OR anthropic"],
"topics": ["BUSINESS"],
"language": "en-US",
"country": "US",
"timeframe": "1d",
"maxArticlesPerQuery": 100,
"decodeUrls": true,
"fetchArticleMeta": true
}

Language and country

language and country choose the Google News edition. The Actor derives the ceid value Google expects, so you only set the two fields:

Editionlanguagecountryceid used
United Statesen-USUSUS:en
United Kingdomen-GBGBGB:en
Taiwan (Traditional Chinese)zh-TWTWTW:zh-Hant
China (Simplified Chinese)zh-CNCNCN:zh-Hans
JapanjaJPJP:ja
GermanydeDEDE:de
FrancefrFRFR:fr
Mexico (Latin American Spanish)es-419MXMX:es-419
Brazilpt-BRBRBR:pt-BR
South KoreakoKRKR:ko

Other combinations follow the same pattern. If a feed URL you pass already has hl, gl and ceid, those are kept.

Output

One row per article. A shortened example:

{
"title": "Woman Spots Tesla In New Jersey. Then It Almost Goes Off A Cliff",
"source": "Motor1.com",
"sourceUrl": "https://www.motor1.com",
"articleUrl": "https://www.motor1.com/news/810717/tesla-drives-off-cliff/",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMiakFVX3lx...?oc=5",
"publishedAt": "2026-10-09T07:38:04Z",
"publishedTimestamp": 1791531484000,
"description": null,
"imageUrl": null,
"author": null,
"articlePublishedAt": null,
"relatedArticles": [],
"position": 1,
"sourceType": "search",
"query": "tesla",
"topic": null,
"timeframe": "1d",
"feedUrl": "https://news.google.com/rss/search?q=tesla+when:1d&hl=en-US&gl=US&ceid=US:en",
"language": "en-US",
"country": "US",
"scrapedAt": "2026-10-09T09:43:30Z",
"input": "tesla"
}

What to expect in each field:

  • articleUrl is the publisher's URL. If Google refuses to decode one link, the row is still returned with articleUrl empty and googleNewsUrl set; the run does not fail.
  • publishedTimestamp is publishedAt as Unix time in milliseconds.
  • sourceType says which input produced the row (search, topic or feedUrl). timeframe is the time range applied to a search row, null otherwise.
  • relatedArticles is filled only on some topic and front-page feeds, where Google groups several outlets under one story (list of title, source, googleNewsUrl). It is empty on search feeds and often on topic feeds too; do not rely on it.
  • description is empty in Google's own search feed, which only repeats the headline. With fetchArticleMeta on (the default) the Actor fills description, imageUrl, author and articlePublishedAt from the publisher page. These are not guaranteed for every row: about a third of publishers refuse automated requests (HTTP 403) or set no such tag, and those fields stay null. With fetchArticleMeta off, author and articlePublishedAt are always empty, and description and imageUrl hold only what Google's feed carries, which is usually nothing.
  • position is the rank of the article inside its feed. Articles are deduplicated across the whole run; the first occurrence wins.

Empty input runs a built-in example: 5 articles for "artificial intelligence". The input prefill does the same search with the usual 100-article limit.

Pricing

Pay per event: $1.50 per 1,000 articles ($0.0015 per article), charged for each article row written to the dataset. Platform usage is included in that price; you pay nothing else for this Actor.

Worked example: 5 queries at 100 articles each is 500 articles, so 500 x $0.0015 = $0.75. A daily run of 20 queries at 100 articles each is 2,000 articles = $3.00 per day.

Set a maximum total charge on the run and the Actor stops cleanly when it is reached; everything collected up to that point is kept.

Limits

  • About 100 articles per feed. Google News returns at most about 100 items for one query and about 70 for a topic, with no paging.
  • More than 100 per search query: splitByTime. Turn it on and each search query is asked again over day windows (Google's after:/before:), newest first, and any window that comes back full is split further. It stops at splitMaxArticles (default 500, up to 5,000 per query). It affects search queries only, not topics or feed URLs, and is off by default. Google ranks a feed by relevance, not date, so this is not a full history: without a timeframe it covers the last 90 days, with one it covers that range, and older articles are not reached. Splitting adds billable items, so splitMaxArticles is also your cost cap per query. Other ways to widen a search: when: ranges in the query, site: operators or different wording. The Actor removes duplicates across the whole run.
  • Recency, not an archive. Google News feeds show recent coverage. timeframe: 1y is the furthest back the filter goes.
  • Decoding costs two extra requests per article and the Google News article page is about 590 KB, so a run of 100 articles with decodeUrls on takes around 30 seconds before fetchArticleMeta adds one publisher-page request per article. Turn decodeUrls off if the googleNewsUrl is enough.
  • Publisher pages (fetchArticleMeta) are fetched once with a short timeout. Paywalled or bot-protected sites leave the fields empty.
  • Google may change its feeds or its link format. If decoding starts failing, rows still come back with articleUrl empty.

Use with Python

# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datagleaner/google-news-scraper").call(
run_input={"queries": ["openai"], "timeframe": "1d", "maxArticlesPerQuery": 10}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["publishedAt"], item["source"], item["title"])
print(" ", item["articleUrl"])

This run returns at most 10 articles, so it costs at most $0.015.

Use with JavaScript / Node.js

// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagleaner/google-news-scraper').call({
queries: ['openai'],
timeframe: '1d',
maxArticlesPerQuery: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const a of items) console.log(a.publishedAt, a.source, a.title, a.articleUrl);

Use it from n8n, Make, Zapier or an AI agent

Actor ID: datagleaner/google-news-scraper

Minimal input:

{"queries": ["openai"], "timeframe": "1d", "maxArticlesPerQuery": 10}

Each tool below runs this Actor with your own Apify API token.

  • n8n: add the Apify node (@apify/n8n-nodes-apify). On n8n Cloud you install it from the community node registry. Choose Run an Actor and get dataset, set Actor to datagleaner/google-news-scraper and paste the input above.

  • Make: use the Apify app's Run an Actor module, then Get Dataset Items to read the results. Watch Actor Runs can trigger a scenario when a run finishes.

  • Zapier: use the Apify action Run Actor, then the search Fetch dataset items. The trigger Finished Actor run starts a Zap when a run ends.

  • AI agents (MCP): connect to https://mcp.apify.com?tools=datagleaner/google-news-scraper. Without a token, an agent can still find the Actor with the search-actors tool, but running it needs your Apify account. In Claude Code:

      claude mcp add --transport http apify "https://mcp.apify.com?tools=datagleaner/google-news-scraper"
    

    Then run /mcp to sign in to Apify in your browser. Or pass a token instead:

      claude mcp add --transport http apify "https://mcp.apify.com?tools=datagleaner/google-news-scraper" --header "Authorization: Bearer YOUR_APIFY_TOKEN"
    

    Claude Desktop, Cursor and other clients that use an mcpServers config can run the server locally:

    {
    "mcpServers": {
    "actors-mcp-server": {
    "command": "npx",
    "args": ["-y", "@apify/actors-mcp-server"],
    "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
    }
    }

    Then ask in plain language, for example: "Use the Google News scraper to get the past day's news about TSMC from the US edition and about 台積電 from the Taiwan edition, 30 articles each, and give me a table of headline, outlet, time and the publisher's link."

  • LangChain (Python):

# pip install langchain-apify, then set APIFY_TOKEN in your environment
import json
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("datagleaner/google-news-scraper")
result = tool.invoke({"run_input": json.loads('{"queries": ["openai"], "timeframe": "1d", "maxArticlesPerQuery": 10}')})

FAQ

Is this a Google News API? It works as one: send queries, topics or feed URLs through the Apify API, the clients above or MCP, and get JSON back. It needs no Google account or Google API key, only an Apify account.

How do I decode Google News RSS URLs? Leave decodeUrls on (the default). Each row then carries the publisher's link in articleUrl next to the original googleNewsUrl. If Google refuses one link after retries, articleUrl stays empty and the row is still returned.

Can I scrape Google News without a proxy? Yes. It worked from Apify datacenter IPs without one. The proxyConfiguration field is there if you want to route traffic through one.

How do I get news in another language or country? Set language and country, for example zh-TW and TW, or ja and JP. Write the query in that language to get matching results.

Can I search one site or get more than 100 articles? Use site:reuters.com tesla as a query. Each feed stops at about 100 articles; turn on splitByTime to get up to splitMaxArticles (default 500, maximum 5,000) per search query over the last 90 days or your timeframe. Duplicates are removed across the run.

Responsible use

This Actor collects only publicly available Google News feed data and fetches publicly available publisher pages; it does not log in, solve CAPTCHAs or bypass blocks. Google's feed terms limit RSS use to personal, non-commercial feed reading, so check that your use is permitted. Article text and images belong to their publishers: the Actor returns links and metadata, not full articles, and you are responsible for respecting copyright and each publisher's terms. If the data you collect includes personal data (for example author names), you are responsible for handling it lawfully, including under GDPR where it applies.