Extract ranked Google Images results for one or more search queries. The Actor returns direct image URLs when available, source pages, result titles, thumbnails, dimensions, source domains, rank positions, and localization metadata.
Use it when you need exportable image-search data for research, SEO, visual merchandising, brand monitoring, competitive analysis, or AI workflows that need image candidates with their source pages.
What you can scrape
- Ranked Google Images results for keyword searches
- Image result URLs and thumbnail URLs
- Source page URLs and source domains
- Result titles and publisher/source names
- Image and thumbnail dimensions when Google exposes them
- Image size labels when present
- Page number and rank position within each query
- Language, country, and SafeSearch settings used for the run
Who is it for?
- SEO and content teams checking what visuals rank for commercial keywords.
- E-commerce teams researching product imagery and source pages.
- Brand and reputation teams monitoring image results around brands, people, or campaigns.
- AI builders collecting image candidates and source URLs for downstream review.
- Market researchers comparing localized image results across countries and languages.
Input example
Use search queries rather than Google result URLs.
{
"queries": ["running shoes", "modern kitchen design"],
"maxItems": 20,
"resultsPerQuery": 10,
"language": "en",
"country": "us",
"safeSearch": "active",
"uniqueImagesOnly": true,
"minDelaySeconds": 2,
"proxyConfiguration": { "useApifyProxy": true }
}
Input settings
| Field | Type | Description |
|---|---|---|
queries |
array | One or more Google Images search queries. Empty values are ignored. |
maxItems |
integer | Maximum total image records to save across all queries. |
resultsPerQuery |
integer | Maximum image records to save for each individual query. |
language |
string | Google interface language (hl), for example en, es, de, or fr. |
country |
string | Google country/region (gl), for example us, gb, de, or fr. |
safeSearch |
string | SafeSearch mode: active or off. |
uniqueImagesOnly |
boolean | Skip duplicate image/source URLs across pages and queries. |
minDelaySeconds |
integer | Delay between paginated requests to reduce rate limiting. |
proxyConfiguration |
object | Apify Proxy settings. Recommended for stable Google access. |
Output example
Each dataset item represents one Google Images result.
{
"query": "running shoes",
"page": 0,
"position": 1,
"title": "The Best Running Shoes for Men in 2026...",
"source": "Men's Health",
"thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?...",
"thumbnailWidth": 224,
"thumbnailHeight": 225,
"sourceUrl": "https://www.menshealth.com/fitness/...",
"sourceDomain": "www.menshealth.com",
"imageUrl": "https://hips.hearstapps.com/...jpg",
"imageWidth": 1120,
"imageHeight": 1121,
"imageSize": "210KB",
"googleImageId": "ELT4DI4K-Fif6M",
"googleResultId": "nJZfuYDvcDQy9M",
"language": "en",
"country": "us",
"safeSearch": "active"
}
Limits and troubleshooting
Google can rate limit automated traffic. The Actor avoids returning silent empty success when Google returns an unusual-traffic or CAPTCHA page. If one query fails after other queries saved results, the Actor preserves the partial dataset and logs the failed query.
Practical tips:
- Keep
minDelaySecondsat2or higher for larger runs. - Use Apify Proxy for better reliability.
- Split very large keyword lists into smaller scheduled runs.
- Use
resultsPerQueryto keep one broad query from consuming the wholemaxItemsbudget. - If a query has fewer visible Google Images results than requested, the Actor returns the available records.
API usage
Use this as a Google Images API workflow when you need scheduled exports through Apify, SDK clients, webhooks, or MCP.
JavaScript / Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/google-images-scraper').call({
queries: ['running shoes'],
maxItems: 20,
resultsPerQuery: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/google-images-scraper').call(run_input={
'queries': ['running shoes'],
'maxItems': 20,
'resultsPerQuery': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~google-images-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"queries":["running shoes"],"maxItems":20,"resultsPerQuery":10}'
MCP and agent usage
Use this Actor from Apify MCP when an AI agent needs image-search candidates with source pages. Configure the MCP server with the Actor-specific tools parameter:
https://mcp.apify.com/?tools=fetch_cat/google-images-scraper
Claude CLI example:
claude mcp add apify-google-images https://mcp.apify.com/?tools=fetch_cat/google-images-scraper
MCP JSON configuration example:
{
"mcpServers": {
"apify-google-images": {
"url": "https://mcp.apify.com/?tools=fetch_cat/google-images-scraper"
}
}
}
Example prompts for MCP usage:
Find 20 Google Images results for "modern kitchen design" in the US, then summarize the recurring source domains and image themes.
Collect image URLs for "electric bikes" and group the results by sourceDomain for a market-research brief.
Support
Open an issue on the Actor page if a query returns no results, localization behaves unexpectedly, or Google starts returning block pages for your workload. Include the run ID and input used.