Google News API – Monitoring, Pay Only for New Articles avatar

Google News API – Monitoring, Pay Only for New Articles

Pricing

from $0.99 / 1,000 articles

Go to Apify Store
Google News API – Monitoring, Pay Only for New Articles

Google News API – Monitoring, Pay Only for New Articles

Monitor Google News for keywords, topics and publishers. One record per article across queries and countries, charges only for articles new since your last run, publisher URLs on request and a report of what may be missing.

Pricing

from $0.99 / 1,000 articles

Rating

0.0

(0)

Developer

DataRelay

DataRelay

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Monitor Google News for keywords, topics and publishers, in any country and language. Get one clean record per article: headline, publisher, date, link and everything that found it. Schedule it, and each run delivers and charges only the articles that are new since the last one.

Why this Actor

  • Pay for articles you have not received, not for repeats. Monitoring runs see mostly the same articles. With a sync key, the Actor remembers what it delivered: repeats are skipped and free, and a run with nothing new costs nothing, no start fee either. Works best with specific queries: see "Monitoring".
  • One record per article. An article found by several queries, topics or countries is delivered and charged once, with matchedQueries and matchedLocales listing everything that found it.
  • An honest report of what may be missing. Google returns at most ~100 results per search. The run report (OUTPUT) lists the searches that reached this limit, what failed and what was left out, so you know when to narrow a query.
  • Past the 100-result limit. A search that reaches the limit is read again day by day, and a from / to period is always searched per day: up to ~100 articles per day, minus the overlap. No extra charge per search.
  • Alerts without extra tools. A ready-made digest of the new articles, sent to Slack with one field, and an alarm when a query has far more articles than usual.
  • How far a story spread. storyPublishers tells how many publishers of the feeds read carry the same story, mainly useful for topics.
  • Publisher URLs when you need them. Google's feed has only redirect links. resolveUrls adds the address at the publisher as a separate add-on, charged only when it succeeds.

Who uses it

  • Brand and competitor monitoring: new mentions to Slack, e-mail or a spreadsheet through n8n, Make, Zapier or Apify integrations.
  • Media analysis and research: the coverage of a topic per day, country or publisher.
  • AI agents and automations: a documented input, predictable records and a run report for decisions.

Quick start

{
"queries": ["electric vehicles"],
"timeRange": "1d"
}
GoalInput
Monitor a brand, only new articles{"queries": ["\"Tesla\""], "timeRange": "1d", "syncKey": "brand-tesla", "maxArticles": 0}
Several countries{"queries": ["Rivian"], "locales": ["en-US", "en-GB", "de-DE"]}
Latest from a publisher{"sites": ["reuters.com"], "timeRange": "1d"}
A topic in selected publishers{"queries": ["interest rates"], "sites": ["reuters.com", "ft.com"]}
A section or the front page{"topics": ["TECHNOLOGY", "TOP"], "timeRange": "any"}
A period, day by day{"queries": ["offshore wind"], "from": "2026-10-01", "to": "2026-10-07", "maxArticles": 0}
With publisher URLs{"queries": ["renewable energy"], "maxArticles": 20, "resolveUrls": true}
Monitor without press releases{"queries": ["Rivian"], "timeRange": "1d", "syncKey": "rivian", "excludeSites": ["prnewswire.com"]}
Slack alerts with new articles{"queries": ["\"Tesla\""], "timeRange": "1d", "syncKey": "brand-tesla", "slackWebhookUrl": "https://hooks.slack.com/services/…"}
A topic by its address{"feedUrls": ["https://news.google.com/topics/CAAq…?hl=en-US&gl=US&ceid=US:en"], "timeRange": "any"}
The last 6 hours{"queries": ["oil price"], "timeRange": "6h"}
More from a search at the limit{"queries": ["Tesla"], "timeRange": "1d", "extraReadsAtCap": 2, "maxArticles": 0}

Input

