If you need a Google News scraper API, this guide shows how to pull headlines for a list of keywords, site: searches or section topics and get one flat row per article. The Google News Scraper Actor on Apify reads Google News' public RSS feeds, so you do not need a Google API key or a browser. It costs $0.50 per 1,000 articles, billed per article returned, so it is a paid tool rather than a free news API.
What you get
Each article is one row with these fields:
query— the search, ortopic:NAME, the article was found fortitle— the headline as Google News shows it, often "Headline - Publisher"googleUrl— thenews.google.com/rss/articles/...link from the feedpublisherUrl— the article's real URL on the publisher's site, resolved best-effort, ornullsourceandsourceUrl— publisher name and homepage from the feedpublishedAt— publish time in ISO 8601 UTCsnippet— plain text from the feed description; Google News does not publish a real summary, so it mirrors the title and sourceguid— the feed's stable item id, used to remove duplicates across overlapping querieserror— a note when a query's feed request failed or returned nothingscrapedAt— when the row was produced
Rows are plain JSON, so the output loads easily into a spreadsheet, a database or an AI pipeline.
No recorded sample is available yet.
Run Google News Scraper (Keyword, Topic, Site, Date Range) on Apify →
Step-by-step
- Enter one or more Search queries. Plain keywords work, and so do Google operators such as
site:reuters.com AIor"exact phrase". Add Section topics only if you want whole section feeds: WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SCIENCE, SPORTS or HEALTH. - Pick a Time range preset (past hour, 24 hours, 7 days, 30 days or year), or set Only articles from the last N days. The preset wins when both are set.
- Add Exclude words to drop noise. Each word becomes a
-wordoperator on every search. - If one search needs more than about 100 articles, turn on Split by date and raise Max items per query.
- Keep Resolve publisher URLs on for real article links, click Start, then export as JSON, CSV, Excel or HTML.
Example input
This bounded input fits a weekly monitoring run and uses only fields from the Actor's input schema:
{
"queries": ["web scraping", "site:reuters.com AI"],
"topics": ["TECHNOLOGY"],
"timeRange": "7d",
"excludeWords": ["ETF"],
"splitByDate": true,
"maxItemsPerQuery": 150,
"maxItems": 300,
"resolvePublisherUrls": true,
"maxConcurrency": 5
}
splitByDate needs a span of at least two days, which a 7-day range satisfies. maxItems caps the whole run, keeping the newest articles. Topic feeds ignore both timeRange and sinceDays.
Call it from code
The snippets below use the Actor's prefilled input. Replace it with the JSON above for a bounded run. They need an Apify API token in APIFY_TOKEN.
import json
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("webdatatools/google-news-scraper").call(run_input=json.loads("{\n \"queries\": [\n \"web scraping\",\n \"site:reuters.com AI\"\n ],\n \"topics\": [\n \"TECHNOLOGY\",\n \"BUSINESS\"\n ],\n \"language\": \"en\"\n}"))
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('webdatatools/google-news-scraper').call({
"queries": [
"web scraping",
"site:reuters.com AI"
],
"topics": [
"TECHNOLOGY",
"BUSINESS"
],
"language": "en"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);curl -X POST "https://api.apify.com/v2/acts/webdatatools~google-news-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries":["web scraping","site:reuters.com AI"],"topics":["TECHNOLOGY","BUSINESS"],"language":"en"}'Recipes
Brand monitoring
Run your brand name as a query with timeRange: "1d" and schedule the run. Inside one run, the Actor already removes duplicates across overlapping queries. Across scheduled runs, keep the guid values you have seen and alert only on new ones.
Topic feed
Leave queries empty and set topics to ["BUSINESS", "TECHNOLOGY"] for section feeds. Topic feeds return the latest headlines for each section, ignore the date filters and are not split by date, so they suit a regular digest rather than a historical search.
site: tracking
Use queries: ["site:reuters.com AI"] with a 7-day range to follow one publisher's coverage of a subject. Keep Resolve publisher URLs on so the report links to the publisher's own page instead of a Google redirect.
How much does it cost?
| Apify plan | Per article | Per 1,000 |
|---|---|---|
| Free plan | $0.0005 | $0.50 |
| Starter | $0.0004 | $0.40 |
| Scale | $0.00035 | $0.35 |
| Business | $0.0003 | $0.30 |
| Enterprise | $0.0003 | $0.30 |
| Enterprise+ | $0.0003 | $0.30 |
Primary event rates from a catalog snapshot; this is not the total price of a run. Additional charge events and Actor Start fees may apply; start fees can scale with memory. Check the Actor's Pricing tab on Apify for all events, conditions and current plan-specific rates, and set a maximum run budget before starting.
The Actor bills per article: $0.0005 each, plus a negligible actor-start fee. A 100-article query therefore costs about $0.05 in article charges. Resolving publisher URLs adds requests to Google but no extra dataset charge. Set Maximum cost per run and the Actor keeps only the newest articles the budget covers.
How it compares
| Option | Good at | Watch out for |
|---|---|---|
| This Actor | Keyword, site: and topic searches in one run, flat rows, publisher links, scheduled runs and API access, pay per article |
Google News coverage only; about 100 articles per request unless split; publisher links are best-effort |
| Google News website | Free to read, fine for a quick look | One search at a time, no export, Google-branded links |
| Hand-built RSS script | No per-article fee; full control | You write the parsing, date splitting, de-duplication, link resolution and error handling |
| Paid news APIs | May cover sources that Google News does not index, with vendor support | Subscription or per-request pricing; check their coverage and terms yourself |
FAQ
Is there a Google News API?
The Actor's README does not describe an official Google News search API. This Actor instead reads the public RSS feeds at news.google.com/rss/..., which need no Google API key. Google's feed notice limits use to personal, non-commercial feed reading, so check the terms before building on them.
Is this a free news API?
No. It is pay-per-event at $0.0005 per article returned. Reading the Google News website or writing your own RSS script costs nothing in fees, but the work of parsing, filtering and linking is yours.
Does it return the full article text?
No. It extracts metadata and links only: headline, source, date, the Google News link and the publisher URL. It does not copy article bodies, and snippet is derived from the feed description.
Why is publisherUrl null on some rows?
Either Resolve publisher URLs was off, the resolution request failed or timed out, or Google changed its redirect format. Resolution uses an undocumented Google endpoint that the README says could change without notice. The row keeps its googleUrl, title, source and date.
Why do I get only about 100 articles per query?
One Google News request returns about 100 articles at most. Turn on Split by date and use a range of at least two days to get more. Topic feeds are always the latest headlines and are not split.
Can I reuse the results commercially?
The README says Google's feed notice limits the feed to personal, non-commercial feed-reader use, and that bulk or commercial reuse of the underlying articles is your responsibility. Publishers keep their own copyright. Check the terms with your legal adviser before commercial use.
Can an AI agent call it?
The README says the Actor meets the requirements for the Apify MCP server, being pay-per-event with limited permissions. An agent passes queries or topics and receives one row per article to summarize or route.
What happens if a run times out early?
The Actor stops fetching and resolving close to the run timeout, saves every article it has, and ends as SUCCEEDED rather than TIMED-OUT. Unresolved rows have publisherUrl: null. Read the run's status message to tell a complete result from a partial one.