Google Images Scraper - up to 100K per Keyword avatar

Google Images Scraper - up to 100K per Keyword

Pricing

from $1.50 / 1,000 unique image scrapeds

Go to Apify Store
Google Images Scraper - up to 100K per Keyword

Google Images Scraper - up to 100K per Keyword

Google Images scraper tool and Google Image Search API alternative: up to 100,000 full-size image URLs per keyword with pixel dimensions and source pages. No API key.

Pricing

from $1.50 / 1,000 unique image scrapeds

Rating

0.0

(0)

Developer

Thodor

Thodor

Maintained by Community

Actor stats

1

Bookmarked

27

Total users

3

Monthly active users

13 hours ago

Last modified

Share

A Google Images scraper tool that pulls up to 100,000 full-size image URLs per keyword, where a normal Google Images scraper stops at the first hundred thumbnails. Type a keyword and get every image's original URL with true pixel dimensions, source page, and caption, then load them into a spreadsheet as CSV, Excel, or JSON. No API key, no browser, no Google Cloud project.

There is no official Google Image Search API to call, and the SERP APIs that stand in for it return roughly the first 100 results per query. This actor is the Google Image Search API alternative for volume work: AI training image datasets, computer vision sourcing, e-commerce image research, and brand monitoring across countries. Scraping Bing instead? The Bing Image Search API Scraper does the same job on Bing.

πŸ“‹ How to scrape Google Images

  1. Type a keyword in Search Query.
  2. Set Max Results to the number of images you want. It caps the run and the bill.
  3. Click Start.
  4. Open the Output tab and click Export for CSV, Excel, JSON, or HTML.

A 250-image sample finishes in seconds.

🎁 So what do you get?

πŸ–ΌοΈ Full-resolution image URLπŸ“ Width and height of the originalπŸ”— Source page URL
🏷️ Caption, the source page's title🌍 Which Google market surfaced it🧭 Found by search or via related images
⚑ Google's thumbnail URLπŸ” Link to the visually similar imagesπŸ” Deduplicated across paths

βš–οΈ Compared to SerpApi and other Google Images scrapers

SerpApi, Zenserp, typical scrapersThis actor
πŸ–ΌοΈ Images per keyword❌ ~100, first page onlyβœ… up to ~100,000
πŸ” Related images❌ Never openedβœ… Opened for every result
🌍 Markets❌ Oneβœ… 15
πŸ”— Image URL❌ gstatic thumbnail, ~250pxβœ… Full-resolution original
πŸ“ Width and height❌ The thumbnail'sβœ… The original's
πŸ”‘ Access❌ API key, per-request plansβœ… Register on Apify, $5 free monthly credit
πŸ’΅ BillingPer requestβœ… Per unique result

Why they stop early. Google's pagination dies around 250 images. Getting past it means opening the "visually similar" page behind each result, which normally needs a browser. Its address turns out to be computable, so this actor fetches it over plain HTTP instead.

Why the URLs are full-resolution. The original is never in the <img> tag, only in a JSON blob behind it, one array after the thumbnail. Anything reading rendered HTML sees the thumbnail and stops.

["https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9…", 259, 194] <- what others return
["https://upload.wikimedia.org/…/2025_Bart_De_Wever.jpg", 333, 250] <- what you get

🎯 Three things people run this for

How
🧠 AI training image datasetsOne keyword per class label, then the resolution filter below keeps only images big enough to train on, before you download a single file.
πŸ›οΈ E-commerce image researchBatch product keywords and export one spreadsheet of full-size images with the page each one came from.
πŸ“ˆ Brand monitoring across countriesRun the same keyword with a fixed country to see what really ranks there, so an image that only ranks in Brazil stays out of your German report.

πŸ“₯ Input

{"search_query": "golden retriever", "max_results": 5000}
  • search_query: the keyword. Required.
  • max_results: default 200. Hard cap on images and on billing.
  • get_related_images: default true. Also collects the visually similar images behind every result.
  • country: default US. The Google market to rank for, 50 supported. Always searched first.
  • expand_markets: default true. Sweeps the other 14 markets once country is exhausted. Set false to keep every result ranked for country.
  • language: default en. Interface language.

There is no fixed cap. Both switches are on by default, so the one number that decides your run is max_results:

What you wantImagesSwitch on
🌍 As many as possible, anywhere~100,000Related images + Expand markets βœ…
πŸ“ Everything for one country~20,000Related images βœ…, Expand markets ❌
⚑ A quick sample~250Leave max_results at 250

Measured on cat: 19,874 from one market, 28,986 once a second market is added. The 100,000 is the theoretical maximum across all fifteen markets. Your own country is always searched first and supplies ~250 on its own, the same set you'd see typing the query into Google Images, so a low cap gives you a quick look at the output shape before a large run.

🌍 As many as possible, don't care where from

