Google Image Scraper
Pricing
from $1.50 / 1,000 unique image scrapeds
Google Image Scraper
Google Images Scraper that returns up to 30,000 full-size image URLs per keyword, not gstatic thumbnails. Source page, alt text, and dimensions included. A Google Image Search API alternative, no API key.
Pricing
from $1.50 / 1,000 unique image scrapeds
Rating
0.0
(0)
Developer
Thodor
Maintained by CommunityActor stats
1
Bookmarked
27
Total users
3
Monthly active users
15 hours ago
Last modified
Categories
Share
A Google Images scraper tool for AI training image datasets. Pull tens of thousands of full-resolution image URLs from one keyword, each with true pixel dimensions, source page, and caption. Real files on origin servers, not encrypted-tbn0.gstatic.com thumbnails. No API key, no browser.
- You enter a keyword.
- Every result's "visually similar images" page is opened automatically.
- Full-size URLs come back as JSON, CSV, or Excel, deduplicated.
📊 How many images do I get?
There's no fixed cap. max_results stops the run wherever you want it to.
| What you want | Images | Switch on |
|---|---|---|
| 🌍 As many as possible, anywhere | ~100,000 | Related images + Expand markets ✅ |
| 📍 Everything for one country | ~20,000 | Related images ✅, Expand markets ❌ |
| ⚡ A quick sample | ~250 | see section below |
✅ Both switches are on by default. The one number that decides your run is Max Results: raise it and you get the volume above, leave it and the run stops early.
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.
🌍 As many as possible, don't care where from
Sweeps all fifteen markets and stops at max_results. Right for dataset building. Every row records its market, so you can still filter later. Your 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. Right for SEO checks and brand monitoring, where an image that only ranks in Brazil is noise.
{"search_query": "wanderschuhe", "max_results": 20000,"country": "DE", "language": "de", "get_related_images": true}
⚖️ Compared to other Google Images scrapers
| Typical scraper | This 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 / height | ❌ The thumbnail's | ✅ The original's |
| Billing | Per 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
🧠 Build AI training image datasets
Training a model needs volume plus enough metadata to filter and attribute. A standard SERP API gives you ~100 results and a thumbnail URL, which is neither.
- Filter before you download:
widthandheightare the original's, so drop anything under your resolution floor without fetching it - Provenance on every row:
page_urlandtitleare what licence review and dataset documentation need - Deduplicated: an image reached through many paths is emitted once, so your set doesn't over-weight popular images
- Diversity controls:
depth_levelandmarketlet you balance or stratify the set
Also used for computer vision sourcing, vision-language captioning pairs, fresh eval sets, e-commerce image research, and cross-country brand monitoring.
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
search_query | string | required | Keyword to search |
max_results | integer | 200 | Hard cap on images. Also caps billing |
get_related_images | boolean | true | Also collect the visually similar images behind every result |
country | string | US | Google market to rank for, 50 supported. Always searched first |
expand_markets | boolean | true | Sweep the other 14 markets once country is exhausted. Set false to keep every result ranked for country |
language | string | en | Interface language |
⚡ A quick sample
Leave max_results low and the run stops before expansion ever starts, because your own country is always searched first and supplies ~250 on its own. You get the same set you'd see typing the query into Google Images yourself, in seconds, which is useful for checking output shape before committing to a large run.
{"search_query": "golden retriever", "max_results": 250}
📤 Output
One flat JSON object per image.

| Field | Type | Description |
|---|---|---|
image_url | string | Full-resolution original on the origin server |
thumbnail_url | string | Google's gstatic thumbnail |
width, height | int | Pixel dimensions of the original |
page_url | string | Page hosting the image |
title | string | That page's title, the caption Google prints under the result |
related_link | string | Link to visually similar images |
search_query | string | Keyword used |
market | string | Google market that surfaced this image |
depth_level | int | 0 = found by the search, 1 = found via related images |
{"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 the image's HTML alt attribute, which Google doesn't ship in this payload. Present on 100% of direct results and 87% of related-image results.
In Python
import requestsresp = 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,"get_related_images": True},)# Keep only images big enough to train on, without downloading the small onesusable = [r for r in resp.json() if (r["width"] or 0) >= 768 and (r["height"] or 0) >= 768]
💰 Cost
Billing is per unique result, at the rate on the price card on this page. Duplicates and rows without a resolved full-size URL aren't charged. max_results is both the cap and the brake, so set it to the dataset size you actually want.
❓ FAQ
Are width and height the thumbnail's or the original's?
The original's, which is what makes it practical to filter to trainable resolution before downloading.
Does it return image alt text?
It returns title, the source page's title, which is Google's caption under each result. Not the alt attribute, which Google doesn't include. Use page_url to fetch the real alt text from the source.
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.
Is there an official Google Images API? No, discontinued in 2011. The nearest option, the Custom Search JSON API, returns at most 10 images per request on a 100-query daily free tier.
How is this different from SerpApi or Zenserp? They return roughly the first 100 results and bill per request. This reaches tens of thousands from one query and bills per unique result. No API key.
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? Message me in the Issues tab and I'll look into it quickly. I'm a solo dev, so don't hesitate.
Scraping a different source? Try the Bing Images Scraper.
- Thodor


