Daily news archive for tracked keywords in Google Sheets

Every weekday at 7am, log every fresh news article matching your tracked keywords into a Google Sheet, with no duplicates and no manual work.

Deterministic Code
NewsAPIGoogle SheetsMarketingOperationsResearch & MonitoringDaily DigestsData Sync

Build me a deterministic daily news archive pipeline as a code workflow. No AI step, no summarization, no branching by content. The whole thing is read-config, fetch, dedupe by URL, append.

Trigger: cron, every weekday (Monday through Friday) at 7:00am in my local timezone.

The workflow targets one Google Sheet with two tabs: a Keywords tab and an Articles tab. The spreadsheet ID and both tab names should be exposed as workflow configuration so I can point it at any sheet without code changes.

Step 1: Use Google Sheets Get Values on the Keywords tab to read every keyword row. Each row has a keyword in column A and optional language (column B) and sources (column C) filters. Treat empty cells as 'no filter'.

Step 2: For each keyword row, call NewsAPI Search Everything with q set to the keyword, from set to 24 hours ago (ISO 8601), to set to now, sortBy set to publishedAt, and pageSize 100. If the row has a language value, pass it as the language parameter. If the row has a sources value (comma-separated), pass it as the sources parameter. Collect all returned articles across all keywords, tagging each article with the keyword that found it.

Step 3: Use Google Sheets Get Values on the Articles tab to read the existing url column. Build an in-memory Set of these URLs to use as the dedupe set.

Step 4: For each fetched article whose url is not already in the dedupe set, build a row with these columns in this order: timestamp (workflow run time, ISO 8601), keyword, source.name, author, title, url, publishedAt, description. Skip articles missing a url. Within this run, also dedupe by url so the same article isn't added twice if two keywords both match it.

Step 5: Use Google Sheets Append Values to write the new rows to the Articles tab in a single batched call with valueInputOption USER_ENTERED so URLs render as clickable links. If there are zero new rows, skip the append entirely and exit cleanly.

Error handling: if NewsAPI returns a non-ok status for a keyword, log it and continue with the remaining keywords rather than failing the whole run. Respect NewsAPI rate limits with a small delay between keyword calls if the keyword list is long.

Output: a self-updating research archive in Google Sheets that the team can sort, filter, and pivot. No notifications, no Slack post, no summary; the sheet is the deliverable.

Additional information

What does this prompt do?
  • Runs every weekday at 7am and pulls the last 24 hours of news coverage for each keyword you track.
  • Reads your list of keywords from a Google Sheet so anyone on your team can add or remove topics without touching the workflow.
  • Skips articles already in your sheet so you never get duplicate rows, even when the same story is picked up by multiple outlets.
  • Appends a clean row per new article with timestamp, keyword, source, author, title, link, publish time, and description, ready to sort, filter, and pivot.
What do I need to use this?
  • A NewsAPI account (the free Developer plan works for light tracking; paid plans give live articles and bigger quotas).
  • A Google account with edit access to the spreadsheet you want to use as your archive.
  • A Google Sheet with two tabs: a Keywords tab (one keyword per row, with optional language and source columns) and an Articles tab to hold the archive.
How can I customize it?
  • Change the schedule from weekday 7am to whatever cadence fits your team (hourly, weekends, end of day).
  • Add columns to the Keywords tab to narrow each topic by language or specific publishers, and the workflow will respect them per row.
  • Adjust which fields land in the Articles tab if you want extra columns like category, country, or a custom tag.

Frequently asked questions

Will I get duplicate rows if the same article shows up on multiple days?
No. Before writing, the workflow reads the existing links in your Articles tab and skips anything that is already there. Each story lands in your sheet exactly once.
Do I need any AI or writing step for this to work?
No. This is a pure data pipeline. It reads your keywords, fetches matching articles, removes duplicates, and writes rows. Nothing is summarized or rewritten, so the archive stays faithful to the source.
Can different keywords use different languages or publishers?
Yes. Add language or source filters as columns next to each keyword in the Keywords tab and the workflow will apply them on a per-keyword basis.
What happens on weekends or holidays?
The default schedule only runs Monday through Friday at 7am, so weekends are skipped. You can change the schedule to include weekends, run multiple times a day, or pause it during holiday weeks.
Does this work on the free NewsAPI plan?
Yes for non-commercial tracking. The free Developer plan caps you at 100 requests per day and delays articles by up to 24 hours. If you need live coverage or commercial use, upgrade to a paid plan.

Stop chasing news coverage across a dozen tabs.

Connect NewsAPI and Google Sheets once, and Geni quietly builds your team's research archive every weekday at 7am.