# Google News Scraper: By Date (`luzivanlt/google-news-scraper`) Actor

Google News read day by day past the usual 100 per search: 4,440 articles from two keywords over 30 days. $1 per 1,000 articles. Topics and links too.

- **URL**: https://apify.com/luzivanlt/google-news-scraper.md
- **Developed by:** [Luzi](https://apify.com/luzivanlt) (community)
- **Categories:** News, SEO tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 articles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google News Scraper: By Date

Get Google News articles for any keyword, topic or Google News link, in any
country and language. Give it a date window and each keyword is read one day
at a time, so you get up to about 100 articles for every day of the window
instead of the usual 100 in all. No Google account, login or API key needed.

Tested daily. Latest checks: two keywords over 30 days, 4,440 articles,
plus 516 from two sections, in 3 minutes; a Vietnamese
keyword and a German search over 7 days, 1,157 articles.

### What does this Actor do?

You give it keywords (the words you would type in Google News' search box),
Google News sections such as Business or Technology, or links to Google News
pages. For each one it saves one row per article, until it reaches your limit
or runs out of articles.

Each row comes with:

- the article's headline, its publisher's name and website, and when it was
  published (an exact date and time)
- the Google News link to the article, and its Google News id
- for a story with wider coverage (common in sections and top stories): the
  other articles Google groups with it, each with its headline, publisher and
  link
- the article's place in its feed (1 = the top article)
- the keyword or section it came from, the day searched (for a date window),
  the edition (country and language) asked for and the one Google served

### Why use it?

- **Thousands of articles per keyword.** A Google News search lists about 100
  articles. With a date window, every day of the window is its own search, so
  two busy keywords over 30 days returned 4,440 articles, newest day
  first.
- **Any edition.** Read Google News as it appears in another country and
  language: tested in the US, German and Vietnamese editions.
- **Keywords, sections and links in one run.** Mix searches, the nine Google
  News sections and pasted Google News links.
- **Related coverage at no extra cost.** Stories in sections and top stories
  come with the other articles Google groups with them.
- **Each article once.** An article found by two keywords, or on two days, is
  saved and charged once.
- **Use the data anywhere.** Download as JSON, CSV or Excel, or send it to
  your own tools through Apify's API and integrations.

### How to use it

1. Type one or more keywords into **Keywords**, pick **Topics**, or paste
   **Google News links**.
2. Optionally, set the **Country and language**, a date window (**Only
   articles newer than**, **Only articles older than**) and **Max articles per
   keyword, topic or link**.
3. Click **Start**. When the run ends, open the **Output** tab to view the
   articles or download them.

Run it with no input to see a sample: up to 100 US articles from the last 3 days
on "artificial intelligence", charged as usual.

### Input

| Field                                                              | What it does                                                                                       | Default |
| ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- | ------- |
| **Keywords** (`keywords`)                                          | Words to search for, one search each. "exact phrase", OR, -word and site: work                     | —       |
| **Topics** (`topics`)                                              | `TOP`, `WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH` | —       |
| **Google News links** (`startUrls`)                                | Google News search, section, topic or front page links; each keeps its own edition                 | —       |
| **Country and language** (`edition`)                               | `COUNTRY:language`, such as `US:en`, `GB:en`, `DE:de`, `JP:ja`, `BR:pt-419`, `VN:vi`               | `US:en` |
| **Only articles newer than** (`onlyArticlesNewerThan`)             | A date (`2026-10-01`) or a span (`12 hours`, `3 days`, `2 weeks`, `1 month`, `1 year`)             | none    |
| **Only articles older than** (`onlyArticlesOlderThan`)             | The window's end, the same way; needs the start. At most 366 days in all                           | none    |
| **Max articles per keyword, topic or link** (`maxArticlesPerFeed`) | Stop each one after this many articles (1 to 10,000)                                               | 100     |
| **Only new articles** (`onlyNewItems`)                             | Return only the articles an earlier run did not; see New items only below                          | off     |

Give at least one keyword, topic or link. Example input:

```json
{
  "keywords": ["artificial intelligence", "\"electric vehicles\" -tesla"],
  "topics": ["TECHNOLOGY"],
  "edition": "GB:en",
  "onlyArticlesNewerThan": "30 days",
  "maxArticlesPerFeed": 3000
}
```

### New items only

Turn on **Only new articles** (`onlyNewItems`) for a scheduled run, or a
re-run of the same task. Each run then reads the latest articles of each
keyword, topic or link, one feed each, and returns only those it has not
returned before. Skipped articles are neither saved nor charged; each new
article is charged as usual.

- Runs with other settings, or from another task, keep their own list, so two
  schedules on one keyword never skip each other's articles.
- It cannot be combined with **Only articles newer than** on a keyword search:
  a dated search reads one feed a day, and every run would read the whole
  window again. Sections and topic links can keep one. The form fills in
  `3 days` for **Only articles newer than**: clear it when you turn this on
  for keywords.
- The list lives in your Apify account, in a key-value store named
  `google-news-scraper-monitor`. Delete it to start afresh.

### Output

One row per article. An example, with made-up values:

```json
{
  "article_id": "CBMiAbCdEfGhIjKlMnOpQrStUvWxYz",
  "title": "A headline about artificial intelligence",
  "source_name": "A Newspaper",
  "source_url": "https://www.a-newspaper.example",
  "published_at": "2026-10-17T16:01:03.000Z",
  "google_news_url": "https://news.google.com/rss/articles/CBMiAbCdEfGhIjKlMnOpQrStUvWxYz?oc=5",
  "related_articles": [
    {
      "title": "Another paper's take on the same story",
      "source_name": "Another Paper",
      "google_news_url": "https://news.google.com/rss/articles/CBMiZyXwVuTsRqPoNmLkJiHgFeDcBa?oc=5"
    }
  ],
  "feed_position": 1,
  "query": "artificial intelligence",
  "topic": null,
  "search_day": "2026-10-17",
  "feed_title": "\"artificial intelligence after:2026-10-17 before:2026-10-18\" - Google News",
  "feed_page_url": "https://news.google.com/search?q=artificial+intelligence+after:2026-10-17+before:2026-10-18&hl=en-US&gl=US&ceid=US:en",
  "feed_language": "en-US",
  "edition": "US:en",
  "language": "en-US",
  "country": "US",
  "input_link": "https://news.google.com/search?q=artificial+intelligence&hl=en-US&gl=US&ceid=US%3Aen"
}
```

| Field              | What it holds                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------- |
| `article_id`       | The article's Google News id                                                                      |
| `title`            | The headline, without the publisher's name Google adds after it                                   |
| `source_name`      | The publisher's name                                                                              |
| `source_url`       | The publisher's website                                                                           |
| `published_at`     | When it was published (ISO date and time, UTC)                                                    |
| `google_news_url`  | The Google News link to the article; it opens the publisher's page                                |
| `related_articles` | Other articles Google groups with this story (headline, publisher, Google News link); often empty |
| `feed_position`    | Its place in its feed, 1 = the top article                                                        |
| `query`            | The keyword it came from                                                                          |
| `topic`            | The section it came from (`BUSINESS`, `TOP`, …)                                                   |
| `search_day`       | With a date window: the day whose search found it                                                 |
| `feed_title`       | The feed's title, as Google names it                                                              |
| `feed_page_url`    | The Google News page for that feed                                                                |
| `feed_language`    | The edition's language Google served                                                              |
| `edition`          | The edition asked for (`US:en`)                                                                   |
| `language`         | The language asked for                                                                            |
| `country`          | The country asked for                                                                             |
| `input_link`       | The Google News link for the keyword, section or link it came from                                |

Not included: the publisher's own article link (rows carry the Google News
link, which opens it), the article's text and its image.

### How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

- **$1 per 1,000 articles** ($0.001 an article). Each article is charged once per run.
- No start fee, and nothing per keyword, topic or link.

So 1,000 articles cost $1. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every article saved so far.

### How long does a run take?

About 10 seconds for 100 articles of one keyword, about 40 seconds for two
keywords over 7 days, and about 3 minutes for two keywords over 30 days plus
two sections (4,956 articles).

### Good to know

- **Without a date window, a keyword gives about 100 articles**: Google's
  own pick of recent articles. Set **Only articles newer than** to read it
  day by day and get more.
- **A day gives at most about 100 articles.** For a very busy keyword, some
  articles of a day may be missing; a narrower keyword reads deeper.
- **Days follow the edition's clock.** The Actor reads one extra day on each
  side of your window and keeps only articles published inside it (UTC).
- **Sections and links are one feed each** (about 40 to 100 articles); a date
  window only filters them.
- **An unknown edition reads as US English.** Check `feed_language`.
- **An article found by two keywords is saved and charged once**, under
  one of them. It still counts toward the other keyword's maximum, so two
  keywords can save fewer articles than their two maximums.
- **Personal data.** Articles can name people. Use the data in line with the
  laws that apply to you.

### More Actors from us

- [Google Ads Transparency Scraper: Every Ad by Site](https://apify.com/luzivanlt/google-ads-transparency-scraper): Google Ads Transparency Center ads by website, advertiser or name, to the last page, in 216 regions.
- [Google Play Reviews Scraper: Device, Star Filter & Replies](https://apify.com/luzivanlt/google-play-reviews-scraper): Google Play reviews with the device each was written on, a star filter and the developer's reply.
- [AliExpress Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/aliexpress-products-scraper): Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- [Amazon Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/amazon-products-scraper): Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- [App Store Reviews Scraper: All Reviews, Not 500](https://apify.com/luzivanlt/app-store-reviews-scraper): Every written App Store review of an app, not just the newest 500.
- [Woolworths Coles ALDI Scraper: AU Grocery Prices](https://apify.com/luzivanlt/au-supermarkets-scraper): Woolworths, Coles and ALDI products for any search in one run, every results page to the end.
- [Bilibili Video Scraper: Search & Channel Videos](https://apify.com/luzivanlt/bilibili-videos-scraper): Bilibili videos from searches or whole channels, each with its full detail page's data.
- [Career Site Jobs Scraper: Workday, Greenhouse, Lever](https://apify.com/luzivanlt/career-site-jobs-scraper): Every job on Greenhouse, Lever, Ashby, SmartRecruiters and Workday boards, checked against each board's count.

### Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with `POST /v2/acts/…/runs` and read its dataset):

```text
POST https://api.apify.com/v2/acts/luzivanlt~google-news-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
```

With the sample input as its JSON body:

```json
{
  "keywords": ["artificial intelligence"],
  "edition": "US:en",
  "onlyArticlesNewerThan": "3 days",
  "maxArticlesPerFeed": 100
}
```

Its inputs, in the order of the input form:

| Input                                                          | What it takes                                                                                                                                                                               | Default   |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
| `keywords` (Keywords)                                          | Words to search Google News for, one search per line, as you would type them in Google News' search box, e.g. artificial intelligence.                                                      | —         |
| `topics` (Topics)                                              | Google News sections to read: TOP (top stories), WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH, e.g. TECHNOLOGY.                                              | —         |
| `startUrls` (Google News links)                                | Links to Google News pages: a search (news.google.com/search?q=…), a section or topic (news.google.com/topics/…, /headlines/section/topic/BUSINESS), or the front page; RSS links work too. | —         |
| `edition` (Country and language)                               | The Google News edition to read, as COUNTRY:language, e.g. US:en, GB:en, IN:en, DE:de, FR:fr, JP:ja, BR:pt-419, MX:es-419, TW:zh-Hant or VN:vi.                                             | `"US:en"` |
| `onlyArticlesNewerThan` (Only articles newer than)             | A date, e.g. 2026-10-01, or a span back from now (12 hours, 3 days, 2 weeks, 1 month, 1 year).                                                                                              | —         |
| `onlyArticlesOlderThan` (Only articles older than)             | Optional end of the window: a date, e.g. 2026-10-15 (articles before that day), or a span back from now, e.g. 1 week.                                                                       | —         |
| `maxArticlesPerFeed` (Max articles per keyword, topic or link) | Stop each keyword, topic or link after this many articles, from 1 to 10,000; default 100.                                                                                                   | `100`     |
| `onlyNewItems` (Only new articles)                             | Turn this on for a scheduled run, or a re-run of the same task: each run then reads the latest articles of each keyword, topic or link and returns only those it has not returned before.   | —         |

Apify's MCP server, `https://mcp.apify.com`, lists it as `luzivanlt/google-news-scraper`. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=luzivanlt/google-news-scraper"
    }
  }
}
```

The client signs in with OAuth, or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }`.

A real run's output, unedited: [the sample dataset](https://api.apify.com/v2/datasets/slIJcf6hw2QVPJBCh/items?format=html\&clean=true).

Charged per article delivered; the sample input above costs at most $0.10.

# Changelog

This Actor's version history is a separate document: https://apify.com/luzivanlt/google-news-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `array`):

Words to search Google News for, one search per line, as you would type them in Google News' search box, e.g. artificial intelligence. Google's search operators work too: "exact phrase", OR, -word, site:example.com. Up to 300 characters each. With a date window set, leave out after:, before: and when: (use one or the other). A link here is refused: paste it under Google News links.

## `topics` (type: `array`):

Google News sections to read: TOP (top stories), WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH, e.g. TECHNOLOGY. Each section is one feed of about 40 to 100 articles, read in the edition under Country and language. A date window only filters it.

## `startUrls` (type: `array`):

Links to Google News pages: a search (news.google.com/search?q=…), a section or topic (news.google.com/topics/…, /headlines/section/topic/BUSINESS), or the front page; RSS links work too. A link keeps its own country and language (its ceid, or hl and gl); one without them uses Country and language. e.g. https://news.google.com/search?q=solar

## `edition` (type: `string`):

The Google News edition to read, as COUNTRY:language, e.g. US:en, GB:en, IN:en, DE:de, FR:fr, JP:ja, BR:pt-419, MX:es-419, TW:zh-Hant or VN:vi. Default US:en. Links keep their own edition. Each row's feed_language shows the edition Google served; an unknown edition reads as US English.

## `onlyArticlesNewerThan` (type: `string`):

A date, e.g. 2026-10-01, or a span back from now (12 hours, 3 days, 2 weeks, 1 month, 1 year). With a date window, each keyword is read one day at a time, up to about 100 articles a day, so a long window returns far more articles, each charged. Sections and links are only filtered. Leave empty for Google's latest articles (about 100 per keyword).

## `onlyArticlesOlderThan` (type: `string`):

Optional end of the window: a date, e.g. 2026-10-15 (articles before that day), or a span back from now, e.g. 1 week. Needs "Only articles newer than" and must be later than it. The window is at most 366 days. Leave empty to read up to now.

## `maxArticlesPerFeed` (type: `integer`):

Stop each keyword, topic or link after this many articles, from 1 to 10,000; default 100. With a date window, the newest days are read first. Each article is charged once per run ($1 per 1,000 articles), so this caps each one's cost. Example: 3,000 articles cost at most $3. An article found by two keywords is charged once but counts toward both limits.

## `onlyNewItems` (type: `boolean`):

Turn this on for a scheduled run, or a re-run of the same task: each run then reads the latest articles of each keyword, topic or link and returns only those it has not returned before. Skipped articles are neither saved nor charged; each new article is charged as usual. On a keyword search it needs Only articles newer than left empty (the form fills in 3 days: clear it), since a dated search reads one feed a day. Runs with other settings, or from another task, keep their own list. Off by default.

## Actor input object example

```json
{
  "keywords": [
    "artificial intelligence"
  ],
  "edition": "US:en",
  "onlyArticlesNewerThan": "3 days",
  "maxArticlesPerFeed": 100
}
```

# Actor output Schema

## `articles` (type: `string`):

Every article the run saved, one row each.

## `allFields` (type: `string`):

The same rows with every field.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "artificial intelligence"
    ],
    "edition": "US:en",
    "onlyArticlesNewerThan": "3 days",
    "maxArticlesPerFeed": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("luzivanlt/google-news-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["artificial intelligence"],
    "edition": "US:en",
    "onlyArticlesNewerThan": "3 days",
    "maxArticlesPerFeed": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("luzivanlt/google-news-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "artificial intelligence"
  ],
  "edition": "US:en",
  "onlyArticlesNewerThan": "3 days",
  "maxArticlesPerFeed": 100
}' |
apify call luzivanlt/google-news-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,luzivanlt/google-news-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Hj33xunMH0AwDGx8n/builds/Zw16coGXKgbk5DFUy/openapi.json
