# AliExpress Product Search Scraper (`d_nepoch/aliexpress-product-search-scraper`) Actor

AliExpress scraper for search and category results: price, original price, discount, sold count, rating, free shipping, Choice badge, images. Any currency and ship-to country. Fast HTTP, no browser, no login.

- **URL**: https://apify.com/d_nepoch/aliexpress-product-search-scraper.md
- **Developed by:** [Dmitrii Nepochatykh](https://apify.com/d_nepoch) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 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 Product Search Scraper

**AliExpress Product Search Scraper** turns AliExpress search and category results into clean data: price, original price, discount, sold count, star rating, free shipping, Choice badge, images and category IDs. Pick any **currency** and **ship-to country** — prices come exactly as a shopper in that country sees them.

Fast plain-HTTP AliExpress scraper: no browser, no login, no cookies. 60 products per page, **about 1,000 products per minute**.

### Try it in one click

The input is prefilled with `wireless earbuds`: click **Start** and get 60 products in about 10 seconds, for about $0.12.

Real output, `wireless earbuds` sorted by orders, USD, ship to US (October 2026):

| # | Product (shortened) | Price | Was | Discount | Sold | Rating | Choice |
|---|---|---|---|---|---|---|---|
| 1 | Lenovo XT80 Sports Wireless Earphones | $15.99 | $33.52 | 52% | 50,000+ | 4.9 | ✅ |
| 2 | Lenovo XT53 Bluetooth 5.3 Gaming Earphones | $10.38 | $31.77 | 67% | 10,000+ | 4.9 | ✅ |
| 3 | HTC NE20 AI Translator Earbuds | $15.79 | $32.62 | 51% | 10,000+ | 4.9 | ✅ |
| 6 | QCY MeloBuds N70 ANC, Bluetooth 6.0 LDAC | $45.51 | $111.74 | 59% | 10,000+ | 4.8 | — |
| 9 | Baseus EP10 Pro ANC Earbuds | $25.60 | $42.69 | 40% | 10,000+ | 4.8 | — |

Each row also has the product URL and images, free shipping flag, delivery estimate (when AliExpress shows one), category IDs, listing date, search position and page.

### What can this AliExpress scraper do?

- **Scrape AliExpress search results** for any keyword, sorted by best match, orders or price.
- **Scrape AliExpress categories** — paste a category or filtered search URL.
- **Get prices in any currency and country** — USD, EUR, GBP, BRL… with ship-to country.
- **Filter before you pay**: minimum sold count, minimum rating, free shipping only, price range.
- **Merge with other marketplaces**: the same core fields as our TikTok Shop scraper.

### Who uses AliExpress product data?

- **Dropshippers**: find best-selling AliExpress products by keyword, sorted by orders, filtered by minimum sales and rating.
- **E-commerce sellers**: monitor prices, discounts and sales of a niche with a scheduled daily run.
- **Market researchers**: see how many sellers compete for a keyword and at what price points.
- **Cross-border teams**: compare prices and availability for `shipTo: "US"`, `"DE"`, `"BR"`.
- **Data and AI teams**: every field is typed — `soldCount` is `1000`, not "1,000+ sold".

### Why this scraper

| | This Actor | Typical AliExpress scrapers |
|---|---|---|
| Sold count as a number (`1000`), plus original text | ✅ | often text only |
| Original price + discount % | ✅ | often missing |
| Any currency and ship-to country | ✅ | often US / USD only |
| Filtered products (min sold, min rating, free shipping) are **not charged** | ✅ | often charged anyway |
| Duplicates across keywords skipped and not charged | ✅ | ❌ |
| Automatic switch to residential IPs when blocked | ✅ | run fails |

### How to scrape AliExpress products

1. Click **Try for free**.
2. Enter one or more keywords in **Search queries** (e.g. `wireless earbuds`), or paste AliExpress search or category links into **Start URLs**.
3. Optionally set sort order, currency, ship-to country and filters.
4. Click **Start**. Download the products as JSON, CSV, Excel or HTML, or get them via the API.

### Input

| Field | Example | Notes |
|---|---|---|
| `searchQueries` | `["wireless earbuds", "phone case"]` | one search per keyword |
| `startUrls` | `[{"url": "https://www.aliexpress.com/category/100003109/women-clothing.html"}]` | search or category pages, filters in the URL are kept |
| `maxItemsPerQuery` | `500` | up to 3,600 (60 pages × 60) |
| `sort` | `"orders"` | `best_match`, `orders`, `price_asc`, `price_desc` |
| `currency` | `"EUR"` | any AliExpress currency |
| `shipTo` | `"DE"` | two-letter country code |
| `language` | `"en_US"` | title language |
| `minPrice` / `maxPrice` | `5` / `50` | in the selected currency |
| `minSold` | `100` | not charged when filtered out |
| `minRating` | `"4.5"` | not charged when filtered out |
| `freeShippingOnly` | `true` | not charged when filtered out |

```json
{
  "searchQueries": ["wireless earbuds"],
  "maxItemsPerQuery": 300,
  "sort": "orders",
  "currency": "USD",
  "shipTo": "US",
  "minSold": 100
}
```

### Output: AliExpress product data

One item per product:

```json
{
  "marketplace": "aliexpress",
  "productId": "1005008122792763",
  "title": "Wireless Earbuds Bluetooth 5.3 with Charging Case",
  "url": "https://www.aliexpress.com/item/1005008122792763.html",
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/Sd99e9f8cca7845078cbdf0d0592365301.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/Sd99e9f8cca7845078cbdf0d0592365301.jpg"],
  "price": 12.37,
  "originalPrice": 24.74,
  "discountPercent": 50,
  "currency": "USD",
  "priceUsd": 12.37,
  "originalPriceUsd": 24.74,
  "rating": 4.8,
  "soldCount": 5000,
  "soldText": "5,000+ sold",
  "freeShipping": true,
  "categoryIds": ["44", "100006749"],
  "query": "wireless earbuds",
  "position": 1,
  "page": 1,
  "scrapedAt": "2026-10-19T15:00:00+00:00",
  "isChoice": true,
  "isAd": false,
  "listedDate": "2024-11-20",
  "freeShippingMinOrder": null,
  "deliveryEstimate": "Delivery: Oct 23 - 29",
  "attributes": ["Wireless", "ABS", "In-Ear", "Bluetooth"],
  "sellingPoints": ["Free shipping", "Lowest price in 30 days"],
  "shipTo": "US"
}
```

`priceUsd` is filled when the currency is USD. The first fields (`marketplace` … `scrapedAt`) are shared with our other marketplace scrapers, so datasets from different marketplaces can be merged without remapping.

### Ready-made setups

Copy the JSON into the **Input → JSON** tab, click **Save as a new task**, then add a **Schedule** and an integration (Google Sheets, Slack, email, webhook) on the task's **Integrations** tab.

**1. Best sellers for dropshipping** (dropshippers). Products sorted by orders, at least 500 sold and 4.5★, filtered products not charged. Schedule: weekly.

```json
{
  "searchQueries": ["wireless earbuds", "phone case", "led strip lights"],
  "sort": "orders",
  "maxItemsPerQuery": 300,
  "minSold": 500,
  "minRating": "4.5"
}
```

**2. Daily price and discount monitor** (sellers, brands). The same keywords every day; join runs by `productId` and compare `price`, `discountPercent` and `soldCount`. Schedule: daily, export to Google Sheets. About $1.20 per run.

```json
{
  "searchQueries": ["portable blender"],
  "sort": "orders",
  "maxItemsPerQuery": 600
}
```

**3. Prices for another market** (cross-border teams). Prices and delivery estimates as a shopper in Germany sees them, in euros, only with free shipping.

```json
{
  "searchQueries": ["camping lantern"],
  "currency": "EUR",
  "shipTo": "DE",
  "freeShippingOnly": true,
  "maxItemsPerQuery": 200
}
```

### Use it from AI agents (MCP, Claude, ChatGPT, n8n)

**MCP server.** Add this URL to Claude, Cursor, VS Code or any other MCP client and sign in to Apify when asked:

```
https://mcp.apify.com?tools=d_nepoch/aliexpress-product-search-scraper
```

```json
{
  "mcpServers": {
    "aliexpress": { "url": "https://mcp.apify.com?tools=d_nepoch/aliexpress-product-search-scraper" }
  }
}
```

Then just ask, for example: *"Find the 20 best-selling wireless earbuds on AliExpress under $15 with at least 4.7 stars"* or *"Compare AliExpress prices for 'camping lantern' shipped to the US and to Germany"*. The agent fills keywords, sort, currency and filters itself.

**One HTTP call** (waits for the run and returns the products as JSON; for runs longer than 5 minutes use the async `runs` endpoint):

```bash
curl -X POST "https://api.apify.com/v2/acts/d_nepoch~aliexpress-product-search-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["wireless earbuds"], "sort": "orders", "maxItemsPerQuery": 60}'
```

**Python** (`pip install apify-client`, version 3):

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("d_nepoch/aliexpress-product-search-scraper").call(
    run_input={"searchQueries": ["wireless earbuds"], "sort": "orders", "maxItemsPerQuery": 120},
    max_total_charge_usd=1,  # hard spending cap for this run
)
for product in client.dataset(run.default_dataset_id).iterate_items():
    print(product["title"], product["price"], product["soldCount"])
```

**No-code and agent frameworks**: the Apify integrations for n8n, Make, Zapier, LangChain, LlamaIndex and CrewAI call this Actor by the name `d_nepoch/aliexpress-product-search-scraper` with the same JSON input.

Tips for agents: one row = one product card; `price`, `soldCount` and `rating` are numbers (`soldCount` 5000 means "5,000+ sold"); product pages, sellers and reviews are not included; set `maxTotalChargeUsd` to cap spend.

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

Paid Apify plans get lower prices: Starter −10%, Scale −20%, Business −30% (from **$1.40 per 1,000 products**).

You pay only for products saved to the dataset — see the **Pricing** tab (at launch: $2 per 1,000 products). Filtered-out products, duplicates and promo cards are not charged. Set **Max total charge** in run options to cap your spend; the Actor stops cleanly at the limit. New Apify accounts get free monthly credits, enough for a few thousand products.

### FAQ

**How many products can I get per keyword?** AliExpress shows at most 60 pages of 60 products (3,600). Split broad keywords into narrower ones or use price ranges to get more.

**Does it scrape product pages, reviews or sellers?** No — this Actor reads search and category results, which is why it is fast and cheap. Search cards show the lowest variant price; seller name and full description are not included.

**Can I track prices over time?** Yes. Schedule a daily run on the same keywords and compare `price`, `discountPercent` and `soldCount` by `productId`.

**Is scraping AliExpress legal?** The Actor collects only public listing data (no personal data, no login). Use it in line with AliExpress terms and the laws that apply to you.

### Limits

- Promotional "free gift" cards (no price, link to a promo page) are skipped and not charged.
- `rating` and `soldCount` are empty for products that have no reviews or sales yet.

### Other scrapers by this developer

- [TikTok Shop Product Scraper](https://apify.com/d_nepoch/tiktok-shop-product-scraper) — TikTok Shop products with units sold, stock per variant and rating breakdown; same core fields as this Actor.
- [App Store & Google Play Reviews Scraper](https://apify.com/d_nepoch/app-store-google-play-reviews) — app reviews from both stores with a built-in insights report.
- [Google Hotels Scraper](https://apify.com/d_nepoch/google-hotels-scraper) — hotel prices for any city and dates, prices from every booking site and a price calendar.
- [App Store & Google Play Scraper](https://apify.com/d_nepoch/app-store-google-play-scraper) — app search ranks (ASO), top charts up to 200 apps and full app details from both stores.
- [Startup Funding Rounds Scraper](https://apify.com/d_nepoch/startup-funding-rounds-scraper) — new startup rounds from SEC Form D, Form C and the news, with filters and only-new monitoring.

### Feedback

Found a bug or need a field? Open an issue on the **Issues** tab — fixes usually ship within a few days.

# Actor input Schema

## `searchQueries` (type: `array`):

What you would type into the AliExpress search box. Each keyword is scraped separately.

## `startUrls` (type: `array`):

AliExpress search or category page URLs, with any filters you set on the site (e.g. https://www.aliexpress.com/category/100003109/women-clothing.html).

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

AliExpress shows at most 60 pages × 60 products per search.

## `sort` (type: `string`):

Order in which AliExpress returns products.

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

Three-letter currency code for prices: USD, EUR, GBP, BRL, TRY, ...

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

Two-letter country code. Prices, shipping and availability depend on it.

## `language` (type: `string`):

Locale for titles: en_US, es_ES, fr_FR, de_DE, pt_BR, ...

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

In the selected currency (AliExpress filter).

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

In the selected currency (AliExpress filter).

## `minSold` (type: `integer`):

Keep only products with at least this many sales. Filtered products are not charged.

## `minRating` (type: `string`):

Filtered products are not charged.

## `freeShippingOnly` (type: `boolean`):

Filtered products are not charged.

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

The Actor switches to residential IPs automatically if AliExpress blocks the default proxy.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxItemsPerQuery": 60,
  "sort": "best_match",
  "currency": "USD",
  "shipTo": "US",
  "language": "en_US",
  "minRating": "0",
  "freeShippingOnly": false,
  "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 = {
    "searchQueries": [
        "wireless earbuds"
    ],
    "maxItemsPerQuery": 60,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("d_nepoch/aliexpress-product-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 = {
    "searchQueries": ["wireless earbuds"],
    "maxItemsPerQuery": 60,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("d_nepoch/aliexpress-product-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 '{
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxItemsPerQuery": 60,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call d_nepoch/aliexpress-product-search-scraper --silent --output-dataset

```

## MCP server setup

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