Company & Keyword News Monitor: New Articles, Deduped avatar

Company & Keyword News Monitor: New Articles, Deduped

Pricing

from $1.20 / 1,000 story returneds

Go to Apify Store
Company & Keyword News Monitor: New Articles, Deduped

Company & Keyword News Monitor: New Articles, Deduped

Watch companies and keywords in world news. Get only new articles since your last run, real publisher links, one row per story across outlets, and event tags. GDELT + your RSS feeds.

Pricing

from $1.20 / 1,000 story returneds

Rating

0.0

(0)

Developer

Southern Data

Southern Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Security

Limited permissions

Share

Watch companies, competitors and keywords across world news. Each run returns only the stories that are new since your last run. The same story from many outlets becomes one row, links go straight to the publisher, and every run gives you the same 25 spreadsheet-ready columns.

Typical uses: competitor monitoring ("Acme" + "outage" / "lawsuit" / "complaints"), PR and brand mentions, funding / layoffs / acquisition triggers for sales, and keyword alerts for a newsletter.

Read this first: what it is and what it isn't

  • This is not a Google News scraper. Google allows its News RSS feeds only "within a personal feed reader for personal, non-commercial use", and scraping Google News pages gets blocked (that's the main complaint about Google News scrapers). This actor uses sources that permit this use and keep working:
    1. The GDELT Project: an open index of world news (tens of thousands of outlets, 50,000–110,000 English articles a day, plus ~150,000 a day translated from ~65 languages). It is free to use with attribution, so every row carries an attribution column. Keep it when you republish.
    2. Your own RSS/Atom feeds (publishers, company newsrooms, blogs). It can also find a company's own newsroom feed from its domain.
    3. Hacker News (optional).
  • Coverage is GDELT's, not Google's. Most news sites are included, but some big outlets block GDELT's crawler or appear rarely (in our tests, a 24-hour search for "China" limited to reuters.com, bbc.co.uk, bbc.com and abc.net.au found a single ABC story). For must-have outlets, add their RSS feeds in feedUrls.
  • Delay: about 15–60 minutes. GDELT publishes a file every 15 minutes, and an article usually shows up 15–60 minutes after it appears. For GDELT rows, publishedAt is the time GDELT first saw the article (dateType = first_seen_by_gdelt), not the publisher's own timestamp. Feed and Hacker News rows carry the real publication time (dateType = published).
  • Matching is on headlines and links, plus organisations named in the body. It isn't a full-text keyword search:
    • Keywords are matched in the headline and the link (and in feed summaries).
    • Companies are also matched when GDELT lists them among the organisations named in the article text, if they're named at least twice (minArticleMentions, default 2). These rows show matchedIn = "article text". They are the most tangential, so filter on matchedIn if you only want headline mentions, or turn searchArticleEntities off.
  • Keywords match literally. "raises" also finds "raises alarm", and "down" finds "breaks down". Prefer phrases ("funding round", "data breach", "outage"), use excludeKeywords, or filter on the eventTypes column.
  • No article text. You get the headline, link, date, outlet, share image and (for feeds) the publisher's own summary. Paywalled content is not read.
  • One run covers at most 7 days. Run a longer history week by week (dateFrom / dateTo). History goes back to 19 Feb 2015.
  • A full 7-day backfill takes longer (about 10–16 minutes for 672 GDELT files). A daily or hourly monitor run usually finishes in seconds to a few minutes.
  • Some feeds refuse automated readers (one company newsroom answered HTTP 500 in our tests). Failed feeds are listed in the SOURCES record and are never charged.

How "new articles only" works

mode = "new_articles" (the default) remembers which stories and which GDELT hours each monitor has already handled. It keeps that memory in a named key-value store (monitorName, or one per saved task).

  • First run: returns the last lookbackHours (default 24).
  • Every later run: continues from where the previous one stopped. You only get (and pay for) stories you haven't seen, and an hour of news is never scanned twice.
  • Same story, new outlet: a story you already received doesn't come back because one more outlet picked it up.
  • Fresh start: use a new monitorName.

Schedule it hourly, daily or weekly. The total cost is about the same, because you pay per hour of news scanned, not per run.

mode = "all_articles" returns everything in a window: dateFrom / dateTo, or the last lookbackHours.

  • Dates can be plain dates (UTC), date-times or relative times ("3 days").
  • A plain dateTo includes that whole day. From 2026-10-20 to 2026-10-21 covers 48 hours.

Input example

{
"companies": ["Atlassian (atlassian.com)", "Asana", "Meta | Facebook"],
"keywords": ["outage", "data breach", "layoffs"],
"matchLogic": "any",
"mode": "new_articles",
"monitorName": "competitor-news",
"lookbackHours": 24,
"sources": ["gdelt", "feeds"],
"feedUrls": ["https://techcrunch.com/feed/"],
"excludeKeywords": ["stock price", "shares sold"]
}
  • Companies: a name, a domain, both ("Acme Corp (acme.com)"), or variants separated by |. Legal suffixes (Inc, Ltd, Corp…) are ignored when matching.
  • Competitor complaints: set matchLogic: "company_and_keyword". Then the company must be in the headline or link (or the article is on its own site or feed), and so must one of your keywords. A passing mention of the company in the body isn't enough there.
  • Other languages: set languages: ["de","fr"] (or "any"). Matching uses GDELT's English translation, but headlines stay in the original language.
  • Filters: onlyDomains and excludeDomains, plus maxArticles (newest first; in a monitor, the rest wait for the next run).

Output (25 columns, same order every run)

ColumnMeaning
storyKeyStable id of the story (same across runs)
title, url, sourceDomainHeadline, publisher link (never a Google redirect), outlet
publishedAt, dateType, ageHoursDate (see above), what kind of date it is, and its age at run time
languageTwo-letter language of the article
matchedCompanies, matchedKeywords, matchedInWhat matched and where: title, link, summary, article text, company site, company feed, your feed
eventTypesTags from the headline: funding, acquisition, ipo, earnings, layoffs, hiring, expansion, product, partnership, leadership, legal, regulatory, security, outage, complaints
toneGDELT tone score (negative = negative coverage)
outletCount, otherOutlets, otherUrlsHow many outlets ran this story, and the others' domains and links (; -separated text, so CSV columns stay fixed)
summaryFeed summary (feeds only)
imageUrlShare image
source, feedUrl, hnUrlgdelt / feed / hackernews, the feed it came from, the Hacker News discussion
isNew, firstSeenAtMonitor mode: true for stories new to this monitor, and when the monitor first saw them
attributionSource credit (GDELT requires citation)
scrapedAtRun time

Each run also writes:

  • RUN_SUMMARY: counts, filters, what was not returned and why, and charged events.
  • SOURCES: every source read, files, errors and coverage.

Pricing (pay per event)

EventPriceWhen
Story returned$0.0015Per row. Duplicates and filtered-out articles are free. A monitor only returns new stories
Hour of world news scanned (English)$0.0006Per hour of GDELT's English stream scanned. At least 1 per run when the stream is read; a monitor never scans the same hour twice
Hour of world news scanned (other languages)$0.0015Only when you add languages other than English
RSS/Atom feed read$0.0003Per feed read successfully; failed feeds are free

Store discount tiers: free-plan and Bronze users pay the prices above. Silver gets 10% off and Gold (and higher) gets 20% off.

Examples:

  • A daily English monitor costs $0.0144 per day for news scanning, plus $0.0015 per new story. For example, 30 new stories a day comes to about $0.06 a day.
  • An hourly schedule costs the same per day as a daily one. Every run that checks GDELT is charged at least 1 news hour, even if GDELT has no new file since the previous run, so don't schedule more often than every 15 minutes (GDELT adds a file every 15 minutes). Hourly or daily is best.
  • Invalid input and the self-test cost $0.

To cap spending, set the run's maximum cost. The actor stops returning rows at the cap and tells you how many it didn't return.

Reliability

  • GDELT files are downloaded with retries and timeouts. A missing or not-yet-published file is skipped and reported, not guessed. If GDELT can't be reached at all, the run fails rather than return an empty "success", and nothing is charged for it.
  • Bad input (no companies or keywords, an unknown language, an impossible date window, only broken feed URLs, a Google News feed) ends with a clear message and costs $0.
  • A built-in self-test ({"selfTest": true}) runs offline checks of matching, de-duplication, dates, feed parsing and memory, plus live checks of each source. The developer runs it daily.

FAQ

Why not Google News? Its feeds are licensed for personal, non-commercial feed readers only, and scraping it gets blocked. A tool that breaks every few weeks isn't a monitor.

Do I get Google redirect links? No. Every link points to the publisher's own article.

Why did I get an article that doesn't mention my company in the headline? Its matchedIn is "article text": GDELT found your company named at least twice in the article. Raise minArticleMentions or switch searchArticleEntities off.

Can I republish the results? Headlines and links, yes, with the attribution column. Article content belongs to the publishers.