Google News Scraper & AI Company Signals avatar

Google News Scraper & AI Company Signals

Pricing

from $3.00 / 1,000 articles

Go to Apify Store
Google News Scraper & AI Company Signals

Google News Scraper & AI Company Signals

Google News scraper with AI company signals: articles for any company, keyword or topic with publisher URLs, AI event type and sentiment, stories across outlets, momentum. $3 per 1,000 articles. Add-ons: trigger events with facts (funding, M&A), full text, AI briefs, share of voice, Slack alerts.

Pricing

from $3.00 / 1,000 articles

Rating

0.0

(0)

Developer

Steadywren

Steadywren

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Google News articles for a company watchlist, keywords or topics, with real publisher URLs and AI company signals: event type (funding, acquisition, earnings, layoffs...), sentiment toward your company, stories grouped across outlets and what changed since your last run. $3 per 1,000 articles, URL decoding and AI included.

Google News Scraper & AI Company Signals - example output

What you get

Three tables in the Output tab:

TableOne row perPrice
Articles (default dataset)article$0.003
Storiesstory with at least one delivered articlefree
Company digestscompany or search query per run$0.005
  • Articles: articleId, title (headline without the outlet), source, sourceDomain, publisherUrl (decoded), googleUrl, url (publisher URL, or the Google link when it could not be decoded), publishedAt, snippet, feedType (company, query, topic), company, query, eventType, targetRole (main, mentioned, unrelated), targetIsMain, sentimentTowardTarget (-1..1), sentimentLabel (negative, neutral, positive), entities (other organisations in the headline), storyId, isNew, firstSeenAt, edition (US:en), titleEnglish, scrapedAt; with the text add-on also body, markdown, author, wordCount, bodyStatus.
  • AI event type + sentiment toward the company: each headline gets an eventType from a fixed list of 12 (funding, acquisition, earnings, stock-analyst, layoffs, legal-regulatory, product, executive, partnership, security-incident, expansion, other), a targetRole (is the company the subject, only mentioned, or is the name about something else - a person called "Stripe", a cycling "peloton") and a sentimentTowardTarget that judges the effect on your company, not the tone of the writing. A falling stock is negative, a raised price target positive.
  • Stories for search results: Google groups related coverage only on its topic pages; a search returns a flat list where one earnings release can be 40 articles. The Actor groups search results into stories (the same real-world event across outlets) with an AI pass, so you see 1 story with 22 outlets instead of 40 rows. Story fields: storyId, company / query, headline (the earliest article), eventType (most common among its articles), articles, outlets, outletDomains, firstSeenAt, lastSeenAt, isNewStory, outletsAddedSinceLastRun, isBreaking, sentimentTowardTarget, articleUrls, edition, brief (add-on).
  • Momentum and a company digest: on a schedule every story carries isNewStory, outletsAddedSinceLastRun and isBreaking; every company gets one digest row per run: company, timeRange, articles, mainArticles (the company is the subject), eventCounts (every event type, counted over main articles), netSentiment, positiveArticles, negativeArticles, stories, newStories, breakingStories and topStories (top 3 each), a 0-100 signalScore, signalWindow, previousRunAt, edition, briefing (add-on).
  • Past the 100-result cap: Google News returns at most 100 articles per search. When you ask for more, the Actor splits the time range into date windows (up to 500 articles per company).

Use it for B2B sales triggers (funding, expansion and new executives at your target accounts, every morning), investor and analyst research (company news by event type and tone, with earnings and stock chatter told apart from real events), PR (how far a story spreads, which outlets picked it up since yesterday) and AI agents or dashboards (clean, pre-labelled news rows instead of raw headlines).

Sample output

Duolingo, captured 2026-11-04 (AI labels from gpt-5-mini, trimmed):

