# Yandex Reverse Image Search Scraper (`piotrv1001/yandex-reverse-image-search-scraper`) Actor

The Yandex Reverse Image Search Scraper runs images through Yandex Images search by image, returning best-guess tags, the same image in other sizes, pages that contain it and similar images with source pages — ideal for image-theft checks, finding originals and OSINT.

- **URL**: https://apify.com/piotrv1001/yandex-reverse-image-search-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** AI, SEO tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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.

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

### 🚀 Yandex Reverse Image Search Scraper

Find where an image appears online and what it shows. The **Yandex Reverse Image Search Scraper** runs your images through Yandex Images' "search by image" and returns everything the results page offers: Yandex's best-guess tags, the same image in other sizes, the web pages that contain the image, and visually similar images with their source pages. Built for copyright and image-theft checks, finding the original or highest-resolution copy, brand and product monitoring, OSINT and fact-checking, and sourcing.

### ✨ Features

- 📷 **Any image in**: Direct image URLs (JPG, PNG, WebP, GIF, AVIF or TIFF, up to 10 MB) or base64 data: URLs. The image is sent to Yandex as a file, so hotlink-protected and private URLs that Yandex cannot open still work.
- 🏷️ **Best guess**: The tags Yandex thinks describe the image, such as "eiffel tower paris", each with its Yandex search link.
- 📐 **Other sizes**: The same picture at other resolutions, largest first, with width, height and size group (large, medium, small).
- 🌐 **Sites containing the image**: Page URL, page title, description, domain and the exact image file found on that page with its size. Hundreds per image.
- 🖼️ **Similar images**: Image URL, size, title and the page it comes from. Hundreds per image.
- 🎯 **Choose what you need**: Pick the result types and how many results per type you want.
- 🧹 **Clean data**: Repeats between result pages are removed, and Yandex's tracking tags are stripped from page links.

### 🛠️ How It Works

1. **Add image URLs**: Product photos, profile pictures, artwork, news photos or any picture you want to trace.
2. **Pick result types and depth**: Tags, other sizes, sites and similar images, and the maximum number of results per type.
3. **Run the scraper**: You get one row per result, marked with its `type` and numbered in Yandex's order, grouped by the image that found it.

### 💰 Pricing

| Event        |    Price | What you get                                                                        |
| ------------ | -------: | ----------------------------------------------------------------------------------- |
| Actor start  | $0.00005 | Once per run                                                                        |
| Image search |   $0.005 | Once per image searched                                                             |
| Result       |   $0.002 | Each saved row: a tag, another size, a page containing the image or a similar image |

One image with only the 50 top pages containing it costs $0.105. One image with all four result types at the default 50 per type (about 120 rows) costs about $0.25. 1,000 pages containing one image cost $2.005. Images that cannot be loaded are not charged. The run stops at your maximum charge per run.

### 📥 Input

| Field                | Type    | Description                                                                       |
| -------------------- | ------- | --------------------------------------------------------------------------------- |
| `imageUrls`          | array   | Image URLs or base64 data: URLs to search with.                                   |
| `resultTypes`        | array   | Any of `tag`, `otherSize`, `site`, `similar`. Default: all four.                  |
| `maxResultsPerType`  | integer | Results per image for each type, in Yandex's order. Default `50`, maximum `1000`. |
| `proxyConfiguration` | object  | Keep the default.                                                                 |

Example: pages that contain a photo, up to 300.

```json
{
    "imageUrls": [
        "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg"
    ],
    "resultTypes": ["site"],
    "maxResultsPerType": 300
}
```

### 📊 Sample Output Data

One row per result. All rows share the same fields; the ones a result type does not have are `null`. Example (one row of each type for one image):

