Google News Scraper: Search, Topics, Real Publisher URLs
Pricing
$1.50 / 1,000 news articles
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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 originalgoogleNewsUrl; 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.
maxArticlesPerQuerycaps each query (and your cost), andtimeframefilters to the past hour, day, 7 days, 30 days or year.splitByTimegoes past Google's 100-article feed ceiling, up to 5,000 per search query over the last 90 days. - Any language, any country. Set
languageandcountry(de/DE,ja/JP,zh-TW/TW,es-419/MX...); Google operators such assite:reuters.com,"exact phrase"andORwork 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
nullwhile 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.comURL (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
fetchArticleMetaoff 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
| Field | Type | What it does |
|---|---|---|
queries | list of text | Search queries. Default ["artificial intelligence"]. Google operators work. |
topics | list of choices | Optional: TOP, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH. |
feedUrls | list of text | Optional: any news.google.com RSS or page URL. Page URLs are converted to RSS. |
language | text | Interface language hl, default en-US. |
country | text | Edition country gl, default US. |
timeframe | choice | any (default), 1h, 1d, 7d, 30d, 1y. Applied to search queries only, through Google's when: operator. |
maxArticlesPerQuery | number | Default and maximum 100 (Google's per-feed ceiling). Also your cost cap per feed. |
splitByTime | yes/no | Default no. Go past 100 articles per search query (see Limits). Search queries only, not topics or feed URLs. |
splitMaxArticles | number | Default 500, range 100 to 5,000. Cap per search query when splitByTime is on, and your cost cap per query. |
decodeUrls | yes/no | Default yes. Resolve the publisher URL. |
fetchArticleMeta | yes/no | Default yes. Read image, description, author and published time from the publisher page. Turn off for a faster run with links only. Needs decodeUrls. |
requestDelaySeconds | number | Pause before requests, default 0.3. |
maxConcurrency | number | Concurrent decodes, default 5. |
proxyConfiguration | object | Optional 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:
| Edition | language | country | ceid used |
|---|---|---|---|
| United States | en-US | US | US:en |
| United Kingdom | en-GB | GB | GB:en |
| Taiwan (Traditional Chinese) | zh-TW | TW | TW:zh-Hant |
| China (Simplified Chinese) | zh-CN | CN | CN:zh-Hans |
| Japan | ja | JP | JP:ja |
| Germany | de | DE | DE:de |
| France | fr | FR | FR:fr |
| Mexico (Latin American Spanish) | es-419 | MX | MX:es-419 |
| Brazil | pt-BR | BR | BR:pt-BR |
| South Korea | ko | KR | KR: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:
articleUrlis the publisher's URL. If Google refuses to decode one link, the row is still returned witharticleUrlempty andgoogleNewsUrlset; the run does not fail.publishedTimestampispublishedAtas Unix time in milliseconds.sourceTypesays which input produced the row (search,topicorfeedUrl).timeframeis the time range applied to a search row, null otherwise.relatedArticlesis filled only on some topic and front-page feeds, where Google groups several outlets under one story (list oftitle,source,googleNewsUrl). It is empty on search feeds and often on topic feeds too; do not rely on it.descriptionis empty in Google's own search feed, which only repeats the headline. WithfetchArticleMetaon (the default) the Actor fillsdescription,imageUrl,authorandarticlePublishedAtfrom 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. WithfetchArticleMetaoff,authorandarticlePublishedAtare always empty, anddescriptionandimageUrlhold only what Google's feed carries, which is usually nothing.positionis 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'safter:/before:), newest first, and any window that comes back full is split further. It stops atsplitMaxArticles(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 atimeframeit covers the last 90 days, with one it covers that range, and older articles are not reached. Splitting adds billable items, sosplitMaxArticlesis 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: 1yis 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
decodeUrlson takes around 30 seconds beforefetchArticleMetaadds one publisher-page request per article. TurndecodeUrlsoff if thegoogleNewsUrlis 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
articleUrlempty.
Use with Python
# pip install apify-clientfrom apify_client import ApifyClientclient = 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-clientimport { 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 todatagleaner/google-news-scraperand 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 thesearch-actorstool, 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
/mcpto 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
mcpServersconfig 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 environmentimport jsonfrom langchain_apify import ApifyActorsTooltool = 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.