Skip to main content
Thirdwatchthirdwatch
Business & local data

Monitor Where Your Brand's Images Appear Online

Track which sites rank for your brand's product photos and visual assets — Google Images results as JSON with source pages and domains.

Sep 21, 2026 · 2 min read · 484 words
See the scraper →

TL;DR — The Google Images Scraper returns where your brand's images surface — image URL, source page, domain, position — as JSON. Run brand queries on a schedule, diff domains week over week, and catch unauthorized or stale product imagery.

Why image visibility is a brand problem

Customers meet your product as a picture long before they meet it as a page. Which photos Google serves for your brand terms shapes the first impression — and where those photos come from shapes whether it is accurate.

The job: an auditable list of which domains and pages supply the images for your brand searches, tracked over time so you notice when a reseller's old packaging or a scraper's knockoff outranks your own assets.

How does this compare to the alternatives?

Manual image searches Brand-protection vendors Thirdwatch actor
Cost Free, sporadic Enterprise contracts Pay per result
Reliability Spotty coverage Comprehensive Repeatable queries
Setup time Zero Months Minutes
Maintenance Memory Vendor Scheduled runs

Enterprise brand-protection suites do more — legal workflows, takedowns. If the gap is simply knowing who shows your product and where, a scheduled query export covers it.

How to monitor brand imagery in 4 steps

How do I run the brand query 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": ["Acme Widget Pro", "Acme widget unboxing", "acmewidget.com"],
        "maxResults": 50,
        "country": "us",
        "language": "en",
    }
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())

How do I attribute images to domains?

import pandas as pd
df = pd.DataFrame(rows)
by_domain = df.groupby("domain")["imageUrl"].count().sort_values(ascending=False)
print(by_domain.head(20))

Your CDN, your retailers, press domains — expected. Anything else is the review queue.

How do I diff week over week?

prev = pd.read_json("prev.jsonl", lines=True)
new_domains = set(df.domain) - set(prev.domain)
print("New image sources:", new_domains)
df.to_json("prev.jsonl", orient="records", lines=True)

New domains serving your brand's imagery = the week's actionable signal.

How do I check the suspect pages?

sourcePageUrl is the page context — open the top new-domain records and look: legitimate review, or scraped listing with your photos? position tells you how visible each one is.

Sample output

{"imageUrl": "https://cdn.example-retailer.com/acme-widget-front.jpg",
 "width": 1200, "height": 1200,
 "sourcePageUrl": "https://example-retailer.com/products/acme-widget",
 "domain": "example-retailer.com",
 "query": "Acme Widget Pro", "position": 3}

Common pitfalls

Google image rankings personalize and localize — pin country/language and treat positions as directional, not absolute. CDN-hosted images may list the CDN domain; check sourcePageUrl for the true host page. Image URLs rot; archive the record set even if you don't fetch the files. The actor returns the index — enforcement decisions stay with you.

Related use cases

Frequently asked questions

What does the actor return per image result?

imageUrl, pixel width and height, the sourcePageUrl where it appeared, the hosting domain, the query that found it, and rank position — enough to attribute every surfaced image.

Can I search by image, not text?

This actor covers text queries. For reverse-image tracking, query your product name and brand terms and match returned imageUrls or domains against your known asset hosts.

How do I spot unauthorized use?

Group results by domain. Domains that are not yours, not retailers, and not press are candidates for review — the sourcePageUrl tells you the exact page to inspect.

How often should I re-run?

Weekly is a sane default for brand terms. Image rankings move slower than web results, so daily runs mostly reconfirm the same set.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.