Skip to content

Google News API & Scraper - Headlines by Keyword & Country

Rocketyard’s Google News API & Scraper returns the headlines of any Google News search or topic and returns one clean record per article: title, source name, source url, source domain, published at, google news url and more. It runs on the Apify platform, so you can start it from the Apify Console, the REST API, an AI agent or a no-code tool.

  • PR and communications teams monitoring media coverage
  • Developers adding news to apps, dashboards and AI agents
  • Analysts and researchers tracking topics across publishers and countries
  • Marketers watching competitors and industry news
  • Get every headline about a company or keyword from the last day, with publisher and time
  • Collect the top stories and topic sections of several countries on a schedule
  • Feed recent news on a topic into an LLM or a RAG index

Google News publishes every search, every topic section and the top stories of each edition as a public RSS feed, the format feed readers use. The Actor builds the feed URL for each search and topic you give it, with the country, language and time range you pick, reads it over plain HTTP, one request per second, with no browser, login or cookies, and turns each item into a typed record: the headline without the publisher suffix Google adds, the publisher’s name, website and domain, the publish time in ISO 8601, the item’s Google News link and ID, its position in the feed and, in topic and top stories feeds, the other outlets Google groups with the story. It reads nothing but the feeds: the article link is Google News’ own, and the Actor does not call Google’s internal endpoints to decode it, so records carry no publisher article URL. Articles outside your time range are not charged, and an article found by two feeds is stored and charged once.

A real record from a test run on news.google.com on 2026-11-11. Fields the page didn’t publish are left out here; the Actor returns them as null.

{
"url": "https://news.google.com/rss/headlines/section/topic/BUSINESS?hl=en-GB&gl=GB&ceid=GB:en",
"type": "NewsArticle",
"title": "Nvidia hires leading US law firm to investigate Jensen Huang’s relationship",
"sourceName": "The Guardian",
"sourceUrl": "https://www.theguardian.com",
"sourceDomain": "theguardian.com",
"publishedAt": "2026-11-11T11:52:00.000Z",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMiwgFBVV95cUxPVE0zY21CWUpFX2xVMEZJRll3dzgxc19BYXFXLWxxWnk1eF9uSmtEZU5KVDVqZ29KOEVxdUJpdWlJU3IzQzNfUDVubHV3bzA2WFJwRC02eTdHcWZSb2FJX19JY2hsdHlzdHhlMmZMd2JGN080UnJ0R2lERXdocVowRkd5UlAzODVvclJ3eGVRbW5lZWVuaVpKT2tlNkFCWjdZbHVOVGd3a2E5VlhtNjJUbDRURDlVT0thaGtNWXYt…",
"guid": "CBMiwgFBVV95cUxPVE0zY21CWUpFX2xVMEZJRll3dzgxc19BYXFXLWxxWnk1eF9uSmtEZU5KVDVqZ29KOEVxdUJpdWlJU3IzQzNfUDVubHV3bzA2WFJwRC02eTdHcWZSb2FJX19JY2hsdHlzdHhlMmZMd2JGN080UnJ0R2lERXdocVowRkd5UlAzODVvclJ3eGVRbW5lZWVuaVpKT2tlNkFCWjdZbHVOVGd3a2E5VlhtNjJUbDRURDlVT0thaGtNWXYtMGtLdw",
"relatedArticles": [
{
"title": "This Trader Raised Alarm About Nvidia’s China Entanglements Months Ago",
"sourceName": "The New York Times",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMiiwFBVV95cUxOX2FTU2VwZWc4azh1MzNySzJzQ29qWXV4akVDNUF3Y0g3NjR4VDRvdUtZRkNDd2tuTnpvS3hUc0VFR185YU9WNjhpa25zcWtYSkJWbnhMOE1fWFpXd0UtMloxZmtmMzBMZFJjWWhwbXU4Q2NrRkVsTExvdTRVTmFmTTB6Z0QyYXdnZmx3?oc=5"
},
{
"title": "Alice Huang’s tangled web of connections",
"sourceName": "Financial Times",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMihAFBVV95cUxPVk43WnVwbC1WMi04SVJVWGlDSE5wblZ4ZkhrQl9OWjQxS0FUUmJuVTVRaU9QdkNTenFWSlk1blU5c2FjVTBqQkNsZUZ3bWFtUnF3d0hfUkU3OUJ4Q3RGUW1LZ0VGRzByekw0OTJfblNHRmlhZmNYbXZXdG5pbnlyOTZocXM?oc=5"
},
{
"title": "Trump says FBI investigating Nvidia boss's affair with alleged Chinese spy",
"sourceName": "BBC",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMiXkFVX3lxTFA4NURrdXNUTnFfYmp3REZhcGdPeTNfYlNXOHlfaHZ3LS1DU1o1by0wT1MyeHdFQnZrRXFMSndOeXVVRGNPd0JCemZMSlBwOGpxV0s2Mmc2Z0pzTHlReGc?oc=5"
},
{
"title": "Nvidia shares rebound 4% as Huang faces scrutiny ahead of earnings",
"sourceName": "CNBC",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMigAFBVV95cUxNalRRWWRUS0VHb2Q4Y0dhNFdWY1BzTWlqWG8yOXBwZVJtRlFOck5iZlMzcmJlTHZnRkNaZ0hNUXBrTkptb0xqU3RBSUo5V09ERzlxb095YmRmRHNZaFVYVVhUY0ZxN1E4Q0twdFhLTzA0N0lDTnpXUGl3Szc2eHVUcw?oc=5"
}
],
"topic": "BUSINESS",
"country": "GB",
"language": "en",
"position": 1,
"scrapedAt": "2026-11-11T13:01:57.000Z"
}
Field Description Filled in latest test
title Headline, without the “ - Publisher” suffix Google adds 100%
sourceName Publisher, as Google News names it 100%
sourceUrl Publisher’s website (its home page), from the feed. Not the article’s own URL 100%
sourceDomain Domain of the publisher’s website, without www. 100%
publishedAt Publish time in ISO 8601 (UTC), from the feed 100%
googleNewsUrl Google News’ link to the article (news.google.com/rss/articles/…). A browser that opens it is sent on to the article; the Actor does not decode it 100%
guid Google News’ ID of the article: the same article has the same guid in every feed and run 100%
relatedArticles Other outlets’ coverage of the same story, as Google groups it: title, sourceName and googleNewsUrl each. Top stories and topic feeds only; null for search results 36%
query The search that found the article; null in topic feeds 59%
topic The topic that listed the article (TOP_STORIES for top stories, a topic ID for a pasted topic URL); null in searches 41%
country Country of the Google News edition the feed came from (US, GB, DE…) 100%
language Language of that edition (en, de, pt-419…) 100%
position Rank in the feed, from 1: Google’s own order 100%
url the page the record came from 100%
scrapedAt ISO timestamp of the extraction 100%

