Google News Scraper - Headlines + Original Article URLs avatar

Google News Scraper - Headlines + Original Article URLs

Pricing

$2.99 / 1,000 articles

Go to Apify Store
Google News Scraper - Headlines + Original Article URLs

Google News Scraper - Headlines + Original Article URLs

Search Google News by keyword and get the public results back: headline, publishing outlet, publish time, and the publisher's own article URL resolved out of Google's redirect link at no extra charge.

Pricing

$2.99 / 1,000 articles

Rating

0.0

(0)

Developer

Lantern Lab

Lantern Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Categories

Share

Google News Search Scraper

Give it search terms and get Google News' public search results back: the headline, the publishing outlet, the publish time, the Google News link - and publisherUrl, the outlet's own article URL resolved out of Google's redirect. No Google login, no cookies, no account of your own. $2.99 per 1,000 articles, no start fee; resolving the publisher's URL is included. See Pricing.

Input:

{
"queries": ["\"electric vehicle\" battery -China"],
"language": "en-US",
"country": "US",
"timeRange": "7d",
"maxArticlesPerQuery": 100
}

Output - one row per article (recordType: "article"); per-term status rows and the run summary are free. Sample from a real run; Google's opaque identifiers shortened:

{
"recordType": "article",
"articleId": "CBMiWEFVX3lxTE9aV1hGZHI1TnlJeEVUS1By…",
"title": "マリオの生みの親・宮本茂氏に文化勲章授与。50年のゲーム作りを語る[記者会見] - Nintendo DREAM WEB",
"sourceName": "Nintendo DREAM WEB",
"sourceUrl": "https://www.ndw.jp",
"publishedAt": "2026-10-23T02:36:09.000Z",
"publishedAtRaw": "Fri, 23 Oct 2026 02:36:09 GMT",
"googleNewsUrl": "https://news.google.com/rss/articles/CBMiWEFVX3lxTE9aV1hG…?oc=5",
"publisherUrl": "https://www.ndw.jp/nintendo-interview-261023/",
"publisherUrlStatus": "ok",
"query": "Nintendo",
"language": "ja-JP",
"country": "JP",
"timeRange": "any",
"rank": 1,
"partial": false,
"partialReason": null,
"collectedAt": "2026-10-23T15:12:50.777Z"
}

Limits:

  • Public data only. Keyword search on Google News' public feed; no login, no topics or "Full coverage" pages, no article body text or images - the result and the links, not the article. Google News itself serves about 100 articles per term and offers no way to page past that.
  • Every search term gets a status row saying what happened. A term Google answered with nothing is an empty result; a term cut short by a limit, refusal or error is partial with the reason - the two are never confused.
  • Your limits stop collection and appear in the row: maxArticlesPerQuery, the maxUpstreamRequests request ceiling and the maximum charge per run (see Pricing).

What it does

  • Searches each term separately and labels every row with the term that produced it, so one run can cover many terms.
  • Returns the outlet's own article URL in publisherUrl. A Google News link points at news.google.com, and the identifier behind it is opaque — resolving it takes two more requests per article, which this Actor does for you.
  • Deduplicates across the whole run: an article that matches several of your terms is written once and charged once.
  • Keeps the source identifier (articleId), the platform's own publish time (publishedAt, plus publishedAtRaw exactly as Google sent it) and our collection time (collectedAt) as separate fields.
  • Says what happened per search term. A term Google answered with nothing is recorded as an empty result; a term that was cut short by a limit, a refusal or an error is marked partial: true with the reason. The two are different records and are never confused.
  • Caps itself: maxUpstreamRequests is a hard ceiling on requests to Google News for the whole run, derived from your input when you leave it empty, so a run is never unbounded.
  • Charges only article rows. Empty results, per-term status rows and the run summary are free.

What it does not do

  • No article body text and no images: it returns the search result and the link to the article, not the article.
  • No Google News topics, home page or "Full coverage" sections — keyword search only.
  • No other search engine, no translation, no login-only or paywalled content.
  • No scheduling or monitoring built in; use Apify schedules.

