Google News Scraper with Real Article URLs avatar

Google News Scraper with Real Article URLs

Pricing

$5.00 / 1,000 articles

Go to Apify Store
Google News Scraper with Real Article URLs

Google News Scraper with Real Article URLs

Scrape Google News articles by keyword, topic or website. Each result has the publisher's real article URL, title, source, publish date and snippet. Pick language, country and date range, and run many searches at once.

Pricing

$5.00 / 1,000 articles

Rating

0.0

(0)

Developer

Om Ray

Om Ray

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

This actor searches Google News and gives you one row per article. You can search by keyword, pull a Google News topic such as TECHNOLOGY, or list the newest articles from a site like reuters.com. Many searches can go in one run.

Google News links point to news.google.com, not to the article. The actor decodes each one into the publisher's real URL, so url opens the actual story. If Google won't decode a link, the row keeps the Google link in googleUrl, sets url to null and urlResolved to false, and you aren't charged for it.

It reads Google's public RSS feeds over plain HTTP, with no browser, login or proxy. A run of 20 articles takes a few seconds, and 100 articles take about 10 seconds.

Input

{
"queries": ["artificial intelligence"],
"timeRange": "7d",
"edition": "US:en",
"maxItems": 20
}
  • queries: keywords, one per line. Google's search operators work, for example "electric vehicles" intitle:battery or ai site:reuters.com.
  • topics: Google News sections. Use TOP_STORIES, WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE or HEALTH, or paste a news.google.com/topics/... link.
  • sites: domains such as bbc.co.uk. Each one runs as a site: search.
  • timeRange: past hour, 24 hours, 7 days, 30 days, year, or any time.
  • startDate and endDate: a fixed date range in UTC. These replace timeRange.
  • edition: the language and country, such as US:en, GB:en, DE:de or BR:pt-419. The list only has editions that Google accepts, so you can't pick a combination that returns nothing.
  • maxItems: the most articles to return for each query, topic or site.
  • dedupe: on by default. An article that an earlier query already returned (same publisher URL) is skipped.
  • splitDateRange: on by default. See the next section.
  • maxRunSeconds: a hard time limit. The run keeps what it has collected when it hits it, and adds a free incomplete row for each query it didn't finish.

If a query has its own when:, after: or before: operator, the actor sends it as written and doesn't add or apply the date settings.

About the 100-article limit

One Google News feed returns about 100 articles, and topic feeds about 30 to 70. To get more for a search, set maxItems above 100 and keep splitDateRange on. The actor then searches smaller date windows, newest first, until it reaches your limit or runs out of windows. This needs a time range or a start date. With "any time" you get one feed. When you set startDate or endDate, the actor also splits the range whenever the first feed comes back full, whatever maxItems is.

The smallest window is one day, and Google caps that at about 100 articles too. A very busy keyword can have more than that in a day, and the rest won't show up. For a busy keyword over 7 days, a run with maxItems of 300 came back with 300 distinct articles in 20 to 40 seconds.

Google treats after: and before: as whole days in US Pacific time, for every edition. The actor starts each search a day early and then drops anything published outside your range, so the dates you get match the UTC dates you asked for.

Output

Here is a real row from the example input above:

{
"status": "ok",
"message": null,
"title": "Trump Says He Will Ban Term ‘Artificial Intelligence’ In Latest Push For ‘Super Intelligence’",
"url": "https://www.forbes.com/sites/fionariley/2026/10/27/trump-vows-to-ban-term-artificial-intelligence/",
"urlResolved": true,
"googleUrl": "https://news.google.com/rss/articles/CBMinwFBVV95cUxNa3BBOFRzNmhiVi10YzJyUVAwWXdVUlRzOHg3bi0yZENqUWk0VzFxUFFMV2NFWUxtdEhyb1pNaTdLcU9RbWU0TDVBUXBHdnN5emZ4SzdVck8zUE5mbnNwbkdqV2VzTHY1cHdBWjlWUmppbDZyMWk0T3FLOUNKR0hwQmIyWlJ5ZlRFbUM4dFJrVGRnb1d4T2tqNUNXUjZUZzQ?oc=5",
"source": "Forbes",
"sourceUrl": "https://www.forbes.com",
"publishedAt": "2026-10-27T17:38:12.000Z",
"description": "Trump Says He Will Ban Term ‘Artificial Intelligence’ In Latest Push For ‘Super Intelligence’ - Forbes",
"relatedArticles": [],
"query": "artificial intelligence",
"queryType": "search",
"language": "en-US",
"country": "US",
"edition": "US:en",
"feedUrl": "https://news.google.com/rss/search?q=artificial%20intelligence%20when%3A7d&hl=en-US&gl=US&ceid=US%3Aen",
"scrapedAt": "2026-11-01T16:01:07.758Z"
}

Every row has the same fields:

FieldWhat it holds
statusok for an article. no-results, error or incomplete for a free row that explains why a query found nothing or stopped early.
messageThe explanation on a status row. Null on article rows.
titleThe headline, without the " - Source" that Google adds to the end.
urlThe publisher's real article URL, or null if it couldn't be decoded.
urlResolvedTrue when url holds the decoded publisher URL.
googleUrlThe news.google.com link from the feed.
sourceThe publisher's name.
sourceUrlThe publisher's home page.
publishedAtPublish time in ISO 8601, UTC.
descriptionThe feed's snippet as clean text. Google puts the headline and publisher here, not an excerpt of the article.
relatedArticlesIn topic feeds, other coverage of the same story, each with title, source and googleUrl. Empty for searches.
queryThe query, site: search or topic that returned the article.
queryTypesearch, site or topic.
languageGoogle's hl value for the edition.
countryGoogle's gl value.
editionGoogle's ceid value.
feedUrlThe RSS feed the article came from.
scrapedAtWhen the row was written.

The run summary, with counts per query and the reason the run stopped, is saved in the key-value store as OUTPUT.

When nothing is found

If a query returns no articles, you get one free row with status set to no-results and a message that says why. For example, Google had no articles for that search in the time range, every article was outside your dates, or all of them were already returned by an earlier query. A topic name Google doesn't know, or a feed that fails to load, gives a free error row. The run still finishes successfully.

A query that stops early gets a free incomplete row. That happens when the run hits maxRunSeconds, when your spending limit is reached, or when some of the day windows in a split search fail to load. Queries the run never reached also get an incomplete row.

Price

You pay $0.005 for each article that has a decoded publisher URL. That's $5 per 1,000 articles, with no charge for starting a run. Rows with urlResolved: false and status rows are free. The run stops when it reaches the spending limit you set.

Limits

  • Results are whatever Google News puts in its feeds. Search feeds hold about 100 articles and topic feeds fewer, and the ranking is Google's.
  • The URL decoding uses the same call that the Google News website uses. In testing, 309 of 309 links decoded and every URL matched the publisher's domain. If Google changes that call, links can come back unresolved until the actor is updated. You won't be charged for those.
  • Decoding fetches one small Google page per article, a few at a time with retries when Google asks it to slow down. That's why 100 articles take seconds rather than being instant.
  • Google's feeds carry Google's own terms. Check that your use fits them.

If something breaks or looks wrong, open an issue on the Issues tab and it gets fixed fast, and if this actor helped you, an honest review on the Store helps other people find it.