{
"articleId": "CBMidEFVX3lxTE5jNDZtS1JfUUhIa0VMQXJ4VVNPODlibW5kTDg2cDNzNG1uVlRoUEFtOHRPUFVCOGhvcVUwMzJlcEptdVdVZ2NLUFZLMFcwa2dfQ2Z6aklXV09xNVBpOWs3MFZIcldMb2pnTHhXblRLWVNGR1Q0",
"title": "Small Business Spotlight: Duolingo",
"source": "PA Department of Community & Economic Development (.gov)",
"sourceDomain": "dced.pa.gov",
"publisherUrl": "https://dced.pa.gov/paproudblog/small-business-spotlight-duolingo/",
"url": "https://dced.pa.gov/paproudblog/small-business-spotlight-duolingo/",
"publishedAt": "2026-10-30T07:00:00.000Z",
"snippet": null,
"feedType": "company",
"company": "Duolingo",
"query": null,
"eventType": "other",
"targetRole": "main",
"targetIsMain": true,
"sentimentTowardTarget": 0,
"sentimentLabel": "neutral",
"entities": [],
"storyId": "s-5ea6909d05fa",
"isNew": true
}

More labels from the same test set: "Duolingo, Inc. (DUOL) Q3 Earnings Miss Estimates" -> earnings, -0.6; "Nvidia's $12.9 billion Hugging Face deal draws DOJ scrutiny" -> legal-regulatory, -0.6, entities Hugging Face, DOJ; "Why Is DUOL Stock Surging Over 11% Overnight Today?" -> stock-analyst, +0.6.

Story

Shopify, 7 days to 2026-11-04 (trimmed): the AI put 40 of the 100 search results into one story.

{
"company": "Shopify",
"headline": "Watch Shopify Revenue Miss; Yum Brands Jumps on Taco Bell Sales | Stock Movers",
"articles": 40,
"outlets": 22,
"outletDomains": ["cnbc.com", "investors.com", "bloomberg.com", "finance.yahoo.com", "barrons.com", "qz.com"],
"firstSeenAt": "2026-11-03T00:00:00.000Z",
"lastSeenAt": "2026-11-03T21:08:23.000Z",
"isNewStory": true,
"outletsAddedSinceLastRun": null
}

How much does it cost?

$3 per 1,000 articles. Example: a daily run for 5 companies with 50 articles each = 250 articles x $0.003 + 5 company digests x $0.005 = $0.75 + $0.025 = $0.775 per run.

  • $0.003 per article; publisher URL decoding, AI labels and story grouping are included.
  • $0.005 per company digest: one per company or search query per run, only when it has articles.
  • Stories are free. No start fee; platform compute is included.
  • Paid add-ons cost extra only when switched on and only for what they deliver - free until 19 November 2026 (prices in "Paid add-ons" below).
  • Max articles in total and your spending limit cap the cost. The Actor never decodes or sends to the AI more articles than your limit lets it deliver, and articles it cannot deliver are never charged.

How to use

  1. Enter Companies (watchlist), Search queries or Topic URLs (empty = Duolingo as an example).
  2. Set the Time range (or From date / To date) and Max articles per company / query / topic.
  3. Click Start, then download JSON, CSV or Excel from the Output tab.

Main filters: time range or dates, country and language (or several countries), max articles, only new articles.

Example input: {"companies": ["Shopify", "Nvidia"], "timeRange": "7d", "maxArticlesPerCompany": 30}.

Use with AI assistants (MCP)

Connect this Actor to Claude, ChatGPT or any MCP client: https://mcp.apify.com?tools=steadywren/google-news-signals-scraper

Try:

  • "Get this week's Google News for Stripe, Adyen and Klarna and list every funding, acquisition or layoff story with its sentiment."
  • "Which of Shopify, Wix and BigCommerce had the most negative news in the last 7 days, and why?"

How it compares

Checked against the READMEs of 16 Google News Actors in Apify Store on 2026-11-03.

This ActorOther Google News scrapers in Apify Store
AI event type per article (funding, M&A, earnings, layoffs...)yesnot claimed
Sentiment toward the company you watchyesnot claimed (some call their data "ready for" sentiment)
Story grouping for search resultsyesnot claimed (some group topic feeds only)
Story momentum between runs + one signal row per companyyesnot claimed
Publisher URL decodedyes, includedseveral, some for +$0.50 - $1 per 1,000
Price per 1,000 articles$3, no start fee$1.50 - $5 (several add a start fee)