```json
[
    {
        "searchImage": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
        "type": "tag",
        "position": 1,
        "title": "eiffel tower paris",
        "description": null,
        "pageUrl": "https://yandex.com/images/search?text=eiffel%20tower%20paris",
        "domain": null,
        "imageUrl": null,
        "width": null,
        "height": null,
        "thumbnailUrl": null,
        "sizeGroup": null,
        "scrapedAt": "2026-10-09T10:23:45.055Z"
    },
    {
        "searchImage": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
        "type": "otherSize",
        "position": 1,
        "title": null,
        "description": null,
        "pageUrl": null,
        "domain": "upload.wikimedia.org",
        "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/2900px-Mapcarta.jpg",
        "width": 2900,
        "height": 4830,
        "thumbnailUrl": null,
        "sizeGroup": "large",
        "scrapedAt": "2026-10-09T10:23:45.055Z"
    },
    {
        "searchImage": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
        "type": "site",
        "position": 1,
        "title": "History of Eiffel Tower - Timeline - Historydraft",
        "description": "History of Eiffel Tower - Timeline - Historydraft",
        "pageUrl": "https://historydraft.com/story/eiffel-tower/timeline/630",
        "domain": "historydraft.com",
        "imageUrl": "https://historydraft.com/files/e8410a95-da07-44b9-8183-aed8c76a1891",
        "width": 300,
        "height": 500,
        "thumbnailUrl": "https://avatars.mds.yandex.net/i?id=354b2f4a3cdc036b5a47dab4a46ade27da00637d-10024314-images-thumbs&n=13&w=296&h=180",
        "sizeGroup": null,
        "scrapedAt": "2026-10-09T10:23:45.055Z"
    },
    {
        "searchImage": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
        "type": "similar",
        "position": 1,
        "title": "Story of Eiffel Tower - Article - Historydraft",
        "description": "history,timelines,story,stories,on this day",
        "pageUrl": "https://historydraft.com/story/eiffel-tower/article/630",
        "domain": "historydraft.com",
        "imageUrl": "https://historydraft.com/files/e8410a95-da07-44b9-8183-aed8c76a1891",
        "width": 300,
        "height": 500,
        "thumbnailUrl": "https://avatars.mds.yandex.net/i?id=354b2f4a3cdc036b5a47dab4a46ade27da00637d-10024314-images-thumbs&n=13",
        "sizeGroup": null,
        "scrapedAt": "2026-10-09T10:23:45.055Z"
    }
]
```

- `type` is `tag`, `otherSize`, `site` or `similar`. `position` counts from 1 within each type and image.
- `site` rows: `pageUrl` is the page that contains your image and `imageUrl` is the copy of the image on that page. One page per row; several pages can host the same file.
- `similar` rows: `imageUrl` is the similar picture and `pageUrl` the page it was found on.
- Tags are Yandex's own wording and can be in Russian or English. Results lean towards the Russian-speaking web more than Google's.
- Images that fail come back as `{ "searchImage": "...", "status": "image_error" | "failed", "error": "..." }` rows and are not charged.

### 🔗 Use cases

- **Image theft and copyright checks**: List the sites that use your photos, artwork or product images.
- **Find the original**: Get the largest copy of a picture and the earliest pages that carry it.
- **OSINT and fact-checking**: Trace where a photo has been published and what it is described as.
- **Brand and product monitoring**: See which shops and marketplaces show your product photos.
- **Profile photo checks**: Spot reused pictures on dating, marketplace or social profiles.

### 🔗 Related Actors

- [Yandex Maps Scraper](https://apify.com/piotrv1001/yandex-maps-scraper): businesses, ratings and contacts from Yandex Maps.
- [Bing Visual Search Scraper](https://apify.com/piotrv1001/bing-visual-search-scraper): the same reverse image search on Bing.
- [Pinterest Visual Search Scraper](https://apify.com/piotrv1001/pinterest-visual-search-scraper): Pinterest pins that look like your image.
- [AliExpress Image Search Scraper](https://apify.com/piotrv1001/aliexpress-image-search-scraper): AliExpress products that match a photo.
- [Amazon Image Search Scraper](https://apify.com/piotrv1001/amazon-image-search-scraper): Amazon products that look like your photo.

Trace any picture across the web. Run the **Yandex Reverse Image Search Scraper** today! 🚀

# Actor input Schema

## `imageUrls` (type: `array`):

Images to search Yandex with: direct image URLs (JPG, PNG, WebP, GIF, AVIF or TIFF, up to 10 MB) or base64 data: URLs. One search per image. Leave empty to try two example photos.

## `resultTypes` (type: `array`):

Which results to return. Tags: Yandex's best guess of what the image shows. Other sizes: the same image in other resolutions. Sites: web pages that contain the image. Similar images: visually similar pictures with their source pages. Leave empty for all four.

## `maxResultsPerType` (type: `integer`):

Results to return per image for each result type, in Yandex's order. Tags and other sizes rarely exceed 20; sites and similar images go into the hundreds.

## `proxyConfiguration` (type: `object`):

Keep the default.

## Actor input object example

```json
{
  "imageUrls": [
    "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
    "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Nike_Air_Jordan_I.jpg/960px-Nike_Air_Jordan_I.jpg"
  ],
  "resultTypes": [
    "tag",
    "otherSize",
    "site",
    "similar"
  ],
  "maxResultsPerType": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "imageUrls": [
        "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
        "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Nike_Air_Jordan_I.jpg/960px-Nike_Air_Jordan_I.jpg"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/yandex-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 = {
    "imageUrls": [
        "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
        "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Nike_Air_Jordan_I.jpg/960px-Nike_Air_Jordan_I.jpg",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/yandex-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 '{
  "imageUrls": [
    "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg/960px-Tour_Eiffel_Wikimedia_Commons_%28cropped%29.jpg",
    "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Nike_Air_Jordan_I.jpg/960px-Nike_Air_Jordan_I.jpg"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/yandex-reverse-image-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/yandex-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/BB5uQrfw2cIPYASw5/builds/oqtvQR718ZZqPHdje/openapi.json
