Research Visual Content Trends With Image Search Data
Export Google Images results as JSON — URLs, dimensions, domains, positions — to study what visual styles dominate a niche across markets.

TL;DR — The Google Images Scraper exports image search results — URL, dimensions, source page, domain, position — as JSON. Researchers use it to measure which styles, sources, and formats dominate a visual niche, per market.
Why image SERPs are a research surface
What ranks on image search defines a topic's visual grammar — the aspect ratios, photo styles, and source types that win. For design research, content strategy, and market studies, that is measurable data, not taste.
The question "what does 'sustainable packaging' look like online" becomes answerable: run the query, count domains, histogram dimensions, sample the images.
How does this compare to the alternatives?
| Manual browsing | Design trend reports | Thirdwatch actor | |
|---|---|---|---|
| Cost | Free, unscalable | Report fees | Pay per result |
| Reliability | Anecdotal | Annual snapshots | Current index |
| Setup time | Zero | Procurement | Minutes |
| Maintenance | Repeat manually | Annual | Re-run anytime |
Trend reports lag by quarters. The index is live — you measure the niche as it is this week.
How to research visual trends in 4 steps
How do I pull the result set?
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("thirdwatch/google-images-scraper").call(
run_input={
"queries": ["sustainable packaging design", "refillable cosmetics"],
"maxResults": 100,
"country": "us", "language": "en",
}
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())How do I profile the niche's sources?
import pandas as pd
df = pd.DataFrame(rows)
print(df.groupby("domain")["position"].agg(["count", "median"]))Domains with high counts and low median positions are the niche's visual authorities — study what they publish.
How do I compare across markets?
run_de = client.actor("thirdwatch/google-images-scraper").call(
run_input={"queries": ["sustainable packaging design"],
"maxResults": 100, "country": "de", "language": "de"})
de = pd.DataFrame(list(client.dataset(run_de["defaultDatasetId"]).iterate_items()))
overlap = set(df.domain) & set(de.domain)
print(f"Domain overlap US/DE: {len(overlap)}")Low overlap means a market-specific visual ecosystem — useful when localizing creative.
How do I quantify format trends?
df["aspect"] = df.width / df.height
print(df.aspect.describe())
print(df.groupby("query")["aspect"].median())Median aspect ratio per query tells you whether the niche runs square, landscape, or vertical — a real input for ad and hero-image specs.
Sample output
{"imageUrl": "https://eco-pkg.example.com/img/refill-station.jpg",
"width": 1600, "height": 900,
"sourcePageUrl": "https://eco-pkg.example.com/case-study",
"domain": "eco-pkg.example.com",
"query": "sustainable packaging design", "position": 4}Common pitfalls
Positions drift and personalize — aggregate medians over several runs rather than quoting single ranks. SafeSearch and market norms shape what a query returns; fix country/language for comparability. Records are an index, not the pixels — download a stratified sample for style-level claims. The actor supplies the measurement; the design interpretation stays with you.
Related use cases
Frequently asked questions
What can image search results tell a researcher?
Which domains dominate a visual niche, what aspect ratios and resolutions rank, and how results differ by market — the returned fields (domain, dimensions, position, source page) support all three analyses.
Can I compare the same query across countries?
Yes. Run it twice with different country values; gl changes what surfaces. Each record carries the query so cross-market merges stay clean.
Does it return the images themselves?
It returns URLs and metadata. Download a sample if you need pixel-level analysis — the index tells you where to look.
How stable are positions across runs?
Image SERPs drift slowly and personalize lightly — treat position as a directional rank and aggregate across runs rather than reading single positions.
Related
100 free credits, no credit card.
About 30 real searches. Add the MCP to Claude or Cursor in two minutes.