Each add-on is an input switch, off by default, and is charged only for what it delivers. The base features above stay included in the article price. Launch offer: the add-on prices below start on 19 November 2026 - until then every add-on is free.

Add-on (input)What you getPrice
Trigger events (extractTriggers)Sales triggers with facts in the Trigger events table: funding (amount, currency, round, lead investors, valuation), acquisitions (acquirer, acquired company, deal value), expansion (location), layoffs (count, share of staff), partnerships (partner), product launches (product), executive changes (role, appointed/departed)$0.01 per trigger
Full article text (fetchBodies)body (plain text), markdown (RAG-ready), author, wordCount, bodyStatus on each article, from the publisher page$0.001 per article with text
AI story briefs (storyBriefs)brief: 2-3 sentences per story - what happened, key numbers, why it matters. Stories with 2+ articles or a fetched text; with trackChanges on (default), a story an earlier run already delivered is briefed again only when new outlets picked it up$0.01 per brief
AI company briefing (companyBriefing)briefing on the company digest: top events, tone and how it changed since the last run, risks$0.02 per company per run
Share of voice (shareOfVoice, 2+ companies)Share of voice table + SHARE_OF_VOICE record: each company's share of coverage, tier-1 outlet share, tone, event mix, change since the last run$0.02 per run
Alerts (alertWebhookUrl)One Slack or webhook message per run when a company's signalScore reaches your threshold or a trigger event of the chosen types appearsfree
Several countries (countries)The same watchlist in up to 10 Google News editions (US, GB, DE, FR, JP...), each with its own articles, stories and digest; non-English titles get an English titleEnglish (with AI signals on)normal prices

Max story briefs per company / query / topic caps the briefs; your spending limit caps everything - an add-on output that no longer fits is left out, never charged. Example: the 5-company run above with 4 new trigger events and a company briefing each costs + $0.04 + $0.10 = $0.915 per run.

Trigger events

triggerId, type (funding, acquisition, expansion, layoffs, partnership, product-launch, executive-change), company / query, edition, summary (one sentence), facts (amount, currency, round, leadInvestors, valuation, acquirer, acquiredCompany, dealValue, location, layoffCount, layoffSharePct, partner, product, executiveRole, executiveName, executiveChange - only the facts of its type, null when the text does not state them), confidence (0-1), storyId, headline, url, publishedAt, sources (outlet, url, date of each article). One row per new story: with trackChanges on (default), a story already delivered by an earlier run of the same watchlist is not extracted (and charged) again. When two stories of one run report the same event (same type and main fact: amount, acquired company, location, partner, product, executive), only the widest-covered one is delivered and charged.

What counts as a trigger event? Only stories whose AI event type is funding, acquisition, expansion, layoffs, partnership, product or executive, where your company is the subject, are sent to the extraction step. The model then keeps only real events in which your company itself takes part and states only facts written in the headlines (and the article text when fetchBodies is on): rumours, stock moves, analyst notes, and governments, counties, schools or charities "acquiring" or "appointing" are rejected. Executive names are kept only together with the company role the article names. How accurate is it? We checked every trigger the final prompt delivered for 18 companies it had never been tuned on (HSBC, Toyota, Samsung, Sony, CrowdStrike, Monzo and others, one week of news, one annotator): 30 of 35 (86%) were real events of the right type, and in all 30 the facts matched the headlines. The misses were sponsorships, a pricing announcement, motorsport team news and a vague "plans" story. Expect roughly one trigger in 7 to be a weaker signal than you want; confidence and sources help you check fast.

Full article text

