# AliExpress Price Tracker & Search Scraper - Best Sellers (`kamerozkan/aliexpress-search-scraper`) Actor

AliExpress price tracker and search scraper: products by keyword with price, original price, discount, real orders count, rating and Choice badge, best sellers first, plus price changes since your last run. Any ship-to country. Pay per product.

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

## Pricing

from $2.00 / 1,000 products

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

## AliExpress Price Tracker & Search Scraper - Best Sellers

**AliExpress price tracker and search scraper: get every product of an AliExpress search with price, original price, discount, orders sold, rating, Choice badge and images, and see which prices changed since your last run.** Type a keyword like you would on AliExpress, pick the ship-to country and currency, and get one clean row per product. No login, API key or proxy setup needed.

### What does AliExpress Price Tracker & Search Scraper do?

It opens the AliExpress search results for each of your queries (60 products per page, as many pages as you ask for) and saves every product card: title, current price, original price and discount, real number of orders, star rating, Choice and ad flags, delivery and promotion tags, all card images, category IDs and the date the product was listed. Sort by best match, by orders (the best sellers first) or by price, and filter by a price range.

Give the run a **price tracker key** and it remembers the last price of every product: each row then shows `previousPrice`, `priceChange`, `priceChangePercent`, `isNew` and `firstSeenAt`. Schedule it daily and you have an AliExpress price tracker for a whole niche, not just a single product.

### Who is it for?

- **Dropshippers and product researchers**: find best sellers in a niche by real order counts, ratings and discount depth before you list them.
- **E-commerce and pricing analysts**: track AliExpress prices and discounts for a keyword over time, spot price drops and new competitors.
- **Brands and resellers**: watch how your product category is priced on AliExpress in the US, UK, Germany or any ship-to country.
- **Developers**: feed AliExpress search data into a database, a spreadsheet or an alerting workflow through the API.

### What data can you get?

| Field | Example |
|---|---|
| `productId` | `3256812453673234` |
| `title` | `Lenovo XT53 Wireless Bluetooth 5.3 Earphones ...` |
| `url` | `https://www.aliexpress.com/item/3256812453673234.html` |
| `price` | `11.61` |
| `originalPrice` | `31.83` |
| `discountPercent` | `63` |
| `currency` / `formattedPrice` | `USD` / `US $11.61` |
| `ordersCount` | `46767` (real orders count) |
| `ordersText` | `10,000+ sold` (as shown on AliExpress) |
| `rating` | `4.9` |
| `isChoice` | `true` (AliExpress Choice badge) |
| `isAd` | `false` (sponsored card) |
| `tags` | `["Save $20.22", "Delivery: Oct 22 - 27"]` |
| `freeShipping` | `false` |
| `imageUrl`, `images` | main image and all card images |
| `skuId`, `categoryIds` | AliExpress SKU and category IDs |
| `listedSince` | `2026-07-02` |
| `query`, `page`, `position`, `sortBy`, `shipTo`, `totalResults` | where the product was found |
| `previousPrice`, `priceChange`, `priceChangePercent`, `isNew`, `firstSeenAt` | price tracker fields (with a price tracker key) |
| `scrapedAt` | `2026-10-16T05:33:16Z` |

### How much does it cost to scrape AliExpress?

You pay only for products saved to your dataset: **$2.50 per 1,000 products** on the Free plan ($0.0025 per product), with lower prices on paid Apify plans (up to 20% off). Residential proxy traffic and platform usage are included.

Worked example: tracking the top 300 best sellers for 5 keywords once a day is 1,500 products a day, 45,000 a month: 45,000 x $0.0025 = $112.50 a month on the Free plan. A single search of 60 products costs $0.15.

Queries that AliExpress does not answer are retried on a fresh connection; if they still fail, they are listed in the `FAILED_QUERIES` record of the run's key-value store and nothing is charged for them. Skipped ads are not charged either. Set **Max products in total** or a maximum cost per run to cap spending.

### How to use it

1. Click **Try for free**.
2. Enter one or more **search queries**, for example `wireless earbuds`, `phone case magsafe` or `led strip lights`.
3. Choose **Max products per query** (60 per page), **Sort by** (Orders = best sellers first), **Ship to country** and **Currency**. Optionally set a price range and turn on **Skip ads**.
4. To track prices, enter a **Price tracker key** such as `earbuds-watch` and schedule the run (daily or weekly) in Apify.
5. Click **Start** and download the results as JSON, CSV or Excel, or read them through the API.

### Input example

```json
{
  "queries": ["wireless earbuds", "mechanical keyboard"],
  "maxItemsPerQuery": 120,
  "sortBy": "orders",
  "shipTo": "US",
  "currency": "USD",
  "minPrice": 10,
  "maxPrice": 80,
  "skipAds": true,
  "monitorKey": "electronics-best-sellers",
  "maxItems": 240
}
```

### Output example

A real row from a test run on 2026-10-16 (price tracker key set, second run):