A field is filled when the source publishes it. The Actor never guesses a value: a missing field comes back as null. “Filled in latest test” is the share of records from the latest test run (news.google.com) that had the field; other sources publish more or less.

You pay $1.00 per 1,000 articles, plus a start fee of $0.00005 per run. Articles outside your time range, articles already stored from another feed of the run, and feeds that yield nothing are not charged.

Articles Cost
1,000 $1.00
10,000 $10.00
100,000 $100.00

Set maxItems or the run’s Maximum cost per run in Apify to cap spending.

Every Apify Actor is also a REST endpoint, so Google News API & Scraper works as a Google News API, a Google News RSS API or a news API. Call it from any language with the Apify REST API, or with Apify’s JavaScript and Python clients. You need an Apify API token.

Terminal window
curl -s -X POST "https://api.apify.com/v2/acts/rocketyard~google-news-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'content-type: application/json' \
-d '{"queries":["artificial intelligence","electric vehicles site:reuters.com"],"topics":["TECHNOLOGY"],"country":"US","language":"en","timeRange":"7d","maxItems":300}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('rocketyard/google-news-scraper').call({"queries":["artificial intelligence","electric vehicles site:reuters.com"],"topics":["TECHNOLOGY"],"country":"US","language":"en","timeRange":"7d","maxItems":300});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("rocketyard/google-news-scraper").call(run_input={"queries":["artificial intelligence","electric vehicles site:reuters.com"],"topics":["TECHNOLOGY"],"country":"US","language":"en","timeRange":"7d","maxItems":300})
items = client.dataset(run["defaultDatasetId"]).list_items().items

The synchronous endpoint returns the records directly. For long crawls, start the run asynchronously and read the dataset when it finishes.

Apify’s MCP server exposes this Actor as a tool to Claude, Cursor and other MCP clients. Open this Actor’s MCP setup page for setup steps per client, or connect it with this URL:

https://mcp.apify.com?tools=rocketyard/google-news-scraper

Claude Code:

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

Cursor (.cursor/mcp.json) and other clients that read an mcpServers config:

{
"mcpServers": {
"apify": { "url": "https://mcp.apify.com?tools=rocketyard/google-news-scraper" }
}
}

On first use your browser opens so you can sign in to Apify. Then ask the agent, for example: “Get every headline about a company or keyword from the last day, with publisher and time”. The tool returns JSON records, and the runs are billed to that Apify account at $1.00 per 1,000 articles.

n8n, Make and Zapier all connect to Apify. Each example below uses Actor rocketyard/google-news-scraper with this input:

{
"queries": [
"artificial intelligence",
"electric vehicles site:reuters.com"
],
"topics": [
"TECHNOLOGY"
],
"country": "US",
"language": "en",
"timeRange": "7d",
"maxItems": 300
}

Copy this workflow and paste it onto an n8n canvas. It runs the Actor every morning through an HTTP Request node and returns the records as n8n items.

