Google Images Scraper avatar

Google Images Scraper

Pricing

from $1.67 / 1,000 results

Go to Apify Store
Google Images Scraper

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

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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_SS cookie 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:

  1. a JavaScript-executing stealth browser (e.g. Camoufox) to solve BotGuard — a higher-cost, higher-maintenance approach, or
  2. 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
}
FieldTypeDescription
querystringA single keyword/phrase to search, e.g. golden retriever.
queriesarrayOptional. Run several searches in one go; each entry is one search.
maxItemsintegerMax image records to push across the whole run (0 = no cap). Default 100.
maxItemsPerQueryintegerOptional per-query cap (0 = all).
maxConcurrencyintegerHow many searches to run in parallel. Default 2.
proxyConfigurationobjectProxy. Defaults to Apify Residential (US) — required for Google.
debugDumpHtmlbooleanDeveloper 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"
}
FieldTypeDescription
imageUrlstringFull-size image URL.
width / heightintegerImage dimensions in pixels.
thumbnailUrlstringGoogle thumbnail URL.
sourceUrlstringThe web page the image appears on.
titlestringImage 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_SS cookie) 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=isch async 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.