# AliExpress Image Search: Find the Same Product (Paused) (`reliable_tools/aliexpress-image-search`) Actor

PAUSED while we obtain written permission from AliExpress: runs fetch no data and charge no results, each product gets a free "paused" row. Once resumed it finds the same item on AliExpress, verified by an image match.

- **URL**: https://apify.com/reliable_tools/aliexpress-image-search.md
- **Developed by:** [Reliable Tools](https://apify.com/reliable_tools) (community)
- **Categories:** E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## AliExpress Image Search: Find the Same Product

> **Paused: AliExpress search is on hold.** We are asking AliExpress for written permission or official API access before this Actor sends any further request to AliExpress or to the shops you enter. Until then every run returns one free row per product with `status: "paused_pending_permission"`. No data is fetched and no result is charged. Only the Actor start fee that Apify bills on every run ($0.00005 per GB of run memory) still applies. The description below shows how the Actor works once it is resumed.

This AliExpress image search finds the same product on AliExpress from a product link, a product photo or a product title. Shopify stores and most shops with standard product markup work. Every candidate is compared with your product photo, and only items that really look like the same product come back. Each match includes the AliExpress price, rating, units sold, product link and a match score. Use it to find a supplier for a product you saw, to check a dropshipping margin, or to spot copies of your own product.

### Who it's for

- **Dropshippers and store owners** who see a winning product and want to know where it is sourced and what it costs.
- **Product researchers** who check margins before testing a product.
- **Brands** who want to find copies of their own products on AliExpress.
- **Agencies and sourcing agents** who handle long product lists and need a first supplier shortlist fast.

### What you get

| Field | What it means |
|---|---|
| `title`, `url`, `imageUrl` | The matching AliExpress listing |
| `price`, `listPrice`, `currency` | Current price for your country. `listPrice` is the crossed-out price only when the search page shows one to automated visitors, which is often not the case, so expect it to be empty. `price` is empty for free-gift offers to new shoppers |
| `newShopperDeal` | `true` when the shown price is a one-time discount for first orders |
| `rating`, `sold` | Product rating and units sold as shown in the AliExpress search results |
| `isAd` | `true` when the search result was a paid placement |
| `match` | The AI check: `matchScore` from 0 to 1, plus the three probabilities behind it |
| `source` | What the Actor read from your input: title, photo, price |

Products without a verified match still get one row with `matchFound: false`, the number of candidates checked and the best score. That row is free.

### How it works

1. Reads your product page and takes the title and main photo (Shopify product data, standard product markup, or the page preview tags). Before any page is read, the Actor checks that site's robots.txt and skips pages that do not allow automated visitors.
2. Opens one public AliExpress search result page for the product name (the same page a shopper sees when searching).
3. Compares your photo with each candidate's photo. The AI check answers three fixed questions: is it the same item, is it built the same way, and is it clearly a different product. The `matchScore` is the average of those three answers.
4. Keeps candidates at or above your minimum score.

### How to run

1. Add one product per line in **Products to source**. Three formats work:
   - a product page URL: `https://www.encalife.com/products/sunset-lamp`
   - an image URL with search words: `https://example.com/photo.jpg | silicone baby bib`
   - just a title: `silicone collapsible dog bowl` (the AI then compares candidate photos against the title)
     Amazon product pages are not read, because Amazon does not allow automated access. For an Amazon product, paste its image URL followed by search words.
2. Set **Ship to country** and **Currency** so prices match your market.
3. Click **Start**. A single product takes about 15 to 30 seconds.

You can add `| your search words` after any URL to replace the automatic search, which helps when a shop uses a brand name as the product title.

### Example output

Real result for `https://www.encalife.com/products/sunset-lamp` (a USD 38 sunset lamp), shipped to the US:

```json
{
  "input": "https://www.encalife.com/products/sunset-lamp",
  "matchFound": true,
  "rank": 1,
  "source": { "title": "Sunset Lamp", "price": "38.00", "currency": "USD" },
  "searchQuery": "Sunset Lamp",
  "platform": "aliexpress",
  "title": "Sunset Projection Light Remote Control 16 Color Ambient Night Light, Bedroom Decoration Background Wall Photography Props",
  "url": "https://www.aliexpress.com/item/3256807158984795.html",
  "price": 5.95,
  "listPrice": null,
  "currency": "USD",
  "rating": 4.9,
  "sold": "5,000+ sold",
  "isAd": false,
  "match": {
    "matchScore": 0.92,
    "sameItem": 0.91,
    "sameBuild": 0.9,
    "differentProduct": 0.05,
    "method": "image_vs_image",
    "threshold": 0.6
  }
}
```

In that run, five of the ten candidates passed the check. The other five were different lamps (wall lights, mushroom lamps, spotlights) that came up for the same search words.

### How to use the AliExpress image search via API

You can run the AliExpress image search in the Apify Console, or call it from your own code through the Apify API. The **API** tab of this Actor has ready-to-copy examples for the JavaScript and Python API clients, the Apify CLI, plain HTTP and the OpenAPI definition. To use it from an AI assistant or agent, connect the Apify MCP server and add this Actor as a tool.

Send the same JSON input you would fill in the form, for example a list of product page URLs, a ship-to country and a currency, start a run, and read the results from the run's default dataset as JSON, CSV or Excel. You can also schedule runs in Apify.

### Pricing

You pay per result, not per minute:

- **Search**: charged once per input product that was searched and checked.
- **Verified match**: charged per match the AI check accepts and that lands in your dataset.

Inputs that could not be read and searches that returned nothing are free. Products without a verified match cost only the search. Use **Max verified matches per product** to cap what a single product can cost.

### Tips

- **Product pages with a clean main photo give the best results.** A photo of the product on a plain background works better than a lifestyle shot.
- **Generic products** (plain silicone bibs, basic phone cases) look alike across hundreds of sellers. Raise the minimum score to 0.75 if you only want very close matches.
- **Branded titles** like "The Original Cloud Slipper by Brandname" search better if you add plain words: `URL | cloud slippers platform`.
- **Check more candidates** (up to 30) when the product is niche and the first results are noisy.
- **Product location box** gives you the product's position inside each match photo, useful if you want to crop images for comparison sheets.

### Notes on the data

- **No supplier, shipping, stock or landed cost data.** The Actor only uses the public AliExpress search result page, which its robots.txt allows for automated visitors. It does not open AliExpress product pages or the product-detail service, so shipping cost, delivery time, store rating and stock are not part of the output. Check those on the listing before you order.
- **1688.com and Taobao**: their search and product pages require a login or a human check for visitors, so this Actor does not collect data from them. It only uses pages anyone can open without an account.

### FAQ

**Is this legal?**
The Actor reads one public AliExpress search result page per product, the same page anyone can open without logging in. It does not log in, does not solve captchas, uses no proxies, does not call internal AliExpress interfaces, identifies itself with an honest user agent, checks robots.txt before every page it requests, sends one AliExpress search at a time with a pause of at least 3 seconds, and searches at most 100 products per run. It does not build or keep a copy of AliExpress listings: each row is a link to a listing that matched your product. Candidate photos are only compared in memory and are linked in the output, not stored. AliExpress's own terms of use restrict commercial use and systematic collection of its content, so use the results for your own product research and open the listings on AliExpress itself. You are responsible for how you use the results, for example when you contact suppliers or reuse product images, which are owned by the sellers.

**How accurate is the AI check?**
In our tests on distinctive products it separated real matches from look-alikes well, as in the sunset lamp example. On very generic products, many listings genuinely are the same factory item with a different print, so expect more matches and judge the score yourself. Every row includes the score so you can filter it in your own sheet.

**Can I use only an image?**
Yes, add search words after the image URL: `https://example.com/photo.jpg | ceramic coffee dripper`. The search needs words, and the photo is used for the check.

**Why do some prices look very low?**
AliExpress shows special first-order prices to new shoppers. Those rows have `newShopperDeal: true`, and their regular price is higher. Other low prices can come from limited promotions or new-shopper offers that are not marked, so open the listing before you plan margins around a price.

**Can I paste an Amazon link?**
No. Amazon does not allow automated access to its pages, so Amazon product pages and short links (amzn.to, a.co) are refused. Paste the product image URL instead, followed by search words.

**What data about people does it handle?**
It targets product data, not personal data. Product photos are sent to an AI service for the image comparison and are used only for that check during the run.

**How does the AliExpress image search work?**
Paste a product page link. The Actor takes the title and main photo, searches AliExpress with the product name, and compares your photo with each candidate's photo. Only candidates at or above your minimum match score come back.

**Is this an AliExpress scraper?**
It reads public AliExpress search results only, without logging in and without solving captchas. Instead of a raw listing dump you only get the listings that pass the image check, with price, rating, units sold and a link to each listing.

**Can I use it for dropshipping product research?**
Yes. Compare the AliExpress price with your selling price as a first margin check, and open the listing for new-shopper deals to see the regular price. Shipping, import duties, VAT and payment fees are not included, so add them from the listing and your own costs.

### About Reliable Tools

Not affiliated with, endorsed or sponsored by AliExpress or Alibaba Group. AliExpress is a trademark of its owner.

Reliable Tools builds focused Actors that return checked, ready-to-use data instead of raw page dumps. See all our Actors at [apify.com/reliable_tools](https://apify.com/reliable_tools).

# Actor input Schema

## `products` (type: `array`):

One product per line. Use a product page URL (Shopify or any shop with standard product markup), an image URL followed by search words ("https://.../photo.jpg | silicone baby bib"), or just a product title. Add " | your search words" after any URL to override the search. Amazon product pages are not read: paste the product image URL with search words instead. Pages whose robots.txt does not allow automated visitors are skipped. At most 100 products are searched per run.

## `shipToCountry` (type: `string`):

Two-letter country code used for the prices AliExpress shows, e.g. US, DE, GB, FR, AU.

## `currency` (type: `string`):

Currency for prices, e.g. USD, EUR, GBP.

## `maxCandidatesToCheck` (type: `integer`):

How many AliExpress search results get the AI image check. More candidates find more matches but take longer.

## `minMatchScore` (type: `string`):

A candidate counts as a verified match when the AI check says it is the same product with at least this probability (0 to 1). 0.6 is a good default; use 0.75 or higher for stricter matches.

## `maxMatchesPerProduct` (type: `integer`):

Upper limit of verified matches returned (and charged) per input product.

## `includeProductBox` (type: `boolean`):

Adds where the product sits inside the match photo (box edges as fractions of the image), handy for cropping.

## Actor input object example

```json
{
  "products": [
    "https://www.encalife.com/products/sunset-lamp"
  ],
  "shipToCountry": "US",
  "currency": "USD",
  "maxCandidatesToCheck": 10,
  "minMatchScore": "0.6",
  "maxMatchesPerProduct": 5,
  "includeProductBox": false
}
```

# Actor output Schema

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

Dataset with verified matches and no-match rows.

# 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 = {
    "products": [
        "https://www.encalife.com/products/sunset-lamp"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("reliable_tools/aliexpress-image-search").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 = { "products": ["https://www.encalife.com/products/sunset-lamp"] }

# Run the Actor and wait for it to finish
run = client.actor("reliable_tools/aliexpress-image-search").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 '{
  "products": [
    "https://www.encalife.com/products/sunset-lamp"
  ]
}' |
apify call reliable_tools/aliexpress-image-search --silent --output-dataset

```

## MCP server setup

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

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/nqWSN5j9QHijnGakR/builds/a8ve6lkLvwrm2ENQK/openapi.json