FieldWhat it does
queriesSearch queries, with Google News operators: "exact phrase", a OR b, -word, site:, when:, after:.
topicsSections: TOP, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH.
sitesPublisher domains. Alone: the publisher's latest. With queries: every query in every publisher.
feedUrlsAddresses of topics or publishers from news.google.com, in their edition or in every locale.
excludeSitesDomains whose articles are not delivered or charged, subdomains included.
localesEditions as language-country: en-US, pl-PL, pt-BR. Default en-US.
timeRangeany, or a number with h, d or y: 6h, 1d, 7d (default), 90d, 1y.
from, toA period instead of the range: YYYY-MM-DD (a UTC day) or ISO 8601. Dates are checked exactly.
splitByDaySearch each day of a period, and read a search at Google's limit again day by day (time ranges up to 92 days). Default on.
extraReadsAtCapRead a search still at the limit 1–3 more times from other sessions. Mostly for ranges of a day or less. Default 0.
maxArticlesPer run, newest first; 0 = no limit. Default 100. With a sync key, the rest stays new for the next run.
maxArticlesPerQueryPer query or topic in each locale; 0 = no limit.
onlyNew, syncKey, syncResetMonitoring: see below.
resolveUrlsAdd the publisher's URL (paid add-on, two extra requests per article).
spikeFactor, spikeMinArticlesThe mention alarm under a sync key: see Monitoring. Default 3 times the usual level and at least 5 articles; spikeFactor: 0 is off.
slackWebhookUrlSend the digest to Slack: see Monitoring. Stored encrypted.
maxRunSecs, proxyConfigurationTime budget; Apify Proxy (default). Residential proxies are used only after Google blocks a request.

A query with its own date operator (when:, after:, before:) keeps it, and the run's time range does not apply to it. At most 500 feeds per run.

Monitoring

Give a syncKey and schedule the run. The memory lives in your account, in the key-value store google-news-sync-<key>, and holds only short hashes of article ids. You can add or change queries under the same key: what was delivered is not charged again. An article is forgotten after 90 days without being found; the memory keeps the latest 200,000. syncReset starts over. "New" means not delivered under this key, not necessarily just published.

Old articles are not delivered as new. After the first run under a key, an article published more than 24 hours before the previous complete run is skipped and free, even if you were not shown it before (OUTPUT.lateSkipped). A run with a from / to period and a query with its own date operator are exempt: they ask for those dates. So is the first run.

Specific queries work best. Google's list for a query depends on the IP that asks. A later run can still bring articles from the last day that you were not shown earlier: measured in four later runs, weather over 7 days delivered 40, 1, 13 and 4, and Tesla over 3 days 4, 0, 8 and 0. Narrower queries reduce that. The first run can be large, because it delivers everything found (708 articles for weather over 7 days): keep a maxArticles limit for it.

Digest and Slack

A run with new articles or a spike writes the record DIGEST: the articles by query, with publisher, age, how many publishers carry the story, spikes first, and what may be missing. At most 30 articles are listed, then a count. Give an incoming webhook in slackWebhookUrl and the same text goes to that channel. A run with nothing new sends nothing and writes no record. OUTPUT.digest and OUTPUT.slack tell what happened; a failed message never fails the run.

Mention spikes

Under a sync key, the Actor counts delivered articles per query and publishing day. When today reaches spikeFactor times the daily average of the last 14 days (at least spikeMinArticles, with 3 days of history), the query is in OUTPUT.spikes and at the top of the digest, once a day. It counts what Google lists within its limits: a sign to look, not a measure of coverage.

Output

{
"id": "CBMiuAFBVV95cUxOTUJx…",
"title": "Germany opens door to offshore wind returns as sector pressures grow",
"source": { "name": "Reuters", "domain": "reuters.com" },
"publishedAt": "2026-11-01T09:12:00.000Z",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMiuAFBVV95cUxOTUJx…?oc=5",
"url": null,
"urlStatus": "not_requested",
"relatedArticles": [],
"storyPublishers": 3,
"storyUrl": null,
"matchedQueries": ["offshore wind"],
"matchedLocales": ["en-US", "en-GB"],
"language": "en",
"country": "US",
"fetchedAt": "2026-11-02T04:30:00.000Z"
}
  • url is null unless resolved; urlStatus tells why: not_requested, resolved, failed or not_resolved_spending_limit.
  • relatedArticles is the other coverage Google groups with a story, mostly in topic feeds.
  • storyPublishers is the number of publishers of the story among the feeds of this run, from Google's related coverage and identical headlines. It is an estimate of the spread, higher for topics than for searches, which have no related coverage.
  • storyUrl is Google's Full Coverage page, when the feed links one (a few topic articles).
  • The feed has no article text, snippet or image, and this Actor does not fetch them.
  • The dataset has an overview and a flat view (CSV, spreadsheets).

