News & RSS Keyword Monitor (GDELT + Feeds) avatar

News & RSS Keyword Monitor (GDELT + Feeds)

Pricing

from $1.00 / 1,000 new articles

Go to Apify Store
News & RSS Keyword Monitor (GDELT + Feeds)

News & RSS Keyword Monitor (GDELT + Feeds)

Monitor keywords in worldwide news (GDELT) and any RSS/Atom feed. Exclude words, language and country filters, dedupe, and only new articles on schedules.

Pricing

from $1.00 / 1,000 new articles

Rating

0.0

(0)

Developer

Dave West

Dave West

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

A news monitor and RSS keyword tracker for brand mentions, competitors and topics. Give it keywords (with optional exclude words, language and country filters) and, if you like, your own RSS/Atom feeds. It searches worldwide online news through the free GDELT news index and your feeds, removes duplicates, and returns one row per article: title, link, source, publish date, language, matched keywords and a short snippet.

Schedule it and every run returns only the articles you have not seen yet, so it works as a lightweight media monitoring tool and a Google News alternative for alerts in Slack, email, Google Sheets, Zapier, Make or n8n. You pay $0.001 per new article ($1 per 1,000). Articles you have already received, duplicates and empty runs add no article charges.

  • Global news coverage through GDELT: the GDELT DOC 2.0 API covers online news in about 65 languages, updated every 15 minutes, with no API key needed. Search in English and you find coverage in every language (GDELT searches English machine translations of the full text).
  • Any RSS or Atom feed: news sites, blogs, trade press, press-release feeds, YouTube channel feeds, and Google News RSS search URLs you copy yourself. Web page URLs work too if the page links to its feed.
  • Precise keyword matching: case- and accent-insensitive, whole words and phrases ("AI" does not match "said"), optional prefix wildcard (klimaat*), any or all keywords, plus exclude words.
  • Language and country filters: en, nl, de, ... and publisher countries (US, GB, NL, ...).
  • Deduplication: the same story from GDELT and a feed, with tracking parameters, www./m./AMP variants or a " - Publisher" title suffix, is returned once (alsoFoundIn lists the other sources).
  • Monitoring mode: delivered articles are remembered in a named key-value store in your account. Scheduled runs return only new articles (or everything, flagged with isNew).
  • Robust: if GDELT is rate-limited or down, the run still delivers your feed articles. A broken feed never stops the run.
  • Lightweight: HTTP only, no browser, no full-article scraping. Runs take seconds and cost almost nothing in platform usage.

Use cases

  • Brand mentions and reputation: your company, product or CEO in the news, excluding job ads or stock tips.
  • Competitor and market monitoring: product launches, funding rounds, acquisitions, regulation.
  • PR and media monitoring: coverage of a campaign or press release across countries and languages.
  • Topic alerts: a daily feed of "artificial intelligence" + "regulation" news for a newsletter or research.
  • Feed aggregation with filters: watch 50 trade-press RSS feeds and keep only the items that mention your terms.

How it works

  1. Enter your keywords (and optional exclude words, languages, countries).
  2. Optionally add RSS/Atom feed URLs.
  3. Run it and check the Overview table.
  4. Schedule it (hourly or daily). Each run returns only new articles. Connect an integration to get alerts.
keywords ──► GDELT DOC 2.0 API (full-text news search) ──┐
├─► filter ─► dedupe ─► new only? ─► dataset rows
RSS / Atom feeds ──► title + summary keyword match ───────┘ (seen IDs in a named KV store)

Input

