Google News Scraper — Headlines by Keyword & Topic
Pricing
from $0.50 / 1,000 article returneds
Google News Scraper — Headlines by Keyword & Topic
Google news scraper for brand and topic monitoring: give it keyword searches (or site:domain.com queries) and get one row per article: title, source, publish date, link, snippet, read straight from Google News' own RSS search feed. No API key. Charged only per article returned.
Pricing
from $0.50 / 1,000 article returneds
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Share
Google News Lookup: google news scraper from $1/1k
You give this actor a list of search queries, keywords or site:domain.com, and for each one it
returns the matching articles from Google News: title, source, publish date, a link to the
article, and a snippet where one exists. Every result is read straight from Google News' own
public RSS search feed at request time, no API key, no login, and no third-party news database
sits between you and the answer.
Who it's for
Anyone monitoring brand mentions, competitor coverage, or a topic across the news without babysitting Google News in a browser tab: PR and comms teams tracking press coverage of their own company, marketers watching what's being written about a competitor, and analysts feeding a news feed into a Clay/n8n workflow or a dashboard instead of a manual search. Pricing is pay-per-event and per-article: a fraction of a cent for each article actually returned, and nothing for a search that comes back empty, so a broad watchlist of search terms costs you only for what it finds. No seat license, no monthly minimum, no credit system to decode.
Why this one
- Reads Google's own live search results, not a stale news database. Every run queries Google News' RSS search feed fresh, so a story published minutes ago shows up the next time you run it.
site:domain.comworks as a query, not just keywords. Search one publisher's own coverage of a topic the same way you would in a Google News search box.- Never charged for a search that comes back empty. A query with no matching articles still gets a row explaining why, and costs nothing. See "Price" below for the per-article rate.
- One row per article by default. Turn off "One row per article" in the Input tab to get one
grouped row per search instead, with every article nested in an
articleslist; you're charged the same per-article rate either way. - No proxies to configure, no headless browser needed. This is a plain HTTP fetch against Google's public RSS endpoint; no JavaScript execution is required to read it.
What you get
Every row starts with the same five fields, then the article fields.
| Field | Type | Description |
|---|---|---|
query | text | The search you submitted, echoed back |
found | boolean | true if at least one article matched this search |
status | text | OK on a match; NOT_FOUND, BAD_FORMAT, BLOCKED, or REQUEST_FAILED on a miss |
message | text | Plain-English reason for a miss, only present when found is false |
scrapedAt | ISO 8601 datetime | When the search was run |
articleCount | number | How many articles matched this search (capped by "Max articles per search") |
articles | array | Every matching article, as {"title", "sourceName", "publishedAt", "url", "snippet"} objects (default one-row-per-search output) |
title | text | One article's headline, with Google's " - Source" suffix removed (one-row-per-article output) |
sourceName | text | That article's publisher, as Google News names it |
publishedAt | ISO 8601 datetime | When the article was published |
url | link | The article's news.google.com link (Google's own redirect wrapper) — fully valid and clickable, opens the same article a search result would |
snippet | text | A short excerpt, when Google's feed includes one for this article (often null — see "Tips") |
articleId | text | Google News' own stable ID for the article, used to decide what is new |
isNew | boolean | true if no earlier run of this watchlist returned the article; null when monitoring is off |
firstSeenAt | ISO 8601 datetime | The run that first returned the article; null when monitoring is off |
Deselect any article field in the Input tab's column picker to drop it from every row: query,
found, status, message, and scrapedAt always stay.
Price
- Article returned: $1 per 1,000 articles
Plus a $0.00005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.
1,000 articles through this actor: ~$1 at the FREE tier, less on a paid Apify plan. A search that returns nothing is never billed; you only pay for the articles a search actually returned.
How to use
- In the Apify Console. Open the actor page and click Start — the
queriesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~google-news-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"queries":["apify"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
- Open the Input tab and paste your search terms into "Search queries to run": one per line, as a
keyword phrase or a
site:domain.comquery. - Leave "Try it first" on for your first run; it caps the run at 5 searches so you can see the output shape before spending on the full list.
- Set "Language (hl)" / "Country (gl)" if you want results in a specific locale; they default to
en-US/US. - Set "Max articles per search" to control both how many results you get and how much a broad query can cost; it defaults to 20.
- Turn "Try it first" off and press Start to run the full list.
Typical uses: a daily scheduled run watching your own company's press coverage, a competitor's product launches, or a topic your content team is publishing into.
Input
{"queries": ["apify"]}
One search per line: a keyword phrase, or "site:domain.com" to search one publisher. Accepted formats: apify, site:techcrunch.com, "artificial intelligence".
Sample output
By default you get one row per article (turn off "One row per article" in the Input tab to get
one grouped row per search instead, with every article nested in articles):
| query | found | status | articleCount | articles | articleId | title | sourceName | publishedAt | url | snippet | isNew | firstSeenAt | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| apify | true | OK | 20 | <all articles (full list)> | CBMiTEFVX3lxTE9WeDJxNHdtTEF3TjBWTXl0QXk3cUQ5RzVSd1M2dWNSVlVwWHlqQmR6dW84aUdQcDdmd0xiQjVKanV0S2M2MlZUUjlvbkk | Apify Revenue 2024: $13.3M Est. ARR, $3.5M Raised | GetLatka | 2026-09-02T07:00:00.000Z | https://news.google.com/rss/articles/CBMiTEFVX3lxTE9WeDJxNHdtTEF3TjBWTXl0QXk3cUQ5RzVSd1M2dWNSVlVwWHlqQmR6dW84aUdQcDdmd0xiQjVKanV0S2M2MlZUUjlvbkk?oc=5 | 2026-09-11T07:00:34.764Z |
A search with no matching articles gets a row with found: false and a status/message
explaining why, and is never charged.
Monitoring: only new articles
Turn on Only return articles that are new since the last run and this actor becomes a news alert for your brand, competitors or topics. Every article in a search's feed is checked against the article IDs your previous run already delivered, and anything you have seen is dropped before you are billed. A quiet day returns one articleCount: 0 row per search and costs only the run fee. Each run logs a count like 4 new of 40 fetched.
The first run has nothing to compare against, so it returns up to your cap and remembers the whole feed. From the second run on you get only what Google News added since. If more new articles arrive than Max articles per search allows, the rest come on the next run.
To turn that into an alert:
- Save your searches as a task with the checkbox on.
- Add a Schedule to that task, hourly or daily.
- Add a webhook on Run succeeded, pointing at Slack, n8n, Make or Zapier.
Memory lives in a named key-value store, google-news-lookup-delta, one record per search, holding the last 5,000 article IDs per watchlist.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~google-news-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"queries":["apify"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~google-news-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"queries":["apify"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~google-news-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"queries":["{{search}}"]}, mapping the row's search into the queries array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Google News Scraper | Apify" — the agent will find and run this actor.
Tips
snippetis oftennull: Google's RSS feed usually carries only the headline and source for each article, not a summary paragraph. UsetitleandsourceNameas the primary signal.urlis Google's ownnews.google.comredirect link, not the publisher's raw URL. It's fully valid and opens the same article in a browser; this actor doesn't follow it further, since Google puts a cookie-consent interstitial in front of that redirect from most server IPs (verified live, not resolvable without a real browser session).- A
site:domain.comquery searches that one publisher's coverage of whatever else you add to the query, e.g.site:techcrunch.com apify. - Set "Max articles per search" low (5-10) for a broad watchlist of many search terms, and higher for a small number of searches you want deep coverage on; you pay per article either way.
- Run this on a schedule (see "How to use") to build a running feed of new coverage instead of a one-off snapshot.
vs. alternatives
| What it costs | What you get | Trade-off | |
|---|---|---|---|
This actor (google-news-lookup) | $1 per 1,000 found articles (FREE tier, less on paid tiers), nothing for an empty search | One row per article: title, source, publish date, link, and snippet where available, read live from Google News' own search feed | No full article text, only what Google's feed itself carries (headline, source, date, and an occasional snippet). |
| data_xplorer/google-news-scraper-fast | $4 per 1,000 results | Similar article-level coverage from Google News | This actor reads the same underlying public feed at a quarter of the per-article price. |
| Doing it yourself | Your time plus parsing Google's RSS feed, decoding its redirect links, and handling the locale/region parameters | The same data | This actor's feed parsing, redirect resolution, and per-article billing are the maintenance burden it absorbs. |
Prices for third-party tools are their published figures as of September 2026 and are not tracked here; check the vendor before relying on the comparison.
FAQ
Why is a row empty, or why does found say false?
Either the search matched no articles (status: NOT_FOUND), Google didn't return a valid feed for
the query (status: BAD_FORMAT), or the request failed after retries (status: REQUEST_FAILED).
Check the message column for the specific reason. None of these are billed.
Am I charged for a search that returns nothing?
No. Actor.charge() only fires per article actually returned. A search with zero matches produces
a row (unless you turn on "Hide rows with no result") and costs nothing.
Is this a live check or a stored database? Live. Every run queries Google News' current search results; there's no cached snapshot behind it. Run it on a schedule if you want an ongoing feed instead of a one-off pull.
Why does url point to news.google.com instead of the actual publisher?
Google wraps every article link in its own redirect, and following that redirect from a server
lands on a cookie-consent page instead of the article (verified live). The news.google.com link
is still a fully valid, clickable link straight to the same article.
Do I need to configure proxies? No. The actor uses Apify's default proxy configuration out of the box; there's nothing to set up unless you want to supply your own proxy group.
Is this GDPR-relevant? No personal data is involved. This reads published news articles and their public metadata (headline, source, date), not information about any individual.
Can I search for one publisher's own coverage?
Yes. Use a site:domain.com query, optionally combined with keywords, e.g.
site:techcrunch.com apify.
Can I schedule this to build an ongoing news feed? Yes. Set up an Apify Task with a schedule (hourly, daily, whatever cadence fits) and point it at this actor with a saved input. Each run is a fresh search, so a scheduled task is how you'd catch new coverage as it's published.
Can an AI agent call this directly? Yes. It's registered on the Apify MCP server; an agent in Claude, Cursor, or another MCP client can find and run it by name ("Google News Scraper | Apify"), or you can call the REST endpoint shown above from any script or workflow tool.
Related actors
- Feed Discovery Lookup: find a website's own RSS/Atom feed directly, for sites you want to monitor at the source instead of through a search.
- YouTube Channel Lookup: once you know who's covering a topic, check whether they're also covering it on YouTube.
- TikTok Profile Lookup: extend the same brand-monitoring workflow to TikTok creator accounts.