With fetchBodies the Actor opens each decoded publisher URL once (at most 4 pages at a time, one request per outlet per second, no cookies, no proxies, no login) and reads the article from the page's structured data (JSON-LD articleBody) or its main paragraphs. bodyStatus says what happened: ok (text delivered and charged), paywall (the page's structured data says the article is not free - even when the text is hidden in the page for search engines - or it shows only a teaser behind paywall markup), blocked (the site refused, asked for consent or served a bot check), no-text (no article text on the page), error, no-url (the publisher URL could not be decoded), skipped (your spending limit). Only ok is charged. Texts longer than 50,000 characters are cut. How many articles get a text depends on the outlets: in our test run (Shopify, Wix, BigCommerce, US and German editions, 62 articles) 29 got a text (47%); finance portals that block bots or show quote pages (Investing.com, Yahoo Finance quote pages, Seeking Alpha) gave blocked, error or paywall and were not charged.

Share of voice

company, edition, timeRange, articles, sharePct, atCap, mainArticles, netSentiment, eventCounts, tier1Articles, tier1SharePct, stories, previousSharePct, shareChangePct. Tier-1 outlets: Reuters, Bloomberg, FT, WSJ, CNBC, New York Times, Washington Post, AP, BBC, The Guardian, The Economist, Forbes, Fortune, Business Insider, MarketWatch, Barron's, Axios, TechCrunch, The Verge, Wired, The Information, CNN, Nikkei, Handelsblatt, Les Echos.

Shares count the articles the run delivered. When a company reaches Max articles per company / query / topic, its real coverage is larger than counted: such rows have atCap: true and the report has a warning. Raise it (up to 500) for a fair comparison.

Alerts and several countries

At the end of the run the Actor sends one POST with all alerts: a Slack message for hooks.slack.com URLs, otherwise JSON (

{"source", "runId", "scrapedAt", "alerts": [{"kind", "company", "edition", "signalScore", "triggerType", "text", "url"}]}
). It retries 3 times on 5xx/429/network errors; a failed webhook never fails the run and is reported in RUN_SUMMARY. The URL is a secret input, and only its host appears in logs.

With countries (e.g. ["US", "GB", "DE"]) every company, query and topic runs once per edition, with that edition's language. Each edition has its own history, stories, digest (edition field on every row) and share-of-voice comparison. With AI signals on, titles of non-English editions get an English translation in titleEnglish (the AI labels read the original title).

Example with add-ons: {"companies": ["Stripe", "Adyen", "Klarna"], "timeRange": "7d", "maxArticlesPerCompany": 50, "extractTriggers": true, "storyBriefs": true, "shareOfVoice": true, "alertWebhookUrl": "https://hooks.slack.com/services/..."}.

Monitor daily

Schedule the Actor (Apify Schedules) with the same watchlist and keep Track changes between runs on; turn on Only new articles to receive (and pay for) only articles an earlier run did not deliver.

With tracking on, the Actor saves the watchlist's articles and stories in a key-value store named google-news-signals-state in your account, under a key computed from your companies, queries, topics, country and language (the order and case of names do not matter; the key is in RUN_SUMMARY.stateKey). A story keeps its storyId across runs when it contains an article seen before. outletsAddedSinceLastRun counts outlets that were not in the story last time; a story is isBreaking when it gained 3 or more outlets, or is new with 3 or more (on the first run only when its latest article is from the last 24 hours). History older than 30 days is dropped. Change the watchlist and you start a fresh history.

How is signalScore computed? Each story gets a weight by its event type: funding, acquisition, layoffs, security incident 3; legal/regulatory 2.5; executive, expansion 2; partnership, earnings 1.5; product 1; stock/analyst 0.5; other 0. raw = the sum over the company's stories that are new since the last run of weight x log2(1 + outlets). On the first run (or with tracking off) there is no last run, so only stories with an article in the last 24 hours count; signalWindow says which rule was used (since-last-run or last-24h), and signalScore = round(100 x (1 - e^(-raw / 10))). One funding story covered by 3 outlets gives 45; quiet weeks with only stock chatter stay near 0. It is null when the AI was off.

FAQ