Sweeps all fifteen markets and stops at max_results. Every row records its market, so you can still filter later. The output no longer represents any single market, which is right for datasets and wrong when local ranking is the point.

{"search_query": "golden retriever", "max_results": 100000,
"get_related_images": true, "expand_markets": true}

πŸ“ Everything for one country

Results stay ranked for one market, for SEO checks and brand monitoring.

{"search_query": "wanderschuhe", "max_results": 20000,
"country": "DE", "language": "de", "get_related_images": true}

πŸ“€ Output

One flat row per image, deduplicated.

Google Images scraper output: full-resolution image URLs with pixel dimensions, source pages and captions for building AI training image datasets

{
"image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/2025_Bart_De_Wever.jpg",
"thumbnail_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR0OZnTrRQLi8&s",
"width": 250,
"height": 333,
"page_url": "https://es.wikipedia.org/wiki/Bart_De_Wever",
"title": "Bart De Wever - Wikipedia, la enciclopedia libre",
"search_query": "bart de wever",
"market": "US",
"depth_level": 0
// HIDDEN: related_link
}

⚠️ title is the source page's title, not alt text. Google doesn't ship the alt attribute in this payload; fetch page_url if you need it. Present on 100% of direct results and 87% of related-image results.

Fields

FieldDescription
image_urlFull-resolution original on the origin server
thumbnail_urlGoogle's gstatic thumbnail
width, heightPixel dimensions of the original
page_urlPage hosting the image
titleThat page's title, the caption Google prints under the result
related_linkLink to visually similar images
search_queryKeyword used
marketGoogle market that surfaced this image
depth_level0 = found by the search, 1 = found via related images

🧠 Build an AI training image dataset

Training a model needs volume plus enough metadata to filter and attribute, and a standard SERP API gives you ~100 results and a thumbnail URL, which is neither. Here the width and height are the original's, so you can keep only images big enough to train on before downloading any of them:

usable = [r for r in items if (r["width"] or 0) >= 768 and (r["height"] or 0) >= 768]

An image reached through many paths is emitted once, so the set doesn't over-weight popular images. depth_level and market let you balance or stratify it, and page_url plus title are what dataset documentation and licence review need.

βš™οΈ Use it as a Google Image Search API

Every run is an HTTP endpoint: POST the same JSON as the form and the image rows come back in the response body.

Python

import requests
resp = requests.post(
"https://api.apify.com/v2/acts/thodor~google-image-scraper/run-sync-get-dataset-items",
params={"token": "YOUR_APIFY_TOKEN"},
json={"search_query": "golden retriever", "max_results": 5000},
)
items = resp.json()

Node.js

import axios from "axios";
const { data } = await axios.post(
"https://api.apify.com/v2/acts/thodor~google-image-scraper/run-sync-get-dataset-items",
{ search_query: "golden retriever", max_results: 5000 },
{ params: { token: process.env.APIFY_TOKEN } }
);
console.log(data.length, data[0].image_url);

curl

curl -X POST "https://api.apify.com/v2/acts/thodor~google-image-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"search_query":"golden retriever","max_results":5000}'

Swap run-sync-get-dataset-items for runs to fire async with a webhook when a large run outlives the 5-minute sync window. The apify-client SDK works too, in Python and JavaScript, and the n8n, Make, and Zapier integrations take the same input.

πŸ’‘ Tip: no need to write the JSON by hand. Fill in the form on the Input tab, switch the editor from Form to JSON, and copy the result into your code.

πŸ’° How much does it cost to scrape Google Images?

Billing is per unique result, at the rate on the price card on this page. Duplicates and rows without a resolved full-size URL are free. max_results is both the cap and the brake: a run capped at 5,000 bills at most 5,000 images, so set it to the dataset size you actually want.

❓ FAQ

Is there an official Google Image Search API? No. Google discontinued it in 2011. The nearest option, the Custom Search JSON API, returns at most 10 images per request on a 100-query daily free tier.

Can I use this Google Images scraper for free? Yes. Registering on Apify comes with $5 of free platform credit every month, no credit card needed, enough for real test runs.

Does it download the image files? No. It returns full-resolution URLs and metadata; downloading is a loop over image_url in your own script.

Why doesn't it go deeper than one level of related images? It reaches more, but relevance drops off by the third or fourth level and you start collecting things that aren't your query. That trade shouldn't be made for you. If you need it, open a ticket on the Issues tab and I'll enable it.

Can I use the images commercially? The actor returns URLs and metadata, not licences. Check terms per source via page_url. Nothing here grants rights to the underlying files.

What if Google rate-limits a run? Everything collected is saved and you're only billed for unique results. For very large jobs, several smaller runs beat one enormous one.

πŸ›Ÿ Support

Something not working, or a field missing? Message me in the Issues tab and I'll look into it quickly. I'm a solo dev, so don't hesitate.

Need to know where one image appears online, rather than every image for a keyword? That's the Reverse Image Search API.

  • Thodor