FieldWhat it doesDefault
keywordsWords or phrases to monitor. GDELT searches the full article text; feed items must mention a keyword in the title or summary. Trailing * = prefix wildcard (feeds only).-
gdeltKeywordsOptional English search terms for GDELT. GDELT searches English machine translations of all articles, so use English terms here for Dutch, German, ... news and keep native keywords in keywords for your feeds. Empty = keywords.-
excludeKeywordsDrop articles that mention any of these-
matchModeany keyword or all keywordsany
feedsRSS / Atom feed URLs (Google News RSS search URLs and pages that link to a feed also work). With no keywords, every item from the feeds is returned.-
useGdeltSearch GDELT as well as your feedstrue
languagesISO 639-1 codes (en, nl, de, ...) or English names (Dutch). Applied to GDELT and to feeds that declare a language.all
countriesPublisher countries for GDELT: ISO codes (US, GB, NL) or English namesall
lookbackHoursOnly articles published within this window (GDELT: up to 2160 h = 3 months). 48 h by default because GDELT's index can lag.48
maxArticlesMax rows per run, newest first. Articles over the cap stay unseen for the next run.200
onlyNewReturn only articles not delivered before (monitoring mode)true
stateStoreNameNamed key-value store that remembers delivered articles. Use one name per monitor.news-rss-keyword-monitor-state
gdeltMaxRecordsArticles requested from GDELT (max 250)250
gdeltMaxWaitSecsTotal time for GDELT including retries before continuing with feeds only40
requestTimeoutSecsTimeout per request30
proxyConfigurationOptional proxy for GDELT requests only (helps if your runs keep getting rate-limited)off

Example input: brand monitoring

{
"keywords": ["Acme Robotics", "AcmeBot"],
"excludeKeywords": ["vacancy", "job opening"],
"languages": ["en", "de"],
"feeds": [
"https://techcrunch.com/feed/",
"https://news.google.com/rss/search?q=%22Acme%20Robotics%22&hl=en-US&gl=US&ceid=US:en"
],
"lookbackHours": 24,
"onlyNew": true,
"stateStoreName": "acme-brand-monitor"
}

Example input: Dutch news about housing and the cabinet

Native keywords for the Dutch feed, English terms for GDELT, and a language filter so GDELT returns Dutch sources only:

{
"keywords": ["kabinet", "woningmarkt"],
"gdeltKeywords": ["housing market", "Dutch cabinet"],
"languages": ["nl"],
"countries": ["NL"],
"feeds": ["https://feeds.nos.nl/nosnieuwsalgemeen"],
"stateStoreName": "nl-politics-monitor"
}

Output

One dataset row per article. The Overview view shows date, title, link, source, keywords, language, snippet, where it was found and whether it is new.

{
"title": "OpenAI safety employee resigns, claiming the company's 'culture is broken'",
"url": "https://techcrunch.com/2026/10/03/openai-safety-employee-resigns-claiming-the-companys-culture-is-broken/",
"sourceDomain": "techcrunch.com",
"publishedAt": "2026-10-03T16:30:01.000Z",
"language": "en",
"matchedKeywords": ["AI"],
"snippet": "By his own admission, David Robinson is \"something of a cliché\": an employee at a leading AI company who issues a dire warning while resigning from their job.",
"source": "https://techcrunch.com/category/artificial-intelligence/feed/",
"isNew": true,
"sourceName": "AI News & Artificial Intelligence | TechCrunch",
"sourceCountry": null,
"imageUrl": null,
"matchedIn": "title/snippet",
"alsoFoundIn": [],
"articleId": "f143fce070e10faa",
"collectedAt": "2026-10-03T20:08:56.736Z"
}
FieldMeaning
title, urlArticle headline and link (as published; Google News RSS items keep their news.google.com link)
sourceDomainPublisher domain (bbc.co.uk, nos.nl)
publishedAtPublish time in ISO 8601 UTC (GDELT: the time GDELT first saw the article)
languageISO 639-1 language code when known
matchedKeywordsYour keywords found in the title/snippet. For GDELT matches in the article body, the searched keyword(s) when unambiguous (see matchedIn)
snippetShort summary from the feed (max 300 characters). Always null for GDELT, which provides no summary.
sourcegdelt or the feed URL the article came from
isNewtrue if this article was never delivered by this monitor before
sourceCountry, imageUrl, sourceNameExtra metadata when available
matchedIntitle, title/snippet or article text (GDELT)
alsoFoundInOther sources that had the same story (merged duplicates)
articleId, collectedAtStable ID (from the canonical URL) and collection time

A SUMMARY record in the run's key-value store shows the counts (found, filtered, duplicates, already seen, delivered, charged), the exact GDELT query and status (requests, retries, errors), the status of each feed, and all warnings.

Scheduling (monitoring)

  1. Save your input as a task (one task per brand or topic) and give each task its own stateStoreName.
  2. Console -> Schedules -> create a schedule (for example every hour, or daily at 07:00) and add the task.
  3. Add an integration to the task: Slack, email, Google Sheets, Zapier, Make, n8n or a webhook on "Run succeeded" to receive the new rows.