Is it legal? The Actor collects publicly available data only, without login and without personal data of private individuals. Check the site's terms for your use case. With fetchBodies it reads publicly available article pages and returns the byline (author) as the publisher prints it; nothing behind a login or paywall is fetched.

What if Google News changes or a run fails? The run fails with a clear error instead of returning empty results, and you are not charged for results it did not deliver. An empty search (no Google News articles for the names in the range) finishes green with a message and nothing charged; 0 articles because of a block or a broken feed fails the run. If Google rate-limits the run (403/429/503), the Actor waits and retries up to 3 times (1, 2, 4 s, or Google's Retry-After up to 30 s); if Google keeps refusing, it stops making Google requests and delivers what it already has (undecoded articles get publisherUrl: null). If the very first request is refused, the run fails and nothing is charged. The run never fails because of the AI: unlabelled articles keep null AI fields and stories are grouped by title similarity. Each run's summary (articles, stories, digests, Google requests, decoded URLs, AI cost, add-on counts, messages) is in the Storage tab -> Key-value store -> RUN_SUMMARY.

Do I need proxies? Are there limits? No proxies are used. The Actor is polite: one feed at a time, at most 2 URL decodes in parallel, and Google requests start at least 0.5 s apart. It never solves captchas or changes its identity. Up to 500 articles per company (date windows past Google's 100 per search; a single day with more than 100 articles still stops at 100) and 10,000 per run.

How fresh is the data? Live at run time, from Google News of the chosen time range. The default input (Duolingo, 100 articles) took 94 s on Apify in our test run (2026-11-04).

How are the AI labels made, and how accurate are they? The model (OpenAI gpt-5-mini) reads only the headline with its outlet - not the article text - in batches of 20, with a fixed prompt and a fixed list of event types. On 136 reference-labelled headlines of 20 companies (one annotator) the event type agreed with the reference label in about 87% of cases and the sentiment label in about 82%; on the 38 of them that were labelled before the model saw them the numbers were 81% and 77%. Expect roughly one label in 8 to differ from what you would pick, most often other vs partnership/expansion when the company is only mentioned, and earnings vs stock-analyst for stock moves after results. Story groups were checked one by one on 3 companies: about 96% of the article pairs the AI put in one story really report the same event.

What is targetRole for? Name searches are noisy: "Peloton" also finds cycling races, "Zoom" generic video-call stories. unrelated marks articles where the name means something else (their event type is always other), mentioned marks articles where the company only appears. The digest counts events and sentiment over main articles only.

Why is publisherUrl sometimes null? Google links to its own redirect page; the Actor asks Google for the real URL (2 requests per article, cached between runs). In our tests about 2% of articles got no URL from Google. Those keep publisherUrl: null and url = the Google link.

Do topics work like searches? Topic feeds (https://news.google.com/topics/...) return Google's current stories for a section; the time range does not apply. Stories come from Google's own related coverage, and their outlets include the related links. The AI labels the event type; sentiment and targetRole are null because there is no target company, and there is no company digest for topics.

More from Steadywren

Input reference

FieldTypeDefaultDescription
companiesarray- (form prefilled with Duolingo)Companies (watchlist). Company names. Each is searched on Google News as an exact phrase ("Shopify"); the AI judges every headline against this name. With companies, queries and topics all empty the run watches Duolingo as an example.
queriesarray-Search queries. Free Google News searches (any keywords and Google operators, e.g. AI chips OR semiconductors). The AI judges headlines against the query text.
topicUrlsarray-Topic URLs. Google News topic or section URLs (https://news.google.com/topics/...). Stories come from Google's own related coverage; timeRange does not apply; no sentiment (there is no target company).
timeRangestring7dTime range. How far back to search (1h, 1d, 7d, 30d, 1y). Ignored when dateFrom or dateTo is set.
dateFromstring-From date. Optional first day (YYYY-MM-DD). Overrides the time range. Without To date: until today.
dateTostring-To date. Optional last day (YYYY-MM-DD), included. Without From date: the 7 days up to this day.
countrystringUSCountry. Two-letter country code of the Google News edition (US, GB, DE, IN...).
languagestringenLanguage. Two-letter language code of the edition (en, de, fr...). The AI prompts are written for English headlines.
countriesarray-Several countries (editions). Run the same watchlist in several Google News editions, e.g. US, GB, DE, FR or DE:de / BE:nl (country:language). Each edition gets its own articles, stories and digest (normal prices); titles of non-English editions get an English translation in titleEnglish (with AI signals on). Up to 10. Empty = the Country and Language above.
maxArticlesPerCompanyinteger100Max articles per company / query / topic. Newest articles kept per entry (1-500). Google gives at most 100 per search; above that the Actor splits the time range into date windows.
maxItemsinteger1000Max articles in total. Stop after this many articles in the whole run (1-10,000). You pay per article, so this also caps your cost.
resolveUrlsbooleantrueDecode publisher URLs. Turn Google's news.google.com links into the real publisher URL (2 extra requests per article, cached between runs). Included in the price.
aibooleantrueAI signals. AI event type (funding, acquisition, earnings, layoffs, lawsuits...), sentiment toward the company, entities and story grouping. Included in the price.
maxAiCostUsdnumber0.5Max AI cost per run (USD). Safety cap of the AI work per run (paid by us, not added to your bill; 0.05-2). When reached, the rest of the articles have empty AI fields.
trackChangesbooleantrueTrack changes between runs. Remember articles and stories of this watchlist: new articles, new stories, outlets added since the last run, breaking stories. Best with a schedule.
onlyNewArticlesbooleanfalseOnly new articles. Deliver only articles that an earlier run with the same watchlist did not deliver.
extractTriggersbooleanfalseTrigger events with facts ($0.01 per trigger). Sales trigger events of the watched companies with their facts: funding (amount, currency, round, lead investors, valuation), acquisitions (acquirer, acquired company, deal value), expansion (location), layoffs (count, share), partnerships (partner), product launches (product), executive changes (role; the person's name only when the article names them in that role). One row per new story in the triggers dataset, event trigger-event, $0.01 each.
fetchBodiesbooleanfalseFull article text ($0.001 per article). Fetch each publisher page and add the article text, clean Markdown (RAG-ready), author and word count. Paywalled or blocked pages get bodyStatus paywall/blocked and are not charged. Needs Decode publisher URLs on. Event article-text, $0.001 per article with text. Adds about 1 s per article.
storyBriefsbooleanfalseAI story briefs ($0.01 per brief). A 2-3 sentence AI brief per story (what happened, key numbers, why it matters) in the stories dataset. Only stories with 2+ articles or a fetched article text, widest coverage first; with Track changes on, a story an earlier run already delivered is briefed again only when new outlets picked it up. Event story-brief, $0.01 each.
maxBriefsPerTargetinteger10Max story briefs per company / query / topic. Caps the story-brief cost: at most this many briefs per watchlist entry per run (1-50).
companyBriefingbooleanfalseAI company briefing ($0.02 per company). A short written briefing per company per run (top events, tone and how it changed since the last run, risks) in the briefing field of the company digest. Event company-briefing, $0.02 each.
shareOfVoicebooleanfalseShare of voice report ($0.02 per run). Compare 2+ watched companies: share of coverage, tier-1 outlet share (Reuters, Bloomberg, FT, WSJ, CNBC...), tone, event mix and change since the last run. Dataset sov + record SHARE_OF_VOICE. Event sov-report, $0.02 per run.
alertWebhookUrlstring-Alert webhook URL (free). Slack incoming-webhook URL (hooks.slack.com) or any https webhook. One POST per run when a company's signal score reaches the threshold or a trigger event of the chosen types appears. Free.
alertMinSignalScoreinteger60Alert when signal score is at least. Signal score (0-100) that triggers a company alert.
alertTriggerTypesarrayevery typeAlert on trigger types. Trigger events (needs Trigger events on) that send an alert. Empty = every type.

Search keywords: google news scraper, google news, news monitoring, company news, news sentiment