A daily news search becomes more useful when its results are structured. Instead of copying headlines into a spreadsheet, collect the headline, publisher, publication time and source link, then compare the new snapshot with yesterday's records.
This tutorial uses our Google News Search Actor on Apify. It is a small starting workflow for company monitoring, industry research and a manually reviewed news digest. It does not promise an exhaustive news archive or automatic factual verification.
Begin with one focused search
Choose a distinctive company name or a specific industry phrase. Common words can return irrelevant results, so inspect a small sample before collecting more. Google determines search interpretation and ranking.
Open Google News Search and paste this into the JSON input editor:
{ "queries": ["OpenAI"], "language": "en", "country": "US", "maxResults": 5 } Set a small spending limit, run the Actor, and open the Dataset. The basic output includes title, publisherName, publishedAt, googleNewsUrl and the query and edition metadata. JSON, CSV and Excel exports are available through Apify.
No Google login or external news API key is needed. An Apify account is needed to run the Actor, and an Apify token is needed when calling it through the API.
Check relevance before broadening the query list
Inspect the five results and open their source links. Are they about the company you intended? Are several publishers covering the same event? Are the source timestamps suitable for your report?
After that check, add competitor names or related topics to queries. maxResults is a global delivery limit, so it can be reached before every query has been processed. Use SUMMARY and ERRORS in the run's key-value store to distinguish empty results, skipped queries, duplicates and source errors. A process status of SUCCEEDED alone does not prove that every intended search was completed.
The requested language and country select a Google News edition. They do not establish an article's language, where an event happened, or the location of its readers.
Keep news links separate from optional enrichment
The default googleNewsUrl is a Google News article link. If your workflow needs a direct publisher article link, enable resolvePublisherUrls. If it needs available article text, enable includeFullText and keep maxEnrichedArticles small during testing.
These are best-effort enrichment steps. Publisher restrictions, unavailable pages and resolution failures can leave fields empty. Inspect publisherArticleUrl, publisherUrlStatus, fullTextStatus and the summary's enrichment warnings. A headline or RSS snippet is not the full article, and a failed enrichment should not be replaced with invented text.
Start with metadata only when you are building a source list. Enrich only when the extra content is necessary for the task, and check the current pricing and source restrictions before scaling.
Deduplicate snapshots before writing a digest
Download the Dataset JSON as news.json. This script compares article links with a local baseline and writes new rows to new-news.json. The first run establishes the baseline without reporting every old result as a new alert:
import json from pathlib import Path with open("news.json", encoding="utf-8") as source: articles = json.load(source) state_path = Path("seen-news-urls.json") initialized = state_path.exists() seen = set(json.loads(state_path.read_text(encoding="utf-8"))) if initialized else set() new_articles = [] for article in articles: url = article.get("googleNewsUrl") if not url or url in seen: continue if initialized: new_articles.append(article) seen.add(url) Path("new-news.json").write_text( json.dumps(new_articles, ensure_ascii=False, indent=2), encoding="utf-8" ) state_path.write_text(json.dumps(sorted(seen)), encoding="utf-8") print(f"New links: {len(new_articles)}; baseline created: {not initialized}") This is link-level deduplication, not story-level clustering. Two publishers may cover the same event under different URLs, and a URL can change. For a shared production workflow, store the baseline in a persistent database and coordinate concurrent runs rather than sharing this local file between workers.
Turn the snapshot into a reviewed daily workflow
Schedule a bounded run through Apify, store its Dataset and diagnostics, then compare the collected links with your baseline. Group related stories for a digest and keep a source link with each entry. Review important summaries against the publisher's article before sharing them.
If you use n8n or Make, call the standard Apify API using stored credentials, wait for the run to finish, and read its Dataset and diagnostics. Do not start a second paid run merely to fetch the first run's rows. See the Apify API documentation for run and storage endpoints. This workflow does not depend on a dedicated Google News community node.
The source is a bounded snapshot. Daily-search options can help divide a supported time window, but cannot establish complete historical coverage. Overlapping searches can repeat articles; different editions can return different selections. Record the query, collection time and configured limits next to your results.
Budget for the first experiment
As checked on 23 October 2026, the Actor lists article-event rates of $0.35 to $0.50 per 1,000 delivered articles, depending on the Apify tier, plus platform usage. Five metadata rows have an article-event component of at most $0.0025 at those rates; that is not a total run-price quote. Check the current Pricing tab and actual sample-run costs before adding more searches or enrichment.
Start with five headlines about one company. Confirm relevance, preserve source links, and add scheduling only after the small collection answers a useful question.