```json
{
  "productId": "3256807353643961",
  "title": "AJAZZ AK820 and AK820PRO Mechanical Gaming Keyboard 75% Layout PBT OEM Keycap RGB Backlight Full Key Anti-Ghosting Type-C",
  "url": "https://www.aliexpress.com/item/3256807353643961.html",
  "price": 22.64,
  "originalPrice": 62.64,
  "discountPercent": 63,
  "currency": "USD",
  "formattedPrice": "US $22.64",
  "ordersCount": 30538,
  "ordersText": "10,000+ sold",
  "rating": 4.9,
  "isChoice": true,
  "isAd": false,
  "tags": ["New shoppers save $40", "Lowest price in 90 days"],
  "freeShipping": false,
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/Sc14985377fa3443d94a54a26f353815ev.jpg",
  "query": "mechanical keyboard",
  "page": 1,
  "position": 1,
  "sortBy": "orders",
  "shipTo": "US",
  "previousPrice": 22.64,
  "priceChange": 0,
  "priceChangePercent": 0,
  "isNew": false,
  "firstSeenAt": "2026-10-16T05:34:56Z",
  "listedSince": "2024-08-26",
  "scrapedAt": "2026-10-16T05:35:23Z"
}
```

The dataset has two views: **Overview** (image, product, price, discount, orders, rating, flags, rank) and **Price changes** (price, previous price, change, new products).

### Integrations and API

Run it from your code with the Apify API or the `apify-client` package, schedule it in Apify, or connect it to Make, n8n, Zapier, Google Sheets or a webhook.

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kamerozkan/aliexpress-search-scraper").call(run_input={
    "queries": ["wireless earbuds"],
    "sortBy": "orders",
    "maxItemsPerQuery": 120,
    "monitorKey": "earbuds-watch",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item.get("priceChange"):
        print(item["title"][:60], item["previousPrice"], "->", item["price"])
```

### FAQ

**How do I find AliExpress best sellers?** Set **Sort by** to *Orders (best sellers first)*. Every row carries the real `ordersCount`, so you can also sort and filter the dataset yourself.

**How does the price tracker work?** Runs with the same price tracker key share a small memory of the last price of every product they saw. On the first run `previousPrice` is empty and `isNew` is true; later runs fill `previousPrice`, `priceChange` and `priceChangePercent`. Use one key per watchlist.

**Can I get prices for another country?** Yes. Set **Ship to country** (for example GB, DE, FR, CA, AU) and **Currency** (GBP, EUR, CAD, AUD, ...). The run uses a residential connection in that country, so prices, promotions and delivery dates are what local shoppers see.

**Does it open product pages?** No. It reads the search result cards, which keeps it fast and cheap. Product descriptions, SKU variants and reviews are not included.

**Why do some products have no orders or rating?** New listings without sales or reviews show none on AliExpress; the fields are then empty.

**Is it legal to collect this data?** It collects public product data that AliExpress shows to every visitor, without logging in. You are responsible for how you use it.

### Support and feedback

- Found a bug or missing a field? Open an issue on the **Issues** tab of this Actor. We reply within
  48 hours and ship most fixes within a few days.
- Have an idea for a feature? Issues are the fastest way to get it built.
- If the Actor saves you time, a short review on this page helps other users find it.

# Actor input Schema

## `queries` (type: `array`):

What you would type into the AliExpress search box, one per line, for example "wireless earbuds" or "phone case magsafe". Each query returns up to 60 products per page.

## `maxItemsPerQuery` (type: `integer`):

How many products to read for each query (60 per search page). Sponsored products are included unless you turn on Skip ads.

## `sortBy` (type: `string`):

Order of the search results: AliExpress best match, most orders (best sellers first), or price.

## `shipTo` (type: `string`):

Two-letter country code (US, GB, DE, FR, CA, AU, ...). AliExpress shows prices, shipping and availability for this country.

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

Three-letter currency code for prices, for example USD, EUR or GBP.

## `minPrice` (type: `integer`):

Only products from this price (in the chosen currency). Leave empty for no limit.

## `maxPrice` (type: `integer`):

Only products up to this price (in the chosen currency). Leave empty for no limit.

## `skipAds` (type: `boolean`):

Leave out sponsored products. Skipped products are not saved and not charged. Every row also has an isAd flag.

## `monitorKey` (type: `string`):

Any name, for example "earbuds-watch". Runs with the same key remember each product's last price, so every row gets previousPrice, priceChange and isNew. Schedule the run daily to track prices. Leave empty for a plain search.

## `maxItems` (type: `integer`):

Stop after this many products across all queries. You are charged per product, so this also caps the cost of the run.

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

Apify residential proxy in the ship-to country is used by default; proxy traffic is included in the price.

## Actor input object example

```json
{
  "queries": [
    "wireless earbuds"
  ],
  "maxItemsPerQuery": 60,
  "sortBy": "default",
  "shipTo": "US",
  "currency": "USD",
  "skipAds": false,
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per result in the default dataset.

# 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 = {
    "queries": [
        "wireless earbuds"
    ],
    "maxItemsPerQuery": 60,
    "shipTo": "US",
    "currency": "USD",
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kamerozkan/aliexpress-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 = {
    "queries": ["wireless earbuds"],
    "maxItemsPerQuery": 60,
    "shipTo": "US",
    "currency": "USD",
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("kamerozkan/aliexpress-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 '{
  "queries": [
    "wireless earbuds"
  ],
  "maxItemsPerQuery": 60,
  "shipTo": "US",
  "currency": "USD",
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call kamerozkan/aliexpress-search-scraper --silent --output-dataset

```

## MCP server setup

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