Google Search Scraper – Web & News SERP Results
Pricing
from $3.50 / 1,000 web results page reads
Google Search Scraper – Web & News SERP Results
Scrape Google search results as data: title, link, snippet and position for web search, or headline, publisher link, date and source from Google News. Uses Apify's Google SERP proxy for web and Google News's own feeds for news. No API key, no login, no browser. Unofficial.
Pricing
from $3.50 / 1,000 web results page reads
Rating
0.0
(0)
Developer
Simple Actors
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
a day ago
Last modified
Share
Scrape Google search results as structured data. Type what you would type into
the search box — a business, a person, a topic, a site: query — and every
result comes back as a row: title, link, snippet and position, in Google's own
ranking order. Built for SERP tracking, media monitoring, lead research and SEO
work, with two search types off one input.
- Web (the default) — what google.com shows: the site itself, coverage, profiles, listings. Read from Google's real results pages through Apify's Google SERP proxy, the sanctioned route for exactly this.
- News — what Google News lists: headline, the publisher's own link, publish date and source, newest first, up to 100 stories a search. Much cheaper per result, and the right type for monitoring coverage.
No API key, no login, no browser, no account of yours involved. A search finishes in a few seconds.
Web: $3.50 per 1,000 result pages (about ten results each — $0.0035 for a typical search). News: $0.30 per 1,000 searches plus $0.05 per 1,000 stories. Apify platform usage included, nothing else to pay. A search that cannot be read is never charged. Unofficial. Not affiliated with, endorsed by, or sponsored by Google.
Features
- Two search types, one input — google.com web results, or Google News stories.
- Google's operators all work —
"exact phrase"in quotes,site:example.com,-excludedwords. - Ranking position preserved —
positionandpageon every web result, in Google's own order. - Google News links unwrapped — each story's
news.google.com/rss/articles/…wrapper is resolved to the publisher's real address without a browser, and remembered between runs. - Every news story is dated — a guaranteed
dateandtimestamp, plus a stableidfor deduplicating across scheduled runs. - Date filtering —
onlyNewerThantakes24 hours,last 7 daysor an ISO date; on news it is also sent to Google as itswhen:operator. - Editions and languages — pick the Google News edition by
languageandcountry, so a UK search ranks UK publishers. - Paste a Google URL directly — a search-results URL, a News tab
(
tbm=nws), a Google News topic, section, publication or front page, or an RSS link. - Relaxed queries flagged, not hidden —
queryRelaxedis true when Google found no exact match and dropped the quotes. - Paging stops early — a thin query never pays for empty pages.
- Runs stay green. A search that cannot be read becomes an error row, so one bad search never costs the rest of the job.
Input
{"queries": ["Cafe Charmant Bleecker Street"], // one search per line"searchType": "web", // "web" = google.com results, "news" = Google News stories"maxItems": 10, // results per search — the cost knob on web (~10 per page)"onlyNewerThan": "7 days", // optional: "24 hours", "last 7 days", "2026-08-01""language": "en-US", // Google News edition language"country": "US", // Google News edition country, two-letter code"resolveLinks": true, // news only: unwrap Google's link to the publisher's own"proxy": { "useApifyProxy": true }}
That returns the results a person would see: the venue's own website, the Eater story about its opening, its Instagram, its Yelp page — title, link and snippet for each.
Google's operators all work:
{"queries": ["\"Cafe Charmant\" reviews","site:nasa.gov mars","bradenton council -football"]}
| Field | Type | Default | What it does |
|---|---|---|---|
queries | array | — | Search terms, one per line. Google's operators work. |
searchType | string | web | web = google.com. news = Google News. |
startUrls | array | — | Google pages to read instead of, or as well as, terms. A News-tab URL keeps its own tab regardless of searchType. |
maxItems | integer | 10 web / 100 news | Results per search. Web pages come ~10 at a time and each page is a request. |
language | string | en-US | Edition language: en-US, en-GB, fr, de, es-419, hi, ja… |
country | string | US | Edition country: US, GB, CA, AU, IN, DE, FR… |
onlyNewerThan | string | — | Keep only results newer than a window or ISO date. Exact on news, best-effort on web. |
resolveLinks | boolean | true | News only. Resolve Google's wrapped link to the publisher's real address. |
proxy | object | datacenter | News reads only. Web search always uses Apify's Google SERP proxy and is not configurable. |
How many results
Google serves about ten results a page and no longer honours a bigger page
size, so maxItems is the cost knob for web search: the default 10 is one
page ($0.0035), 25 is three, 100 is up to ten. Paging stops early the moment
Google repeats itself, so a thin query never pays for empty pages.
News search
{"queries": ["bradenton city council"],"searchType": "news","onlyNewerThan": "24 hours"}
News search reads Google News's own feeds: up to 100 stories in one request,
each with a publish date and the publisher's real link (Google's wrapped
links are resolved without a browser, and remembered between runs). It also
reads Google News topic, section and publication pages and the front page of
any edition, pasted into startUrls. If you are polling for new coverage,
this is the type to use — it is a fraction of the price and every story is
dated.
Fresh results only
{"queries": ["ai regulation"],"onlyNewerThan": "7 days"}
The window takes a span like "24 hours", "last 7 days" or an ISO date.
One honest difference between the types: on news the window is exact — every
story is dated, and the window is also sent to Google as its when:
operator, so the hundred places are spent inside it. On web it is
best-effort: only results whose snippet states a date can be judged, and the
undated majority is kept rather than silently dropped, with date null. If
the window matters, use the news type.
Editions and languages
{"queries": ["council planning"],"language": "en-GB","country": "GB"}
language as Google writes it (en-US, fr, es-419…), country as a
two-letter code. Applies to both types.
Output
One item per result, in the run's dataset. A web result:
{"type": "result","title": "Cafe Charmant | West Village NYC","link": "https://www.cafecharmantnyc.com/","domain": "cafecharmantnyc.com","snippet": "340 Bleecker Street New York, NY 10014 (212) 308-3408","displayedUrl": "https://www.cafecharmantnyc.com","date": null,"timestamp": null,"query": "Cafe Charmant Bleecker Street","searchUrl": "http://www.google.com/search?q=Cafe+Charmant+Bleecker+Street&hl=en-US&gl=US","page": 1,"position": 3,"totalResults": 135,"queryRelaxed": false,"retrievedAt": "2026-08-24T05:04:18.210Z"}
| Field | What it is |
|---|---|
title | The result's title. |
link | The site's own URL, exactly as Google links it. |
domain, displayedUrl | The host, and the breadcrumb address Google displays. |
snippet | The text under the title, including any date prefix Google printed. |
date, timestamp | Only when Google printed a date in the snippet; null otherwise, never guessed. |
position, page | The result's place in Google's ranking, 1 first, and the results page it came from. |
totalResults | Google's own "About N results" estimate, when it printed one. |
queryRelaxed | True when Google found no exact matches and searched without the quotes — the rows a person would see, flagged rather than passed off as exact matches. |
A news story instead carries sourceName, sourceUrl, a guaranteed date,
googleNewsUrl (Google's wrapped link), linkResolved, an id that is
stable across runs for deduplication, and relatedStories on front-page and
topic feeds. News stories are emitted newest first; web results in Google's
order.
A search that could not be read is its own row with type: "error", an
error code and an errorDescription, so one bad search never costs the
rest of the job. The run itself stays green either way, and its status
message says how many searches could not be read — so if you poll on a
schedule, check for type: "error" rows rather than trusting the run status.
An empty dataset means the searches were read and Google lists nothing for
them. It never means the search could not be made; that arrives as an error
row instead.
A news story in full — every field searchType: "news" emits:
{"type": "story","title": "Council approves downtown redevelopment plan","link": "https://www.bradenton.com/news/local/article123456.html","linkResolved": true,"googleNewsUrl": "https://news.google.com/rss/articles/CBMiK2h0dHBzOi8vd3d3…","id": "CBMiK2h0dHBzOi8vd3d3LmJyYWRlbnRvbi5jb20…","date": "2026-08-24T11:32:00.000Z","timestamp": 1787052720,"sourceName": "Bradenton Herald","sourceUrl": "https://www.bradenton.com","domain": "bradenton.com","relatedStories": [{ "title": "…", "url": "…", "sourceName": "…" }],"query": "bradenton city council","feedUrl": "https://news.google.com/rss/search?q=…","position": 1,"retrievedAt": "2026-08-24T12:01:03.118Z"}
How to use
From Apify Console
- Open the Actor and click Try for free / Start.
- Put one search per line into Search terms. Google's operators work —
"exact phrase",site:example.com,-excluded. - Choose Search type: Web for what google.com shows, News for coverage monitoring.
- Set Results per search — on web this is the cost knob, since results come about ten to a page. On news, up to 100 arrive in one request.
- For a news edition, set Language and Country to the audience you care about, not the country the news is about.
- Click Start, then open the Dataset tab and export as JSON, CSV or Excel.
From the API
curl -s "https://api.apify.com/v2/acts/simple.actors~google-search/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"queries": ["site:nasa.gov mars"], "maxItems": 20}'
News monitoring, with the JavaScript client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('simple.actors/google-search').call({queries: ['bradenton city council'],searchType: 'news',onlyNewerThan: '24 hours',country: 'US',});const { items } = await client.dataset(run.defaultDatasetId).listItems();// Deduplicate across scheduled runs on `id`, which is stable.
Use cases
- SERP rank tracking — check where a domain sits for a set of keywords over
time, using
positionandpageon every web result. - Media and brand monitoring — poll
searchType: "news"withonlyNewerThanon a schedule and deduplicate onidto catch new coverage of a company, person or topic. - Lead research and prospecting — resolve a business name to its own website, listings and profiles in one search, ready to feed into a contact scraper.
- SEO competitor and content research — run
site:queries to see what Google has indexed for a competitor, and read the snippets it chose. - Local news aggregation — read Google News topic, section and publication feeds for a region, with the publisher's real link rather than a Google wrapper.
- Dataset seeding — turn a list of search terms into a link corpus for further crawling.
Usage notes
Simple, transparent pay-per-result pricing — no subscriptions.
Pricing
| Event | Price |
|---|---|
| Web results page read (~10 results) | $0.0035 |
| News search read | $0.0003 |
| News story returned | $0.00005 |
What that comes to:
- A web lookup at the default depth: $0.0035 — $3.50 per 1,000 searches.
- A deep web search, 100 results: up to $0.035.
- A news search polled hourly that usually finds nothing new: about $0.22 a month.
- A news search returning its full hundred stories: about half a cent.
Limits worth knowing
- Web results come ten a page. Google retired the bigger page size; depth is paging, and paging is what costs.
- News caps at 100 stories a search, in one cheap request, with no next page.
- The two types answer different questions. Web is "what does Google show for this?"; news is "what coverage exists?". A place, a product or a person usually wants web; a monitored topic usually wants news.
- Editions differ. Set
languageandcountryto the audience you care about.
FAQ
Is scraping Google search results legal? Results come from Google and are subject to Google's terms — check the platform's ToS before using them. Web search here goes through Apify's Google SERP proxy, which is the sanctioned route to Google's results page, and news search reads the RSS feeds Google News publishes openly.
Do I need a Google API key or a SerpAPI account? No. There is no key, no login, no browser and no quota of your own to manage.
Does it support pagination?
Yes, on web search. Google serves about ten results per page and each page is
one request, so maxItems decides how many pages are read — 10 is one page, 100
is up to ten. Paging stops early the moment Google repeats itself. News search
does not page: up to 100 stories arrive in a single request and there is no next
page.
Why is date null on my web results?
Google only prints a date in some snippets. When it does not, the date is left
null rather than guessed. Every news story is dated, so use
searchType: "news" when the date matters.
How do I get the publisher's real URL instead of a news.google.com link?
That is the default. resolveLinks is on, so each story's wrapped link is
resolved to the publisher's own address and linkResolved is true. Turn it
off for a faster run and link stays the Google wrapper.
How do I monitor a topic without getting the same stories every run?
Poll with searchType: "news" and onlyNewerThan set shorter than the gap
between runs, then deduplicate on id, which is stable across runs.
How do I know a search failed if the run stays green?
Check for rows with type: "error" — that is the failure channel by design, so
one bad search never costs the rest of the job. The run's status message also
counts how many searches could not be read.
Results come from Google and are subject to Google's terms. Web search uses Apify's Google SERP proxy; news search reads the feeds Google News publishes. Unofficial, and not affiliated with Google.