{
"name": "Google News API & Scraper daily",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "days",
"daysInterval": 1,
"triggerAtHour": 7
}
]
}
},
"id": "c1f6a2d0-4a57-4b5e-9d7a-0a1b2c3d4e01",
"name": "Every day at 07:00",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
0,
0
]
},
{
"parameters": {
"method": "POST",
"url": "https://api.apify.com/v2/acts/rocketyard~google-news-scraper/run-sync-get-dataset-items",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "{\n \"queries\": [\n \"artificial intelligence\",\n \"electric vehicles site:reuters.com\"\n ],\n \"topics\": [\n \"TECHNOLOGY\"\n ],\n \"country\": \"US\",\n \"language\": \"en\",\n \"timeRange\": \"7d\",\n \"maxItems\": 300\n}",
"options": {
"timeout": 300000
}
},
"id": "c1f6a2d0-4a57-4b5e-9d7a-0a1b2c3d4e02",
"name": "Run Google News API & Scraper",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
260,
0
],
"credentials": {
"httpBearerAuth": {
"name": "Apify API token"
}
}
}
],
"connections": {
"Every day at 07:00": {
"main": [
[
{
"node": "Run Google News API & Scraper",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {}
}

Then open the HTTP Request node and create an HTTP Bearer Auth credential named Apify API token, with your token from Apify Console as the bearer token. The token stays in n8n’s credential store; the workflow only names the credential. Change the input in the node’s JSON body to your own.

The node waits up to 300 seconds, which is also the limit of Apify’s synchronous endpoint. An input that yields nothing comes back as an item with an error field, which you can drop with a Filter node. Apify also publishes a community node, @apify/n8n-nodes-apify, with a Run an Actor and get dataset operation.

  1. Add Apify’s Run an Actor module and connect your Apify account.
  2. Choose rocketyard/google-news-scraper, paste the input above and set Run synchronously to Yes. Make limits how long a synchronous run can take, depending on your plan. For longer runs, start the scenario from Watch Actor Runs instead.
  3. Add Get Dataset Items with the run’s default dataset ID.
  4. Send the items wherever you need them, for example with Google Sheets Add a Row, mapping title, sourceName, sourceUrl and sourceDomain.
  1. Add Apify’s Run Actor action, connect your Apify account, choose rocketyard/google-news-scraper and paste the input above.
  2. Zapier stops synchronous runs after 30 seconds. For anything larger than a small run, let the run continue in the background and start a second Zap from the Finished Actor run trigger.
  3. Add Fetch dataset items with the run’s dataset ID, then map title, sourceName, sourceUrl and sourceDomain into your app.
  4. Test with a small input and check that the Zap handles every record before you turn it on.
  • googleNewsUrl is Google News’ link to the article (news.google.com/rss/articles/…). A browser that opens it is sent on to the article, but the Actor does not decode it, so records have no publisher article URL. sourceUrl is the publisher’s home page.
  • A search feed lists about 100 articles at most (102 in our test on 2026-11-11), and topic feeds fewer (66 for Technology, 38 top stories). For more, split a search by time range, publisher (site:) or wording.
  • The feeds carry no article text, images or authors: the item’s description holds only its headline and, for grouped stories, the related coverage returned in relatedArticles.
  • Google News has editions for some country and language pairs only. For any other pair Google serves its nearest edition (KZ with ru gets Russia’s, DE with en gets the US one), and country and language say which edition each record came from.
  • Google may answer an IP address with a CAPTCHA or a consent page, or refuse it with HTTP 401, 403 or 429. The Actor then stores one free BLOCKED error item and stops the run, keeping what it stored so far. It never tries to get past a block. Run it again later.

$1.00 per 1,000 articles plus $0.00005 per run, billed by Apify. 10,000 articles cost $10.00. There is no subscription, and you can cap any run with Maximum cost per run.

One request starts a run and returns its results, using your Apify API token:

Terminal window
curl -X POST "https://api.apify.com/v2/acts/rocketyard~google-news-scraper/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"queries":["artificial intelligence","electric vehicles site:reuters.com"],"topics":["TECHNOLOGY"],"country":"US","language":"en","timeRange":"7d","maxItems":300}'

The dataset gets one free error item for it, with a code and the reason, and the other inputs in the run carry on. Error codes explains each code, whether a retry helps and what to do.

What Google News lists for a logged-out visitor: any search, the topic sections (World, Nation, Business, Technology, Entertainment, Sports, Science, Health) and the top stories, in any country and language Google News has an edition for. Feeds and pages copied from news.google.com work too: search, topic and home page URLs.

The field comes back as null. The Actor reports what the source publishes and never fills in guesses.

The Actor reads Google News’ public RSS feeds, which anyone can open without logging in, and uses no account cookies. It does not check robots.txt, and Google’s robots.txt disallows the /rss path the feeds are served from. Each feed’s copyright notice says it is made available for personal, non-commercial use in a feed reader. The Actor never solves CAPTCHAs or passes consent pages and bot checks, and headlines belong to their publishers. You are responsible for how you use the data under Google’s terms, the publishers’ rights and the law (for example copyright).

Yes. Connect Apify’s MCP server as shown in MCP, and the agent can call the Actor as a tool.

See how it compares with other google news article scrapers on price, users and run success, from Apify Store data. Need a field or site behaviour that isn’t covered? Open an issue on the Actor page.