SFOLN

Catalogue / SEO & search

Google News Scraper

sfoln/google-news-search · News, SEO tools, AI On request

Search Google News by keyword, brand or topic: one row per article with title, URL, publisher, snippet, image and an ISO publish time, by country, language and time range. $4 per 1,000 result pages of up to 10 articles.

About

What it does

Google News Scraper searches Google News for any keyword, brand or topic and returns one clean row per article: title, URL, publisher, domain, snippet, thumbnail and an ISO publishedAt timestamp. Google only shows relative dates like "2 hours ago", so we resolve them against the run time and keep the original string too. Built for media monitoring, PR tracking, market intelligence and AI agents that need fresh news.

Price

Price per delivered record

EventPricePer 1,000Charged for
Google News results page
google-news-query
$0.004$4 / 1,000Charged once per Google News results page of up to 10 articles (one upstream credit).

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~google-news-search/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["artificial intelligence"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/google-news-search"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~google-news-search/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Get the latest Google News articles about "artificial intelligence" from the past day in the US and summarize the main stories.

Input

Input fields

Enter news search queries (one per line). For every query the Actor writes one row per article plus one `query_summary` row.

FieldTypeDefaultMeaning
queries *arrayrequiredNews queries
Keywords, company names or topics to search in Google News, one per line. Accounts on the Apify free plan can process up to 10 queries per run.
countrystring"us"Country (gl)
Two-letter country code that decides the news edition, e.g. us, gb, de, in.
languagestring"en"Language (hl)
Language code, e.g. en, de, es. Publish dates are only parsed into publishedAt for English date strings.
timeRangestring"any"Time range
Only return articles published within this period. One of "any", "hour", "day", "week", "month", "year".
resultsPerQueryinteger10Articles per query
How many articles to fetch per query, rounded up to a multiple of 10. Each page of 10 articles is one google-news-query event. Range 10–100.
pageinteger1Start page
Result page to start from (1 = newest/most relevant). Range 1–100.
maxQueriesinteger1000Max queries
Safety cap on the number of queries processed in this run. Range 1–10000.
concurrencyinteger5Concurrency
How many queries run in parallel. Range 1–10.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified upstream pages to each query_summary row.
Example input
{
  "queries": [
    "artificial intelligence"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstringInput
querystringQuery e.g. "artificial intelligence"
resultTypestringResult type
article | query_summary (one per query, not charged itself) e.g. "article"
rankinteger | nullRank
Overall position: (page − 1) × 10 + the article's place on its page.
positioninteger | nullPosition on page
pageinteger | nullPage
titlestring | nullTitle
urlstring | nullURL
domainstring | nullDomain
Publisher host without www., derived from url.
publisherstring | nullPublisher
Publisher name as shown by Google News.
datestring | nullDate (raw)
Date string as shown by Google, e.g. "2 hours ago".
publishedAtstring | nullPublished at
ISO timestamp parsed from `date` (relative dates resolved against the run time).
publishedAtIsEstimateboolean | nullPublished at is estimate
true when computed from a relative date like "3 weeks ago" or from a date shown without a year ("Oct 5").
snippetstring | nullSnippet
imageUrlstring | nullImage URL
Thumbnail served by Google.
totalArticlesinteger | nullArticles
query_summary: articles written for the query.
pagesFetchedinteger | nullPages fetched
creditsUsednumber | nullCredits used
query_summary: upstream credits the query used.
creditsChargednumber | nullCredits charged
query_summary: google-news-query events charged for the query, before any of its rows was written (equal to creditsUsed unless the maximum cost per run was reached).
publishersarrayPublishers
query_summary: distinct publishers.
newestPublishedAtstring | nullNewest article
oldestPublishedAtstring | nullOldest article
countrystring | nullCountry
query_summary: country edition (Google gl).
languagestring | nullLanguage
query_summary: language (Google hl).
timeRangestring | nullTime range
query_summary: Google tbs filter used (e.g. qdr:d), or null for any time.
statusstringStatus
ok | not_found | error | skipped_budget | skipped_free_plan
chargedbooleanCharged
true on an article row covered by the google-news-query charge of its results page; the query_summary row is never charged itself (see creditsCharged).
chargedEventstringCharged event
chargedCountintegerEvents charged
Events actually charged when the charge came back short of the requested count (present only then; a warning explains it).
sourcestringData source
Always serper (Google via a third-party SERP API).
fetchedAtstringFetched at
Example record
{
  "input": "apify",
  "query": "apify",
  "resultType": "article",
  "rank": 1,
  "position": 1,
  "page": 1,
  "title": "Apify raises funding to expand web data platform",
  "url": "https://techcrunch.com/2026/10/13/apify-funding/",
  "domain": "techcrunch.com",
  "publisher": "TechCrunch",
  "date": "2 hours ago",
  "publishedAt": "2026-10-14T10:00:00.000Z",
  "publishedAtIsEstimate": true,
  "snippet": "Prague-based Apify, which runs a marketplace of web scrapers…",
  "imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=…",
  "status": "ok",
  "charged": true,
  "chargedEvent": "google-news-query",
  "source": "serper",
  "fetchedAt": "2026-10-14T12:00:00.000Z"
}

Machine-readable

This page for agents