# Reverse Image Search — Matching Pages & Images (`sian.agency/reverse-image-search-scraper`) Actor

Search the web with a public image URL. Get matching page links, domains, thumbnails, image sizes, dates, and available shopping prices. Each searched image produces one row containing its complete match list. Bulk input, JSON/CSV export, and a processing report.

- **URL**: https://apify.com/sian.agency/reverse-image-search-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Marketing, Developer tools, Business
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $110.00 / 1,000 image searches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Reverse Image Search — Matching Pages & Images 🖼️

[![SIÁN Agency](https://img.shields.io/badge/Store-SIÁN%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Google Images](https://img.shields.io/badge/Store-Pinterest-1AE392)](https://apify.com/sian.agency/pinterest-scraper?fpr=sian) [![Google Search](https://img.shields.io/badge/Store-Google%20Search-1AE392)](https://apify.com/sian.agency/google-serp-scraper?fpr=sian) [![Google Shopping](https://img.shields.io/badge/Store-Google%20Shopping-1AE392)](https://apify.com/sian.agency/google-shopping-price-scraper?fpr=sian)

#### 🔎 Search with an image and export its matching pages

##### For photographers, researchers, brand teams and developers

### 🔎 What is the Reverse Image Search Scraper — and when should you use it?

The **Reverse Image Search Scraper** turns public image URLs and their Google Lens matches into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** matching page links, source domains, thumbnails, image dimensions, dates, and shopping fields where available. Each image produces one record with its complete matches array.

**Use something else when:** you want web pages found by a text query. Use [Google Search Scraper](https://apify.com/sian.agency/google-serp-scraper?fpr=sian) for keyword-based web search. This actor searches with an image. It does not provide OCR, AI answers, or proof of an exact copy.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/reverse-image-search-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is per completed image search, including no-match searches; failed lookups have no search-event charge. A separate run-start fee applies.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want matching web pages and images for public image URLs using the Apify Actor `sian.agency/reverse-image-search-scraper`.

Use it when I need: matching page links, source domains, thumbnails, image dimensions, dates, and shopping fields where available. Each image produces one record with its complete matches array.

Don't use it when: you want web pages found by a text query — use google-serp-scraper instead.

How to call it: set operation to search and supply imageUrl, or provide direct URL entries in bulkUrls. The bulk list takes precedence. Read each output record’s matches array.

Start with this input:
{
  "operation": "search",
  "imageUrl": "https://i.imgur.com/HBrB8p0.png"
}

Ask me which public image URLs they want searched, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Find matching pages for my public campaign image and group them by domain.*
- *Search these public product images and list any matching shopping prices.*
- *Review the page links and published dates for this public image.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/reverse-image-search-scraper.md](https://apify.com/sian.agency/reverse-image-search-scraper.md).

### 📋 Overview

Reverse Image Search searches Google Lens with public image URLs. Each supplied image produces one record containing its complete match list, a match count and a first-match preview.

One completed image search is one billable event. All returned matches are included; there is no per-match minimum. A valid search that finds no matches still counts as a completed search. Failed lookups have no image-search event charge. A separate run-start fee applies.

### ✨ Features

- 🖼️ **Search by image**: Supply a publicly accessible HTTP or HTTPS image URL.
- 📚 **Bulk input**: Search a list of images and keep their match lists separate.
- 🔗 **Page links**: Review the websites and pages associated with visual matches.
- 🌐 **Source domains**: Group results by publisher or website.
- 📝 **Image metadata**: Keep titles, thumbnails, dimensions and dates when available.
- 🛍️ **Shopping fields**: Preserve prices and availability when a match includes them.
- 📦 **Exports**: Download JSON for the complete nested data or CSV for image-level summaries.
- 📄 **Processing report**: Read run counts, failed-input advice and the platform’s charge receipt.

### 🎬 Quick Start

Open the actor, use the example image in the form, and click Start. The dataset contains one image-search record. Open its matches array to inspect every matching page.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~reverse-image-search-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"operation":"search","imageUrl":"https://i.imgur.com/HBrB8p0.png"}'
```

### 🚀 Getting Started

#### Step 1: Choose a public image

Copy an image URL that loads without signing in. The URL should point to the image, rather than a web page containing it. Avoid private, confidential, or temporary signed links.

#### Step 2: Choose single or bulk input

Use Image URL for one image. For several images, add direct URL entries to Multiple image URLs. The bulk list takes precedence, so the example image will not be added to your list. Duplicates are searched once.

#### Step 3: Review and export

Open the dataset for the image-level preview. Download JSON for every match and its optional fields. The Processing Report shows completed searches, failures and accepted event charges.

### 📥 Input Configuration

| Field | Type | Required | Description |
|---|---|---|---|
| `operation` | string | No | Search is the only operation. |
| `imageUrl` | string | For single input | Public HTTP or HTTPS image URL. |
| `bulkUrls` | array | For bulk input | Direct image URL entries; takes precedence over imageUrl. |

Provide either imageUrl or a non-empty bulkUrls list. The Console has an example; an empty API input does not create a demo search. File imports and authenticated images are not supported.

```json
{"operation":"search","bulkUrls":[{"url":"https://i.imgur.com/HBrB8p0.png"}]}
```

### 📤 Output

One record represents one searched image. The matches array contains the full returned result list. Preview fields describe the first match only.

| Field | Type | Meaning |
|---|---|---|
| `sourceImageUrl` | string | Searched image |
| `matchCount` | integer | Matches |
| `matches` | array | All matches |
| `topMatchTitle` | string | First match |
| `topMatchUrl` | string | First matching page |
| `topMatchDomain` | string | First matching domain |
| `topMatchImageUrl` | string | First matching image |
| `topMatchDate` | string | First match date |
| `topMatchImageWidth` | integer | Image width |
| `topMatchImageHeight` | integer | Image height |
| `status` | string | Status |
| `errorMessage` | string | Reason |
| `_operation` | string | Operation |
| `_fetchedAt` | string | Retrieved at |

Each match can include title, link, domain, logo, date, image, image_width and image_height. Some shopping matches also include price and availability. Optional fields are preserved as returned; they are not filled with guessed values.

```json
{
  "sourceImageUrl":"https://i.imgur.com/HBrB8p0.png",
  "matchCount":392,
  "topMatchDomain":"www.fox5vegas.com",
  "status":"success",
  "matches":[{"title":"US Rep. says adult animated sitcom with Danny DeVito as voice of ...","link":"https://www.fox5vegas.com/2022/09/08/us-rep-adult-animated-sitcom-with-danny-devito-voice-satan-is-evil/","domain":"www.fox5vegas.com","date":"Sep 8, 2022","image_width":800,"image_height":450}]
}
```

This is an abbreviated real example; its complete matches array contained 392 entries. Counts vary by image. A matching page does not prove authorship, image ownership, permission to reuse, or an exact copy.

### 💼 Use Cases

#### 1. Image attribution research

Photographers and editors collect matching pages and review likely sources before publishing.

**Input:** Public image URL. **Output:** Matching page links and image metadata. **Use:** Review the matches in your own workflow.

#### 2. Brand image monitoring

Marketing teams search their public campaign images and compare the websites that reuse similar assets.

**Input:** Public image URL. **Output:** Matching page links and image metadata. **Use:** Review the matches in your own workflow.

#### 3. Product research

Retail researchers inspect visual matches and any shopping prices or availability present in the result.

**Input:** Public image URL. **Output:** Matching page links and image metadata. **Use:** Review the matches in your own workflow.

#### 4. Content verification

Newsroom researchers review older matching pages and published dates. A visual match is a lead, not proof that a claim is true.

**Input:** Public image URL. **Output:** Matching page links and image metadata. **Use:** Review the matches in your own workflow.

#### 5. Creative asset audits

Agencies export image searches to JSON and attach source links to their asset-review workflow.

**Input:** Public image URL. **Output:** Matching page links and image metadata. **Use:** Review the matches in your own workflow.

#### 6. Bulk image discovery

Developers submit a list of public image URLs and receive one complete record per searched image.

**Input:** Public image URL. **Output:** Matching page links and image metadata. **Use:** Review the matches in your own workflow.

### 🔗 Integration Examples

#### JavaScript

```javascript
const response = await fetch('https://api.apify.com/v2/acts/sian.agency~reverse-image-search-scraper/run-sync-get-dataset-items', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ operation: 'search', imageUrl: 'https://i.imgur.com/HBrB8p0.png' })
});
if (!response.ok) throw new Error(`Search failed: ${response.status}`);
const records = await response.json();
console.log(records[0].matches);
```

#### Python

```python
import json, os, urllib.request
request = urllib.request.Request(
    'https://api.apify.com/v2/acts/sian.agency~reverse-image-search-scraper/run-sync-get-dataset-items',
    data=json.dumps({"operation":"search","imageUrl":"https://i.imgur.com/HBrB8p0.png"}).encode(),
    headers={"Authorization":"Bearer " + os.environ["APIFY_TOKEN"], "Content-Type":"application/json"},
    method='POST',
)
with urllib.request.urlopen(request, timeout=300) as response:
    records = json.load(response)
