Google Images Scraper
Pricing
from $1.67 / 1,000 results
Google Images Scraper
Search Google Images by keyword and get structured results: full-size image URL, dimensions, thumbnail, source page, and title. No API key or login.
Pricing
from $1.67 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Search Google Images by keyword and get structured results — full-size image URL, dimensions, thumbnail, source page, and title — as clean JSON, with no API key or login.
⚠️ Current status: blocked by Google (needs a decision)
As of July 2026, Google no longer serves Google Images (
udm=2) results to non-JavaScript HTTP clients. Every request from a residential IP is answered with one of:
- a JavaScript challenge shell ("enablejs" / BotGuard) that computes a
SG_SScookie in-browser before results are shown, or- an "unusual traffic" reCAPTCHA page (HTTP 429) on flagged IPs.
The same gate applies to plain Google web search too — it is site-wide, not image-specific. Because the results are only revealed after a browser executes Google's BotGuard code, there is no HTTP-only way to extract them today.
This actor is fully built and fails loud (it emits an explicit error record, never fake data). Getting real results requires one of:
- a JavaScript-executing stealth browser (e.g. Camoufox) to solve BotGuard — a higher-cost, higher-maintenance approach, or
- Google's official Custom Search JSON API (API key + quota).
Both are cost/policy decisions. See Notes & limits below.
What it does
Given a search query, this actor requests the Google Images results surface through a residential connection and extracts one record per image result: the full-size image URL, its width and height, a thumbnail, the page the image came from, and its title.
Input
{"query": "golden retriever","queries": ["golden retriever", "eiffel tower at night"],"maxItems": 100,"maxConcurrency": 2}
| Field | Type | Description |
|---|---|---|
query | string | A single keyword/phrase to search, e.g. golden retriever. |
queries | array | Optional. Run several searches in one go; each entry is one search. |
maxItems | integer | Max image records to push across the whole run (0 = no cap). Default 100. |
maxItemsPerQuery | integer | Optional per-query cap (0 = all). |
maxConcurrency | integer | How many searches to run in parallel. Default 2. |
proxyConfiguration | object | Proxy. Defaults to Apify Residential (US) — required for Google. |
debugDumpHtml | boolean | Developer flag: dumps the raw fetched page(s) to the run's key-value store instead of parsing. |
Output (intended shape)
Every record carries the standard envelope (_input, _source, _scrapedAt). A
successful image record looks like this:
{"_input": "golden retriever","_source": "S1-udm2","_scrapedAt": "2026-07-11T00:00:00Z","imageUrl": "https://example.com/photos/golden-retriever.jpg","width": 1600,"height": 1067,"thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...","sourceUrl": "https://example.com/dogs/golden-retriever","title": "Golden Retriever - Full Breed Profile"}
| Field | Type | Description |
|---|---|---|
imageUrl | string | Full-size image URL. |
width / height | integer | Image dimensions in pixels. |
thumbnailUrl | string | Google thumbnail URL. |
sourceUrl | string | The web page the image appears on. |
title | string | Image title / alt text. |
Current live output (fail-loud)
Because of the block described above, a run today emits an explicit error record per query instead of silently returning nothing:
{"_input": "golden retriever","_source": "S1-udm2","_scrapedAt": "2026-07-11T04:54:51Z","_error": "unexpected_shape","_errorDetail": "no AF_initDataCallback ds:1 block found"}
Notes & limits
- Residential proxy is required — datacenter IPs are rate-limited by Google instantly.
- Google gates image search behind a browser JavaScript challenge (BotGuard /
SG_SScookie) as of July 2026. HTTP-only extraction is not currently possible; see the status box at the top. Verified on-platform across multiple browser fingerprints and multiple request strategies (udm=2,gbv=1,tbm=ischasync chunk, plain web search). - The parser targets the
AF_initDataCallback('ds:1')payload and fails loud (UnexpectedShape) whenever that payload is absent, so datasets never contain silently-empty or fabricated rows.