# Scraper by Image - 1688 / Alibaba / AliExpress (`devcake/scraper-by-image`) Actor

Search products by image across 1688, Alibaba, and AliExpress with a powerful scraper built for visual sourcing, product discovery, and automated marketplace research.

- **URL**: https://apify.com/devcake/scraper-by-image.md
- **Developed by:** [devcake](https://apify.com/devcake) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 27 total users, 16 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🖼️ Find Products by Photo Across 1688, Alibaba & AliExpress

**Unified Image Search** is an easy-to-use tool that lets you find similar products across **1688**, **Alibaba**, and **AliExpress** using a single photo. Just upload a product picture and get back a list of similar items with prices, supplier details, ratings, and sales numbers — perfect for finding products to sell, comparing suppliers, and shopping smarter.

> 🔎 *Upload a photo. See similar products. Compare and choose.*

---

### 📑 What's Inside

- [📖 What This Tool Does](#-what-this-tool-does)
- [🤔 Why Search by Photo?](#-why-search-by-photo)
- [🛒 Marketplaces You Can Search](#-marketplaces-you-can-search)
  - [What's the same across all three providers](#whats-the-same-across-all-three-providers)
  - [What's different per provider](#whats-different-per-provider)
  - [Example output — one row per provider](#example-output--one-row-per-provider)
- [✨ Why People Use It](#-why-people-use-it)
- [👥 Who It's For](#-who-its-for)
- [💡 Things You Can Do With It](#-things-you-can-do-with-it)
- [🚀 How to Get Started](#-how-to-get-started)
- [📊 What You'll See in Your Results](#-what-youll-see-in-your-results)
- [❓ Common Questions](#-common-questions)
- [🔗 People Also Search For](#-people-also-search-for)
- [⚠️ A Quick Note](#️-a-quick-note)

---

### 📖 What This Tool Does

**Unified Image Search** helps you find matching or similar products online using a **photo** instead of typing keywords. It's built for online sellers, resellers, sourcing agents, product researchers, marketplace shoppers, and anyone who wants a faster way to discover products across major online marketplaces.

Just upload a product photo, and the tool finds related listings, suppliers, prices, product titles, images, and marketplace details — all in one place.

#### 🎯 What Does "Search by Photo" Mean?

**Searching by photo** (sometimes called **reverse image search** or **visual search**) means uploading a picture of a product and letting the website show you other products that look like it. This is super helpful when you don't know the exact product name, when translations are confusing, or when you just want to see similar options.

---

### 🤔 Why Search by Photo?

Searching with words can be slow and hit-or-miss, especially when product names, translations, or category labels are inconsistent. **Searching with a photo** is faster and more accurate — you don't even need to know the product name.

This tool helps you:

- ✅ Spend less time hunting for products
- ✅ Compare suppliers more quickly across different marketplaces
- ✅ Find products even when you don't know what they're called
- ✅ Build a smarter, faster way to source products

---

### 🛒 Marketplaces You Can Search

| Marketplace | What It's Known For |
|-------------|---------------------|
| **1688** | China's biggest wholesale marketplace — great for buying directly from factories at low minimum order quantities |
| **Alibaba** | The global B2B platform with verified suppliers ready for international trade |
| **AliExpress** | A worldwide retail marketplace with lots of customer reviews and sales data |

No matter which marketplace you pick, your results come back in the same simple format — so you can easily compare them side by side.
 |

#### Example output — one row per provider

Trimmed, real examples (with the current code). Every row in the dataset has the same shape; only the populated fields differ.

**1688** (wholesale, Chinese):

```json
{
  "provider": "1688",
  "image_rank": 1,
  "product_id": "785042982479",
  "title": "洁厕灵液厕所马桶清洁剂洗厕所神器强力除垢臭去异味黄渍留香",
  "product_url": "https://dj.1688.com/ci_bb?a=281&...",
  "image_url": "https://cbu01.alicdn.com/img/ibank/O1CN01FjGefj1L65l3PRbBi_!!3915221249-0-cib.jpg",
  "images": ["https://cbu01.alicdn.com/img/ibank/O1CN01FjGefj1L65l3PRbBi_!!3915221249-0-cib.jpg", "...", "...", "...", "...", "...", "..."],
  "description": "品牌:海布森 箱装数量:45 计量单位:瓶 品牌类型:国货品牌 货号:HBS-歪头洁厕-樱花500 净含量:500ml 香型:樱花 产地:湖北",
  "category_id": "122258006",
  "category_path": "122258006 122212003 130822220",
  "unit": "瓶",
  "price_min": 2.5,
  "price_max": 2.5,
  "currency": "CNY",
  "currency_code": "CNY",
  "moq": 1,
  "shop_name": "小森(湖北)实业发展有限公司",
  "shop_url": "https://sneakerclub.1688.com?tracelog=p4p",
  "country": "CN",
  "years_as_member": 7,
  "rating": 4.08,
  "service_score": 4.08,
  "consultation_score": 4.0,
  "logistics_score": 3.43,
  "return_score": 4.67,
  "review_count": null,
  "sold_count": 28621,
  "sold_90d": 7947,
  "month_sold": 2432,
  "bookings": 7143,
  "inquiry_uv": 75,
  "factory_inspected": true,
  "delivery_hours": 48,
  "return_days": 7,
  "member_credit_url": "https://xinyong.1688.com/credit/publicCreditDetail.htm?...",
  "image_id": "1329108775620620440",
  "search_mode": "mtop_upload",
  "tags": ["湖北", "武汉市", "A", "源头工厂", "超级工厂", "生产加工", "高回购率", "验厂", "48小时发货", "单位:瓶"]
}
````

**Alibaba** (B2B, English):

```json
{
  "provider": "alibaba",
  "image_rank": 1,
  "product_id": "1601440928964",
  "title": "Wallpaper Latex Paint Wall Painted Wall Tile Wall Glass Cleaning Paste Bathroom Kitchen Remover Cream",
  "product_url": "https://www.alibaba.com/product-detail/Wallpaper-Latex-Paint-Wall-Painted-Wall_1601440928964.html",
  "image_url": "https://s.alicdn.com/@sc04/kf/H64f64ad8b4954ee8899756453fedcaa8L.jpg_300x300.jpg",
  "images": ["https://s.alicdn.com/@sc04/kf/H64f64ad8b4954ee8899756453fedcaa8L.jpg_300x300.jpg", "...", "...", "...", "...", "..."],
  "category_path": "601_1000_1102",
  "price_min": 0.55,
  "price_max": 1.2,
  "currency": "USD",
  "currency_code": "USD",
  "moq": 1,
  "shop_name": "Jiangsu Yajie Trading Co., Ltd.",
  "shop_url": "https://jsyjsm.en.alibaba.com/company_profile.html",
  "country": "CN",
  "years_as_gold_supplier": 6,
  "is_customizable": false,
  "instant_order": false,
  "rating": 4.9,
  "logistics_score": 4.8,
  "review_count": 30,
  "sold_count": null,
  "month_sold": null,
  "image_id": "/icbuimgsearch/imageBase64_3855ae10b0094558854d4cee5ecc1b4f.jpeg@@oss_us",
  "search_mode": "data_url_upload",
  "tags": ["Easy Return"]
}
```

**AliExpress** (retail, English):

```json
{
  "provider": "aliexpress",
  "image_rank": 1,
  "product_id": "1005012463231044",
  "title": "Kitchen Foam Cleaner, Cooktop Decontaminate Oil Decontaminate Clean A Variety Of",
  "product_url": "https://www.aliexpress.us/item/1005012463231044.html",
  "image_url": "https://ae-pic-a1.aliexpress-media.com/kf/Sc68f0a1d511b48f29eff9600b00a8aabB.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/Sc68f0a1d511b48f29eff9600b00a8aabB.jpg"],
  "category_id": "202188604",
  "category_path": "15,200033149,1514,202188604",
  "price_min": 9.85,
  "price_max": 9.85,
  "price_original_min": 61.53,
  "price_original_max": 61.53,
  "price_discount_pct": 84,
  "currency": "$",
  "currency_code": "USD",
  "moq": null,
  "shop_name": null,
  "shop_url": null,
  "country": "US",
  "rating": null,
  "review_count": null,
  "sold_count": null,
  "month_sold": null,
  "lunch_time": "2026-06-07 00:00:00",
  "badge_title": "Best similar item",
  "badge_icon": "https://ae-pic-a1.aliexpress-media.com/kf/S3cc733bb652f443c8eae09deb1b5fcb89.png",
  "product_type": "natural",
  "image_id": "OSS/ae-image-search-us/2026-06-24/3fd17003-f1f8-4957-a95d-584046d04bfc.jpg",
  "search_mode": "mtop_upload",
  "tags": ["New shoppers save $6.14", "Delivery: Jun. 27 - Jul. 02"]
}
```

***

### ✨ Why People Use It

#### 🔍 Find Products Using a Photo

Upload a product picture and discover similar items across 1688, Alibaba, and AliExpress.

#### ⏱️ Save Hours of Searching

Skip the endless clicking and scrolling — the tool does the searching for you.

#### 🏭 Find More Suppliers

Discover similar products from different sellers so you can compare your options.

#### 🎯 Find Products Without Knowing the Name

Even when translations are confusing or category names don't match, a photo does the trick.

#### ⚖️ Compare Across Marketplaces

Look at prices, sellers, ratings, and product details across multiple platforms at once.

#### 🤖 Great for Online Business Automation

Perfect for product research, dropshipping, supplier discovery, catalog building, competitor tracking, and marketplace monitoring.

***

### 👥 Who It's For

This tool is useful for:

- 🛍️ **Online sellers** looking for new products to sell
- 📦 **Dropshippers** searching for similar products to resell
- 🤝 **Sourcing agents** comparing suppliers across different marketplaces
- 📚 **Product researchers** building product catalogs
- 📈 **Marketplace shoppers and analysts** tracking prices and availability
- 💻 **Developers and creators** building visual product search features
- ⚙️ **Automation teams** collecting product data at scale

***

### 💡 Things You Can Do With It

#### 🔥 Popular Uses

- 🔎 **Search 1688 by photo** — Find wholesale alternatives directly from Chinese factories
- 🔎 **Search Alibaba by photo** — Discover verified B2B suppliers around the world
- 🔎 **Search AliExpress by photo** — Find retail sellers and customer reviews
- 🎯 **Find products that look similar** to something you already like
- 🏪 **Discover alternative suppliers** for a product you're already buying
- ⚖️ **Compare the same product** across different marketplaces
- 🤖 **Automate reverse image search** for large-scale product research
- 📊 **Collect product details** in a clean, organized format
- 🧱 **Build a product sourcing workflow** around visual search
- 🚀 **Speed up product research** for your online store or dropshipping business

#### 🛠️ Real-World Examples

##### 💰 Find a Supplier from a Single Photo

See a product you like somewhere? Upload the photo and instantly get a list of suppliers selling the same or similar items — with prices you can compare side by side.

##### 💱 Compare Factory Price vs Retail Price

Run the same photo against **1688** (factory price) and **AliExpress** (retail price) to see the difference and decide where to buy.

##### 🏬 Discover Backup Suppliers

Already buying from one supplier? Upload your product photo to find other shops selling the same thing — useful for negotiating better deals or finding a backup.

##### 👀 Keep an Eye on Competitors

Save photos of competitor products and re-search them from time to time to spot new sellers, price changes, and trending items.

##### 📚 Build a Product Catalog Fast

Process a batch of product photos to quickly fill a catalog with titles, prices, supplier info, and keywords — all organized and ready to use.

***

### 🚀 How to Get Started

1. **Pick a marketplace** — Choose **1688**, **Alibaba**, or **AliExpress**.
2. **Share your image** — Paste one or more image links, or upload a single photo from your computer or phone.
3. **Get your results** — Receive a clean list of similar products with prices and supplier details.

> 💡 *The default settings work great for most people — you don't need to change anything to get started.*

***

### 📊 What You'll See in Your Results

For every product match, you'll get:

| Result Detail | What It Means |
|---------------|---------------|
| 🖼️ **Product Photo** | The picture of the matching product from the marketplace |
| 📝 **Product Title** | The name of the product as listed |
| 🔗 **Product Link** | A direct link to the product page so you can visit it |
| 💰 **Price Range** | The lowest and highest price for that product |
| 💱 **Currency** | Which currency the price is shown in (like USD or CNY) |
| 🏬 **Shop Name** | The seller or supplier selling the product |
| 🌍 **Country** | Where the seller is based (especially useful for AliExpress) |
| ⭐ **Customer Rating** | The average star rating from buyers |
| 💬 **Number of Reviews** | How many customers have left reviews |
| 📦 **Units Sold** | How many units the seller has sold (when available) |
| 🔢 **Match Rank** | How closely the product matches your photo (rank #1 is the best match) |
| 📏 **Minimum Order** | The minimum quantity you have to buy (for 1688 and Alibaba) |
| 🏷️ **Product Tags** | Keywords the marketplace uses to describe the product |

***

### ❓ Common Questions

#### What is "search by photo"?

**Search by photo** (also called **reverse image search**) means uploading a picture and getting back other pictures that look similar. This tool uses it specifically for **finding products** across online marketplaces.

#### How does it work?

You give the tool a product photo (a link or a file), and it asks the marketplace to show similar listings. The marketplace responds with products that look like your photo, plus details like price, supplier, and ratings.

#### Can I search 1688?

Yes — full support for **1688 search by photo**, perfect for finding factory-direct wholesale products.

#### Can I search Alibaba and AliExpress?

Yes — full support for both **Alibaba search by photo** (for B2B suppliers) and **AliExpress search by photo** (for retail sellers worldwide).

#### Can I compare prices across different marketplaces?

Yes — you can run the same photo through multiple marketplaces (like **1688 vs AliExpress**) to compare wholesale vs retail prices.

#### What kind of details will I get back?

Each match includes a photo, title, product link, price range, currency, shop name, country, rating, reviews, units sold, how closely it matches your photo, minimum order quantity (when applicable), and product tags.

#### Is this tool officially connected to 1688, Alibaba, or AliExpress?

No — see the [note below](#️-a-quick-note). This is an independent helper tool; the marketplace names are only used to describe where it can search.

#### Do I need any technical skills?

Not at all. If you can upload a photo and click a button, you can use this tool.

***

### ⚠️ A Quick Note

This tool is **not affiliated with, endorsed by, or officially connected to 1688, Alibaba, or AliExpress**. The marketplace names are only used to describe which shopping sites the tool can search.

# Actor input Schema

## `provider` (type: `string`):

Which marketplace to reverse-search. AliExpress runs against the US domain by default.

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

Paste one or more public image URLs. AliExpress additionally accepts local file paths (e.g. /tmp/photo.jpg). Ignored if you upload an image below.

## `imageFile` (type: `string`):

Single image upload. Overrides the URLs above when provided.

## `maxProducts` (type: `integer`):

Cap on matched products returned per input image.

## `maxConcurrency` (type: `integer`):

How many input images to process at the same time.

## `maxRetries` (type: `integer`):

Retries for transient or anti-bot failures. Input and parser errors are not retried.

## `minDelay` (type: `number`):

Lower bound for provider delay settings and the default shared request-rate calculation.

## `maxDelay` (type: `number`):

Upper bound for provider delay settings. Higher values are safer but slower.

## `requestRatePerSecond` (type: `number`):

Shared token-bucket rate for provider-owned HTTP calls.

## `proxy` (type: `object`):

Apify proxy picker. Defaults to RESIDENTIAL when omitted. AliExpress ignores this setting and always pins to RESIDENTIAL + country=US (Akamai blocks other US proxy types and non-US IPs mis-localise results).

## `maxImageBytes` (type: `integer`):

Reject input images larger than this before preprocessing.

## `maxImagePixels` (type: `integer`):

Reject decoded input images larger than this pixel count.

## Actor input object example

```json
{
  "provider": "aliexpress",
  "imageUrls": [
    "https://m.media-amazon.com/images/I/61Cev2aFG5L._AC_SX695_.jpg"
  ],
  "maxProducts": 40,
  "maxConcurrency": 2,
  "maxRetries": 1,
  "minDelay": 2,
  "maxDelay": 5,
  "requestRatePerSecond": 0.5,
  "maxImageBytes": 10485760,
  "maxImagePixels": 25000000
}
```

# Actor output Schema

## `matches` (type: `string`):

One row per matched product, across all input images. Flat table with provider, product details, pricing, shop, and engagement metrics.

## `overview` (type: `string`):

Same dataset rendered as a flat table view (provider, source image, title, price range, shop, ratings, sales).

## `summary` (type: `string`):

Per-image success / matched count / duration, plus totals for the run.

# 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://m.media-amazon.com/images/I/61Cev2aFG5L._AC_SX695_.jpg"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("devcake/scraper-by-image").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://m.media-amazon.com/images/I/61Cev2aFG5L._AC_SX695_.jpg"] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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://m.media-amazon.com/images/I/61Cev2aFG5L._AC_SX695_.jpg"
  ]
}' |
apify call devcake/scraper-by-image --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=devcake/scraper-by-image",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Scraper by Image - 1688 / Alibaba / AliExpress",
        "description": "Search products by image across 1688, Alibaba, and AliExpress with a powerful scraper built for visual sourcing, product discovery, and automated marketplace research.",
        "version": "0.0",
        "x-build-id": "bMEOVy8QDcTqL1I0W"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/devcake~scraper-by-image/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-devcake-scraper-by-image",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/devcake~scraper-by-image/runs": {
            "post": {
                "operationId": "runs-sync-devcake-scraper-by-image",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/devcake~scraper-by-image/run-sync": {
            "post": {
                "operationId": "run-sync-devcake-scraper-by-image",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "provider"
                ],
                "properties": {
                    "provider": {
                        "title": "Provider",
                        "enum": [
                            "aliexpress",
                            "1688",
                            "alibaba"
                        ],
                        "type": "string",
                        "description": "Which marketplace to reverse-search. AliExpress runs against the US domain by default.",
                        "default": "aliexpress"
                    },
                    "imageUrls": {
                        "title": "Image URLs",
                        "type": "array",
                        "description": "Paste one or more public image URLs. AliExpress additionally accepts local file paths (e.g. /tmp/photo.jpg). Ignored if you upload an image below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "imageFile": {
                        "title": "Or upload an image",
                        "type": "string",
                        "description": "Single image upload. Overrides the URLs above when provided."
                    },
                    "maxProducts": {
                        "title": "Max products per image",
                        "minimum": 30,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Cap on matched products returned per input image.",
                        "default": 40
                    },
                    "maxConcurrency": {
                        "title": "Concurrent images",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many input images to process at the same time.",
                        "default": 2
                    },
                    "maxRetries": {
                        "title": "Retries per image",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Retries for transient or anti-bot failures. Input and parser errors are not retried.",
                        "default": 1
                    },
                    "minDelay": {
                        "title": "Min delay (sec)",
                        "minimum": 0,
                        "maximum": 60,
                        "type": "number",
                        "description": "Lower bound for provider delay settings and the default shared request-rate calculation.",
                        "default": 2
                    },
                    "maxDelay": {
                        "title": "Max delay (sec)",
                        "minimum": 0,
                        "maximum": 120,
                        "type": "number",
                        "description": "Upper bound for provider delay settings. Higher values are safer but slower.",
                        "default": 5
                    },
                    "requestRatePerSecond": {
                        "title": "Shared request rate (req/sec)",
                        "minimum": 0.05,
                        "maximum": 10,
                        "type": "number",
                        "description": "Shared token-bucket rate for provider-owned HTTP calls.",
                        "default": 0.5
                    },
                    "proxy": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Apify proxy picker. Defaults to RESIDENTIAL when omitted. AliExpress ignores this setting and always pins to RESIDENTIAL + country=US (Akamai blocks other US proxy types and non-US IPs mis-localise results)."
                    },
                    "maxImageBytes": {
                        "title": "Max input image bytes",
                        "minimum": 1024,
                        "maximum": 52428800,
                        "type": "integer",
                        "description": "Reject input images larger than this before preprocessing.",
                        "default": 10485760
                    },
                    "maxImagePixels": {
                        "title": "Max input image pixels",
                        "minimum": 1,
                        "maximum": 100000000,
                        "type": "integer",
                        "description": "Reject decoded input images larger than this pixel count.",
                        "default": 25000000
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