Input

FieldDefaultMeaning
queriesrequiredOne search term per line. Google's search syntax works: quotes for a phrase, OR, a leading - to exclude, site:bbc.co.uk.
languageen-USGoogle News interface language as a BCP-47 tag: en-US, zh-CN, ja-JP, de-DE, pt-BR, zh-TW.
countryUSTwo-letter country code of the edition to search. Pair it with a language of the same edition.
timeRangeanyany, 1h, 1d, 7d or 30d. Only articles published inside the window are returned.
maxArticlesPerQuery100Upper bound on rows per search term. Google News itself serves about 100 per term and offers no way to page past that.
resolvePublisherUrltrueResolve the outlet's own article URL. Off makes a run much faster and lighter, with publisherUrl null.
maxUpstreamRequestsderivedHard ceiling on requests to Google News for the whole run. Leave empty and the Actor works one out from your terms and limits.
proxyConfigurationApify ProxyThe proxy the requests go through. The datacenter default is what this Actor is measured on.

Output

One row per article, recordType: "article":

FieldMeaning
articleIdGoogle News' own identifier for the article. Stable across editions of the same feed; the dedupe key.
titleThe headline as Google News publishes it, including the - Outlet suffix Google appends.
sourceNameThe outlet, as Google News names it.
sourceUrlThe outlet's home page.
publishedAtThe platform's publish time, as an ISO 8601 instant.
publishedAtRawThe same time exactly as Google sent it, unparsed.
googleNewsUrlThe Google News redirect link.
publisherUrlThe outlet's own article URL, or null when it could not be resolved. Never guessed.
publisherUrlStatusok, or why publisherUrl is null: not_requested, no_signature, refused, request_failed, blocked, upstream_request_cap.
queryThe search term that produced this row.
language, country, timeRangeThe edition and window that were searched.
rankPosition in that term's results, counting from 1.
partial, partialReasonAlways false / null on an article row: the row exists because the article was collected.
collectedAtOur own collection time, separate from publishedAt.

One row per search term, recordType: "query_status", never charged:

FieldMeaning
articlesReturned / articlesChargedRows this term wrote and charged.
duplicatesSkippedArticles an earlier term in the run had already collected.
feedArticlesAvailableHow many articles the feed offered, before your own limits.
feedLimitReachedtrue when Google's own ceiling, not your maxArticlesPerQuery, ended the list.
partial / partialReasontrue with upstream_request_cap, charge_limit_reached, blocked, upstream_error or not_collected when the term's results are incomplete.
statusTextThe same thing in a sentence, so the dataset explains itself.

The last row is recordType: "RUN_SUMMARY" — articles collected and charged, empty terms, partial terms by reason, publisher URLs resolved by status, requests sent by endpoint, bytes moved, and why collection stopped. The same object is also in the run's key-value store under RUN_SUMMARY.

Partial is not empty

articlesReturned: 0 with partial: false means Google News has no article for that term. partial: true means the term's results are incomplete and there may well be more. A run that collected nothing and had partial terms fails rather than reporting an empty success.

Limits and boundaries

  • Only Google News' public search results. No login, no cookies, no account, no personal data.
  • Google News serves at most about 100 articles per search term and offers no paging, so maxArticlesPerQuery above 100 does not reach more articles; feedLimitReached tells you when that ceiling, rather than your setting, ended a list.
  • A one-hour timeRange on a quiet term can legitimately return nothing. That is an empty result, not a failure.
  • publishedAt is Google's own value for the article and is not re-derived from the page.

Pricing

Pay per event, no start fee. Resolving the outlet's own article URL (publisherUrl) is included in the article price:

EventPriceCharged for
result$0.00299 ($2.99 per 1,000)Each article row written, publisher URL included. Per-term status rows, empty results and the run summary are free.

Set a maximum charge for the run and the Actor stops before going over it.