# GDELT News Scraper – Global News Monitor & Search API (`dedicated_crest/gdelt-news-monitor`) Actor

GDELT news scraper & news monitoring API: search worldwide online news in 65+ languages by keyword, site, country, language and theme. Headline, URL, outlet, country, language, time, tone. Deduplicated, no API key. Google Alerts alternative. $2/1,000.

- **URL**: https://apify.com/dedicated_crest/gdelt-news-monitor.md
- **Developed by:** [Ben Barazandeh](https://apify.com/dedicated_crest) (community)
- **Categories:** News, Marketing, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 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.

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

## GDELT News Scraper – Global News Monitor & News Search API

**Search and monitor worldwide online news in 65+ languages through the official GDELT API, for $2 per 1,000 unique articles.** Enter keywords (plus optional sites, countries, languages or GDELT themes) and get one deduplicated row per article: headline, URL, outlet domain, outlet country, language, time first seen, tone/sentiment and share image.

- ✅ **Official source**: the GDELT Project DOC 2.0 API, which monitors news sites in 100+ countries and updates every 15 minutes
- ✅ **Monitoring-ready**: rolling time windows (`24h`, `7d`…), newest first, syndicated duplicates removed before you're charged
- ✅ **Filters Google News doesn't give you**: source country, source language, domain include/exclude, GDELT themes and tone
- ✅ **No API key, login or proxy**. Pay per unique article, and it stops at your *Maximum cost per run*

**Try it now:** the input is pre-filled with `artificial intelligence`, English sources, last 24 hours, 50 articles. Click **Start**. GDELT allows one request every 5 seconds and is often busy, so a run takes from about 30 seconds to a few minutes (the test run below waited about 3.5 minutes for GDELT).

### Real run results (18 Oct 2026)

Pre-filled input: keyword `artificial intelligence`, language English, timespan `24h`, `maxItems: 50` (run `70zufeEJrl6z2eODx`: 50 articles saved, 74 duplicate headlines skipped and not charged). First 8 rows:

| Seen (UTC) | Title | Outlet | Outlet country | Language |
|---|---|---|---|---|
| 2026-10-18 16:45 | Taiwan Semiconductor (TSM) Profit Rose 69% Last Quarter. Is the Stock Still Che… | insidermonkey.com | United States | English |
| 2026-10-18 16:45 | SanDisk (SNDK) Is Now Worth More Than the Company That Spun It Off | insidermonkey.com | United States | English |
| 2026-10-18 16:45 | How Did Seagate (STX) Triple Selling a Technology Everyone Buried? | insidermonkey.com | United States | English |
| 2026-10-18 16:45 | S. Korea growth momentum to strengthen amid chip boom: Finance minister | prokerala.com | India | English |
| 2026-10-18 16:45 | Advanced Manufacturing in Focus: Smart Life and Robotics Take the Spotlight at… | thesudburystar.com | Canada | English |
| 2026-10-18 16:45 | Aboitiz Group builds future - ready talent as AI transforms business | bworldonline.com | Philippines | English |
| 2026-10-18 16:45 | South Korea, ASEAN Foundation to hold 2026 Innovative Culture Forum in Manila | bworldonline.com | Philippines | English |
| 2026-10-18 16:45 | Bangkok Meetings Highlight Overlapping Shocks to Global Economy | english.aawsat.com | Syria | English |

### Use cases

- **PR & comms teams**: brand, executive and competitor mentions, with tone
- **Risk, compliance & KYC / adverse-media screening**: negative news about companies, suppliers or people
- **Investors & analysts**: news flow and sentiment on tickers, sectors and countries
- **Marketing & SEO**: content ideas, outreach targets (who covers your topic)
- **AI agents, RAG pipelines and dashboards**: fresh, structured news on a schedule

### Features

- 🔎 **Keywords (any)**, **must-contain (all)** and **exclude** terms; multi-word entries become exact phrases
- 📰 **Only / exclude specific news sites** (e.g. `reuters.com`, `bbc.co.uk`)
- 🌍 **Source country** and **language** filters (e.g. `US`, `india`, `german`, `spanish`)
- 🏷️ **GDELT themes** (e.g. `CYBER_ATTACK`, `ECON_BANKRUPTCY`, `ENV_CLIMATECHANGE`) and a raw query box for any GDELT operator (`near20:`, `imagetag:`, …)
- 🙂 **Sentiment labels** (negative / neutral / positive from GDELT's tone score) or **min/max tone** filters for "only very negative news"
- ⏱️ Time span (`30min` … `3m`) or exact start/end dates. Large ranges are split into time windows automatically, so you can get far more than GDELT's 250-per-query limit.
- ♻️ URL canonicalization + syndicated-headline dedupe
- 📝 Optional article metadata: meta description, author, published time, site name, image, optional opening-text snippet
- 💵 Stops cleanly at your **Maximum cost per run**

### How to use it

1. Click **Try for free**.
2. Enter keywords (and optionally sites, countries, languages).
3. Choose a time span, e.g. `24h`.
4. Run it, or **schedule hourly/daily** and connect Slack, Google Sheets, email, Zapier, Make or n8n for alerts.

### Input example

```json
{
  "keywords": ["data breach", "ransomware"],
  "languages": ["english"],
  "countries": ["US", "UK"],
  "timespan": "24h",
  "sentiment": true,
  "maxItems": 500
}
```

### Output example

Real output (query `"data breach"`, English, with sentiment and article metadata):

```json
{
  "title": "AI Enabled Ransomware, New Threat",
  "url": "https://www.livelaw.in/articles/ai-enabled-ransomware-new-threat-555141",
  "domain": "livelaw.in",
  "sourceCountry": "India",
  "language": "English",
  "seenAt": "2026-10-17T12:45:00Z",
  "sentiment": "negative",
  "toneRange": "< -1.5",
  "socialImage": "https://www.livelaw.in/h-upload/2026/10/16/706878-ransomware.jpg",
  "mobileUrl": "https://www.livelaw.in/amp/articles/ai-enabled-ransomware-new-threat-555141",
  "duplicateOf": null,
  "query": "\"data breach\" sourcelang:english",
  "scrapedAt": "2026-10-17T17:13:09.774Z",
  "article": {
    "fetchStatus": 200,
    "finalUrl": "https://www.livelaw.in/articles/ai-enabled-ransomware-new-threat-555141",
    "description": "Ransomware has always operated on this basic business model: Cryptically compromise someone",
    "author": "Pratham Tiwari",
    "publishedAt": "2026-10-17T15:00:19+05:30",
    "siteName": null,
    "image": "https://www.livelaw.in/h-upload/2026/10/16/706878-ransomware.jpg",
    "keywords": "Ransomware, Cybercrime, Information Technology Act, Cybersecurity Laws, Intermediary Liability, Digital Personal Data Protection Act, Electronic Evidence, Digital Forensics, AI Generated Deepfakes, Legal Framework",
    "text": null
  }
}
```

`sentiment` is present when *Label sentiment* is on. `article` is present when *Fetch article metadata* is on. `duplicateOf` is only filled when you turn off syndicated-duplicate removal.

### Pricing

**Pay per event: $0.002 per unique article** (**$2 per 1,000**), no start fee. Duplicates are removed before charging. Set a *Maximum cost per run* and the Actor stops cleanly when it's reached.

How that compares with other news Actors on the Apify Store (free-tier list prices from the Store API, checked 18 Oct 2026):

| Actor | Source | Price per 1,000 articles | Start fee |
|---|---|---|---|
| **This Actor** | GDELT (65+ languages, outlet country) | **$2.00** | none |
| GDELT News Scraper (dami_studio) | GDELT | $2.00 | none |
| GDELT Global News Monitoring Scraper (scrapers_lat) | GDELT | $8.00 | none |
| GDELT News Scraper (logiover) | GDELT | $3.00 | $0.00005 |
| Google News Scraper (data_xplorer) | Google News | $4.00 | none |
| Google News Scraper (automation-lab) | Google News | $2.30 | $0.005 |

Google News scrapers are a good fit for "what does Google show for this query". GDELT is a better fit for global, multilingual coverage with outlet country, language and tone filters.

### Speed & limits (please read)

- GDELT asks clients to send **at most one request every 5 seconds** and often answers "busy" (HTTP 429) under load. The Actor respects this and retries patiently, so a run usually takes **30 seconds to a few minutes**, longer when GDELT is busy. Status messages show when it's waiting.
- Each request returns up to 250 articles. Busy time ranges are split automatically.
- *Label sentiment* runs 3 queries per time window (negative / neutral / positive), so it takes about 3× longer.
- GDELT's DOC API covers roughly the **last 3 months**.

### FAQ

**Is this legal?** Yes. The Actor uses GDELT's public, free DOC 2.0 API, which is intended for this kind of research and monitoring. Article metadata fetching only reads public page metadata. If you enable text snippets, respect publishers' copyright and terms.

**Is it affiliated with GDELT or Google?** No. The GDELT Project is an independent open data initiative. This Actor is not affiliated with or endorsed by it.

**Feedback?** Open an issue in the **Issues** tab.

**Can I use it as a Google Alerts replacement?** Yes. Schedule it hourly or daily with `timespan` matching the interval (e.g. `24h` daily) and send new rows to Slack, email or Google Sheets.

**Does it return the full article text?** By default you get the headline, URL and GDELT metadata. Turn on *Fetch article metadata* to visit each article and add its meta description, author, published time, site name and image; with that on, *Article text snippet length* adds up to 5,000 characters of the opening paragraphs. Respect publishers' copyright.

**Why did my run take several minutes?** GDELT throttles all clients to about one request per 5 seconds and answers "busy" under load. The Actor waits and retries instead of failing; you are not charged for waiting.

**How far back can I search?** GDELT's DOC API covers roughly the last 3 months.

### Related tools

Other Actors by the same developer that work well with this one:

- [App Store Reviews Scraper](https://apify.com/dedicated_crest/app-store-reviews-scraper): add app-store customer feedback to your brand monitoring
- [SEC EDGAR Scraper](https://apify.com/dedicated_crest/sec-edgar-funding-leads): pair funding-round news with SEC Form D filings
- [Grants.gov Scraper](https://apify.com/dedicated_crest/grants-gov-opportunity-finder): federal grant opportunities for a topic you are tracking
- [Bulk WHOIS & DNS Lookup](https://apify.com/dedicated_crest/domain-whois-dns-intel): profile the outlets or companies that appear in your news feed
- [Hacker News Scraper](https://apify.com/dedicated_crest/hacker-news-search-hiring): monitor tech-community discussion of a topic or brand on Hacker News

# Actor input Schema

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

Articles mentioning ANY of these. Multi-word entries are searched as exact phrases, e.g. "artificial intelligence". GDELT needs words of 3+ characters (use quotes for short acronyms in phrases).

## `allKeywords` (type: `array`):

Every one of these must also appear, e.g. regulation.

## `excludeKeywords` (type: `array`):

Drop articles containing any of these.

## `domains` (type: `array`):

Restrict to domains, e.g. reuters.com, bbc.co.uk.

## `excludeDomains` (type: `array`):

Domains to exclude.

## `countries` (type: `array`):

Country of the news outlet: FIPS 10-4 codes or names, e.g. US, UK, france, india, germany.

## `languages` (type: `array`):

Article language, e.g. english, spanish, german, french, chinese, eng, spa.

## `themes` (type: `array`):

GKG themes, e.g. ECON_BANKRUPTCY, CYBER_ATTACK, ENV_CLIMATECHANGE, TAX_FNCACT_CEO.

## `query` (type: `string`):

Any extra GDELT DOC 2.0 operators, ANDed with the fields above, e.g. near20:"tesla recall" or imagetag:"protest".

## `timespan` (type: `string`):

How far back to search: e.g. 30min, 6h, 24h, 7d, 2w, 3m (GDELT keeps ~3 months). Ignored when Start date is set.

## `startDate` (type: `string`):

ISO date/time, e.g. 2026-10-01 or 2026-10-01T08:00:00Z.

## `endDate` (type: `string`):

Defaults to now.

## `sentiment` (type: `boolean`):

Label every article negative / neutral / positive using GDELT's tone score. Runs 3 GDELT queries per time window, so runs take ~3x longer.

## `minTone` (type: `integer`):

Only articles with GDELT tone above this (e.g. 5 = clearly positive). Disables sentiment labels.

## `maxTone` (type: `integer`):

Only articles with GDELT tone below this (e.g. -5 = clearly negative). Disables sentiment labels.

## `dedupeTitles` (type: `boolean`):

Drop articles whose headline matches one already saved (wire stories republished by many sites). URLs are always deduplicated.

## `fetchArticleMeta` (type: `boolean`):

Visit each article page to add its meta description, author, published time, site name and image (1 extra request per article; some sites block bots).

## `articleTextMaxChars` (type: `integer`):

With metadata on, also include up to N characters of the article's opening paragraphs (0 = none). Respect publishers' copyright.

## `sort` (type: `string`):

Order GDELT returns articles in each time window.

## `maxItems` (type: `integer`):

Stop after this many articles. The run also stops cleanly when your Maximum cost per run is reached.

## Actor input object example

```json
{
  "keywords": [
    "artificial intelligence"
  ],
  "languages": [
    "english"
  ],
  "timespan": "24h",
  "sentiment": false,
  "dedupeTitles": true,
  "fetchArticleMeta": false,
  "articleTextMaxChars": 0,
  "sort": "datedesc",
  "maxItems": 50
}
```

# Actor output Schema

## `results` (type: `string`):

News articles with title, URL, source domain, country, language, time seen and sentiment.

## `summary` (type: `string`):

GDELT query used, date range, articles saved, requests and duplicates skipped.

# 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"
    ],
    "languages": [
        "english"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("dedicated_crest/gdelt-news-monitor").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"],
    "languages": ["english"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("dedicated_crest/gdelt-news-monitor").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"
  ],
  "languages": [
    "english"
  ],
  "maxItems": 50
}' |
apify call dedicated_crest/gdelt-news-monitor --silent --output-dataset

```

## MCP server setup

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

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/C0gVEJJhVsTMIFJmq/builds/OXBEAOP8qtARtWgAZ/openapi.json