print(records[0]['matches'])
```

#### cURL

Use the Quick Start command to return the dataset directly. For longer bulk runs, use the asynchronous /runs endpoint and retrieve the dataset when the run finishes.

#### Automation Workflows: N8N, Zapier or Make

1. Schedule the workflow or receive a new public image URL.
2. Send an HTTP request to the actor’s /runs endpoint.
3. Wait for the run to finish and read its dataset.
4. Save the matches to your database, spreadsheet or review queue.

### 📊 Performance & Pricing

#### Free Apify accounts

Search up to five distinct images per run. The same fields and match lists are returned. Free-plan event rates differ from paid-plan rates; review the run’s maximum charge before starting.

#### Paid Apify accounts

No per-run image cap is imposed by the actor. Your maximum charge, available credits and service availability still apply. A temporary failure can be tried once more automatically. If it still fails, the dataset identifies the affected image without an image-search event charge.

| Apify tier | Per completed image search | Per 1,000 searches |
|---|---:|---:|
| FREE | $0.50000 | $500.00 |
| BRONZE | $0.12500 | $125.00 |
| SILVER | $0.11750 | $117.50 |
| GOLD | $0.11000 | $110.00 |
| PLATINUM | $0.10375 | $103.75 |
| DIAMOND | $0.09750 | $97.50 |

The run-start event costs $0.005 on paid tiers and $0.05 on the Free tier. One completed search includes all its returned matches. No-match searches count as completed searches; failed lookups have no image-search event charge. Start fees apply even when validation or retrieval fails.

These are launch prices. [Check current pricing](https://apify.com/sian.agency/reverse-image-search-scraper?fpr=sian) before running. The report reads accepted charges and prices from the platform. Processing time varies by image and availability; no speed guarantee is made.

### ❓ FAQ

#### Is every match a copy of my image?

No. Google Lens returns visually related pages and images. Review each match before making an attribution or ownership claim.

#### How is a search billed?

A completed image search is one event, including all its matches. A completed search with no matches is still charged. Failed lookups have no image-search charge. Every run also has a run-start fee.

#### Can I upload an image?

Provide a public HTTP or HTTPS image URL. File uploads, authenticated images, and private signed links are not supported.

#### What does the matches array contain?

Matching page title, page URL, domain, thumbnail, dimensions, and published date when available. Some shopping matches include price and availability.

#### Why does a date look like Sep 8, 2022?

Dates are kept as the result publishes them. A date is not necessarily the original image publication date.

#### Can I use schedules?

Yes. Schedule runs in Apify and send dataset records to your own comparison workflow. This actor does not keep a history of changes.

### 🐛 Troubleshooting

| Symptom | What to check |
|---|---|
| Image could not be retrieved | Open its URL in a private browser window; check that it loads without authentication. |
| Temporary unavailability | Retry that image in a few minutes. The report provides a failed-input replay. |
| Capacity reached | Contact the actor’s support before retrying. |
| Billing limit reached | Review Max total charge and available Apify credits. |
| No matches | Try another public image or review whether it appears on the indexed web. A completed no-match search is charged. |
| CSV does not show every match | Download JSON and read the nested matches array. |

### ⚠️ Trademark Disclaimer

Google and Google Lens are trademarks of Google LLC. SIÁN Agency is independent and is not endorsed by Google. Review image rights and source-site requirements before reusing any content.

### ⚖️ Legal Disclaimer

Use this actor for images you are entitled to submit. Search results are references for your own review, rather than a grant of image rights. Check the linked publisher’s terms and the applicable image licence before copying or redistributing content. Respect privacy and avoid submitting confidential image links.

### 🤝 Support

- 🐛 [Report an issue](https://apify.com/sian.agency/reverse-image-search-scraper/issues) with the input and run link.
- ⭐ [Leave a review](https://apify.com/sian.agency/reverse-image-search-scraper/reviews) after trying the actor.
- ✨ [Browse SIÁN Agency’s actors](https://apify.com/sian.agency?fpr=sian).

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/reverse-image-search-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

Search Google Lens with one image or a list of public image URLs. One row contains the complete set of matches for that image. Matching pages are evidence for review, not proof of ownership or an exact visual duplicate.

## `imageUrl` (type: `string`):

Public HTTP or HTTPS image URL. The example is ready for a test run. Each image search returns one row with its complete matches array. Leave this empty when using the bulk list. Private, signed, or confidential image links are not suitable.

## `bulkUrls` (type: `array`):

Search multiple public images, one URL per entry. Direct URL entries are supported; file imports are not. This list takes precedence over the single-image field. Duplicate URLs are searched once. Free Apify accounts can search at most five images per run.

## Actor input object example

```json
{
  "operation": "search",
  "imageUrl": "https://i.imgur.com/HBrB8p0.png"
}
```

# Actor output Schema

## `googleLensImageSearches` (type: `string`):

Image search records with all matching pages and images in the matches array. Open the dataset or export JSON to read every match.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "operation": "search",
    "imageUrl": "https://i.imgur.com/HBrB8p0.png"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/reverse-image-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "operation": "search",
    "imageUrl": "https://i.imgur.com/HBrB8p0.png",
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/reverse-image-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "operation": "search",
  "imageUrl": "https://i.imgur.com/HBrB8p0.png"
}' |
apify call sian.agency/reverse-image-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/reverse-image-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0cSP529mdfzcc3Hcf/builds/YscKHXH2i5CnPLdAt/openapi.json