Run report (OUTPUT)

Totals (articles, returned, unique, duplicatesInRun, duplicatesSync, lateSkipped, excludedSites, outOfRange, invalid, notDelivered, resolved, unresolved), stopReason (maxArticles, spending_limit, time_limit or null), feedStatuses, per feed feeds (query, locale, status, returned, unique, capped), incomplete (searches at Google's limit), otherLanguage (editions Google answered in another language because it has no such edition), notAvailable, spikes, digest, slack and chargedEvents.

Measured

Beta on the Apify platform, 2026-11-02, Apify datacenter proxies, 256 MB. One day of measurements, so not yet a long-term record.

WhatResult
53 runs, all feeds0 failed feeds, 0 HTTP 429, 0 items rejected by the parser
1 search, 5 articles4 s
10 searches, 995 articles76 s
Publisher URLs50 of 50 resolved, ~2.5 s per URL
Later runs of a query under a sync keysee Monitoring
A search at the limit read day by day, 7 days729 articles instead of ~100, 65 s
Extra reads at the limit (3 reads, small sample)Tesla +33–46 % articles, weather +5–6 %
Publishers per storya topic: 4.2 on average; a search: 1.0, as search feeds have no related coverage

Pricing

Pay per event; platform usage and proxies are included.

EventPrice (FREE, BRONZE)When
run-start$0.0045once per run, together with the first paid article
article$1.95 per 1,000delivered article: unique in the run and, with a sync key, not delivered before
resolved-url$0.95 per 1,000publisher URL resolved (resolveUrls)

Higher plans pay less: article $1.50 (SILVER) and $0.99 (GOLD and above) per 1,000; resolved-url $0.75 and $0.60; run-start $0.0035 and $0.003.

Typical job (BRONZE)Cost
100 articles$0.20
100 articles with publisher URLs$0.30
Hourly monitor, 5 new articles in a run$0.014
Hourly monitor, nothing new in a runfree

You don't pay for repeats under a sync key, late articles, duplicates, articles outside the dates, URLs that could not be resolved, failed feeds or a run that delivers nothing (no start fee either).

Limitations

  • Full Coverage pages cannot be read. Google answered "This feed is not available" for each one tried. Such a URL in feedUrls is free and reported in OUTPUT.notAvailable; use storyUrl and storyPublishers instead.
  • Excluded publishers still take places in Google's limit of ~100, because they are filtered after reading: a search full of them returns fewer articles. -site: in a query is not a way around it: Google then ignores the time range.
  • Not every article. Google News decides what it lists: at most ~100 results per search, topic feeds 30–70, the front page ~40. There is no guarantee of completeness, and OUTPUT.incomplete flags searches at the limit.
  • Publishing dates come from Google, and some articles carry only a day (shown as 07:00 UTC).
  • after: / before: are approximate at Google, so the Actor reads one extra day and checks the dates itself. Those extra reads are free; outOfRange counts what they removed.
  • Older periods thin out: Google lists less the further back you go.
  • The same query can list different articles from run to run, above all at Google's limit of ~100 results: see "Monitoring".
  • Scheduled runs with one sync key should not overlap. Parallel saves are merged, but an article found by two overlapping runs can be delivered twice.
  • A language Google has no edition for falls back to US English: see OUTPUT.otherLanguage.

FAQ

Is it legal to use this data? The Actor reads public Google News feeds, which need no account. Those feeds carry Google's notice that they are meant for personal, non-commercial use in a feed reader. Headlines and links also belong to their publishers. Check that your use fits these terms; this is not legal advice.

Why are there no article texts? Texts and images belong to the publishers. Resolve the URL and open the article.

Why does a query return exactly 100 articles? That is Google's limit per search. Use a narrower query, a shorter time range or from / to.

How do I get only new articles? Set a syncKey and schedule the run.

Not affiliated with Google

This is an independent Actor by DataRelay, not an official Google product or API.

Usage statistics

The Actor sends anonymous run statistics to the developer (options, numbers of articles and statuses, Google request counts, duration). Queries, publisher domains and your Apify user id are never sent, only keyed hashes, used to count repeated queries and distinct users. No articles or account details are collected.

Changelog

  • 0.1 – first version.