How "new" works: after an article is delivered, its canonical-URL ID and normalized-title ID are stored in the named key-value store. The next run skips those, so the same story under a different URL (for example a Google News link and the publisher link) is not reported twice. Articles cut off by maxArticles or by your max charge are not marked as seen, so a later run delivers them. Seen IDs are kept for at least 30 days. To start over, delete the store or use a new stateStoreName. Set onlyNew to false to get every match, with isNew on each row.

Tip: keep lookbackHours well above your schedule interval (the default 48 h suits hourly and daily runs). GDELT sometimes publishes articles late, and the seen-store makes sure you never get duplicates.

Pricing

Pay per event: $0.001 per new article delivered (article event, $1.00 per 1,000 new articles).

You getPrice
A new article row (isNew: true)$0.001
Articles you already received (re-delivered with onlyNew: false)free
Duplicates, filtered or excluded articles, failed feeds, GDELT outagesfree
A scheduled run that finds nothing newno article charges

Examples: a daily brand monitor that finds 20 new articles costs about $0.02 a day (~$0.60 a month). A topic feed with 500 new articles a day costs about $0.50 a day. The Actor checks your maximum cost per run before delivering each batch and stops cleanly when it is reached. Undelivered articles stay unseen and come in the next run.

Limitations

  • GDELT rate limits and outages. GDELT allows about one request every 5 seconds per IP address and is often slow (10-20 s per response). Shared IPs can get HTTP 429. The Actor retries with backoff for up to gdeltMaxWaitSecs (default 40 s) and then continues with feed articles only. The run's SUMMARY and log show it. Raise gdeltMaxWaitSecs or set a proxy if GDELT matters more than speed.
  • GDELT returns at most 250 articles per run (newest first) and covers the last 3 months. It normally updates every 15 minutes, but its index sometimes lags. During testing on 2026-10-03, the newest GDELT article was about 34 hours old, so a 24 h window returned nothing from GDELT. The default lookbackHours is therefore 48. The SUMMARY shows gdelt.newestSeenAt.
  • GDELT relevance: GDELT matches the keyword anywhere in the (translated) article text, including sidebars and related-article links, so some GDELT rows are only loosely related. Feed rows always mention the keyword in the title or summary.
  • GDELT searches English translations. GDELT machine-translates non-English news into English and searches only the translation (it dropped native-language search). Dutch keywords like kabinet find nothing there. Put English terms in gdeltKeywords and use languages to keep Dutch sources. Titles stay in the original language. When GDELT returns zero articles, the run log says so.
  • GDELT keywords: keywords shorter than 3 characters (like "AI") and wildcards are not supported by GDELT. They are still used for feeds and titles, and the log says so. The country filter applies to GDELT only.
  • Only title, snippet and link are stored. The Actor never downloads or stores full article bodies and does not extract emails or personal data. Feed items are matched on their title and summary only. GDELT matches the full text on its side and gives no snippet.
  • No Google scraping. Google News works only through RSS search URLs you paste as a feed. Their links point to news.google.com redirects.
  • Paywalls: headlines and links from paywalled sites appear, but the content behind the paywall is not accessed.
  • Deduplication uses canonical URLs and normalized titles. Rewritten versions of a story with different headlines count as separate articles.
  • Feed language comes from the feed's <language> tag. Feeds without one are not removed by the language filter.

FAQ

Do I need a GDELT or Google API key? No. GDELT is free and public, and feeds are public.

Can I monitor only RSS feeds? Yes: add feeds and turn off useGdelt. Without keywords, every new feed item is returned. That makes it an RSS-to-dataset monitor.

Why does a GDELT row have empty matchedKeywords? GDELT matched one of several keywords somewhere in the article text, not in the title, and does not say which. matchedIn is then article text (GDELT).

How do I get alerts? Schedule a task and add a Slack, email or webhook integration for successful runs. Only new articles are in each run's dataset.

Quiet runs

When a scheduled run finds nothing new, the dataset gets one free row with type: "status" and status: "no_new_articles", so you can see that the run happened. Set Status row when nothing is new (statusRowWhenEmpty) to false if you only want article rows.