How-to 15 min Beginner News

How to scrape Google News into Google Sheets

Pull Google News headlines by keyword and country, then land them as rows in a spreadsheet you already use. Three methods below — CSV import for a one-off, Apify’s Google Sheets Actor for a repeating job, and Apps Script if you want the sheet to refresh itself.

1 Create a free Apify account and open the Actor

EasyAPI scrapers run on Apify, not on easyapi.tools. Sign in at apify.com (the free plan includes monthly platform credits) and open Google News Scraper — Headlines by Keyword.

You will need two required inputs: query (the search term) and maxItems (how many headline rows to return). Optional filters: gl (Google country, e.g. us), hl (UI language, e.g. en) and time_period (past hour / day / week / month).

2 Run a small test (50 rows is enough)

Start with maxItems: 50 so you can see the schema before you spend. Listed price is $5.00 per 1,000 results plus a $0.09 Actor-start fee (as of Oct 2026 — live rate is on the Actor page). Fifty headlines cost well under a dollar.

When the run finishes, open the Dataset tab. You should see columns such as position, title, link, source, domain, date, date_utc, snippet and thumbnail. Confirm title and link are filled before you scale up.

Example input
{
  "query": "electric vehicles",
  "maxItems": 50,
  "gl": "us",
  "hl": "en",
  "time_period": "last_week"
}

3 Method A — download CSV and import (one-off)

On the Dataset tab click Export → CSV. In Google Sheets: File → Import → Upload, then “Replace current sheet” or “Insert new sheet”.

This is the fastest path for a research dump. It does not refresh. If you need the sheet to update every morning, skip to Method B or C.

4 Method B — append every run to a Sheet (recommended for schedules)

Apify’s Google Sheets Import & Export Actor (lukaskrivka/google-sheets) writes a dataset into a spreadsheet. Connect your Google account once in that Actor’s input, pick the spreadsheet, set mode to append (keep history) or replace (fresh snapshot each run).

On the Google News Scraper page open Integrations → Add integration → Actor, choose Google Sheets Import & Export, and set datasetId to {{resource.defaultDatasetId}}. Save. Every successful News run will now push its rows into the sheet without a download step.

Share the spreadsheet with the Google account you connected. Google caps a spreadsheet at 10 million cells and about 60 writes per minute — a daily 500-row digest is well inside that.

5 Method C — Google Apps Script (sheet pulls the API)

If the spreadsheet should refresh when someone opens it, store an Apify token in Script Properties (not in a cell). The script below starts a synchronous run and writes the dataset into the active sheet. Keep maxItems small; Apps Script has a 6-minute execution cap.

Apps Script — run-sync into the active sheet
function scrapeGoogleNews() {
  const token = PropertiesService.getScriptProperties().getProperty('APIFY_TOKEN');
  const url = 'https://api.apify.com/v2/acts/easyapi~google-news-scraper/run-sync-get-dataset-items'
    + '?token=' + token + '&format=csv';
  const payload = JSON.stringify({ query: 'electric vehicles', maxItems: 50, gl: 'us', hl: 'en' });
  const csv = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    payload: payload,
    muteHttpExceptions: true,
  }).getContentText();
  const rows = Utilities.parseCsv(csv);
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.clearContents();
  sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}

6 Schedule it (optional)

On the Actor page open Schedules → Create. Pick a timezone, a cron (for example 0 7 * * 1-5 for 07:00 on weekdays), paste the same input as your test run, and save. Combine this with Method B so each scheduled run appends to the sheet.

Name the schedule after the query (e.g. “EV headlines / US / weekdays”) so you can tell jobs apart when you add a second keyword.

Watch-outs

Things that usually go wrong

  • This is not an official Google News API

    The Actor scrapes public Google News results. If Google offers an official API that fits, prefer that for production compliance. You are responsible for lawful use and Google’s terms.

  • date vs date_utc

    date is the human string Google shows (“2 hours ago”). date_utc is ISO-8601. Use date_utc in Sheets if you want to sort or filter by time.

  • Don’t put your Apify token in a cell or a public formula

    =IMPORTDATA("https://api.apify.com/v2/datasets/…?token=SECRET") leaks the token to anyone with view access. Use Script Properties or the Integrations tab instead.

FAQ

Before you run this in production

Can I get the full article text in the same sheet?

News returns headline, source, date and URL — not the article body. Pair it with EasyAPI’s Article Content Extractor: feed it the link column, then join on URL.

How is this different from Google Trends?

News is article hits. Trends is interest-over-time and rising queries. Use News for a media digest; Trends for demand signals. There is a separate how-to if you want both in one workbook.

What does a daily 200-headline job cost?

At $5.00 / 1k plus $0.09 start, 200 rows is about $1.09 per run, or ~$24 a month on weekdays. Check the Actor page for the live rate; platform usage may apply.

Related tools

In the same toolkit

More how-to guides

Run Google News Scraper

Start with a 50-row test on Apify’s free credits, then schedule it once the sheet looks right.