# AliExpress Search Scraper - Products and Prices (`automation_craft/aliexpress-search-scraper`) Actor

AliExpress search scraper, no login: products and prices by keyword, search link, category or store, in the ship-to country, currency and language you pick. Rows carry price, list price, discount, units sold, rating and delivery; add variant prices and stock, shipping, store and reviews.

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

## Pricing

from $1.42 / 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 Search Scraper - Products and Prices

**AliExpress search scraper** with no login and no API key: products and prices by search words, search link, category or store, in the ship-to country, currency and language you choose. Every row says the market it was read in, and a page AliExpress served for another country or currency is never delivered. Add each product's variants with their own price and stock, shipping fees and delivery days, the store, the description and the reviews when you need them. You pay per product delivered; a search that finds nothing costs nothing beyond the run start.

Built for dropshippers checking supplier prices, product researchers and price trackers, and developers who need AliExpress data without the affiliate API approval.

#### What you can do with it

- Search AliExpress for any words in up to 90 ship-to countries, 45 currencies and 17 languages, through all 60 pages of 60 cards AliExpress shows a search (deep pages repeat cards, so a search gives fewer distinct products; each is delivered once).
- Paste AliExpress links as you copy them: search links with their filters, category links, store links (every product of a store, or a search inside it), product links and a.aliexpress.com short links.
- Use AliExpress's own filters: sort by orders or price, price range, free shipping, Choice, local warehouse, sale, four stars and up, ships from, category and attribute filters (brand, size, model).
- Add product details: every variant (color, size, model) with its price, list price and stock, every shipping option with its fee and delivery days to your country, the store with its ratings and followers, specifications, images and video.
- Add reviews, up to 5,000 a product: stars, date, text and translation, buyer country, the variant bought and the review photos, with the product's star breakdown.
- Monitor on a schedule with a memory name: only new products, or new products and price changes with the previous price, per country and currency.

### Quick start

1. Open the Actor's **Input** tab.
2. Type your search words (for example `wireless earbuds`) or paste AliExpress links.
3. Choose the ship-to country, currency and language (United States, USD and English by default).
4. Set the maximum number of products and turn on product details or reviews if you need them.
5. Click **Start** and download the dataset as JSON, CSV or Excel, or read it through the API.

```json
{
  "searchQueries": ["wireless earbuds"],
  "maxItems": 20
}
```

### What you get

One row per product (`type: product`), plus one row per review with the reviews add-on, one coverage row per search and a summary row (both free). Fill rates measured on 1,270 distinct products of 9 United States searches of the real Actor (2026-10-18) and 24 products read in full:

| Field | What it holds | Filled |
|---|---|---|
| `productId`, `url`, `usSiteProductId` | AliExpress item id (the same in every market), link, the aliexpress.us form of the id | 1,270 of 1,270 |
| `title`, `image`, `images` | title in the run language, main image, the card's images | 1,270 of 1,270 |
| `price`, `currency`, `priceText` | the price AliExpress shows a visitor who is not signed in | 1,098 of 1,270 (the others are "free with any purchase" gift offers, `giftWithPurchase: true`; leave them out with `excludeGiftOffers`) |
| `originalPrice`, `discountPercent` | list price and discount | 1,017 and 1,056 of 1,270 |
| `soldCount`, `soldLabel` | AliExpress's own count of units sold, and its rounded label ("10,000+ sold") | 1,234 and 1,234 of 1,270 |
| `stars` | rating on the card | 1,038 of 1,270 |
| `deliveryText`, `freeShipping`, `choice`, `sponsored`, `badges` | delivery dates, free shipping, Choice, ad flag, selling point texts | as AliExpress shows them |
| `shipFrom`, `categoryId`, `listedAt` | ships from country, category, listing date | 1,098, 1,270 and 1,270 of 1,270 |
| `energyClassImage`, `energyLabelImage`, `productInformationSheetImage` | the EU energy label: the class arrow, the label and the product information sheet, as AliExpress's images | EU markets, products that need a label (58 of 59 monitor cards for Germany); empty elsewhere |
| `searchQuery`, `page`, `position`, `shipTo`, `currency`, `language` | where and in which market the row was found | every row |

With **product details** (`detailStatus: ok`): `variants` (attributes, price, list price, currency, stock, per shopper limit, image), `variantOptions`, `priceMin` and `priceMax`, `totalStock`, `inStock`, `rating`, `reviewCount`, `shippable`, `shippingOptions` (company, fee, free, delivery days and dates, ships from, tracking), `shippingFee`, `deliveryDaysMin` and `deliveryDaysMax`, the store (`storeId`, `storeName`, `storeUrl`, `sellerId`, `storeRating`, `storePositiveRate`, `storeFeedbackScore`, `storeFollowers`, `storeOpenedAt`, `storeCountry`, `storeSoldLast180Days`), `categoryPath`, `specifications`, `images`, `videoUrl`, `wishlistCount`, `buyerProtection`, `coupons`, `promotion`, `newShopperPrice`, `maxPerShopper`, and the EU energy label images where the product has one (5 of 6 German lamps, monitors and fridges probed). Measured on 24 products: title, price, shipping fee, delivery days, store, variants, category and review count 24 of 24; list price and units sold 22; rating 20 (missing only without reviews).

With **reviews** (`type: review`): `reviewId`, `stars`, `date`, `dateText`, `text`, `textTranslated`, `language` (AliExpress's own label, which reads `en` on many reviews written in other languages), `marketLanguage` (the run's), `reviewer` (masked by AliExpress, for example "R\*\*\*z"), `reviewerCountry`, `variant`, `photos`, `shipping`, `helpfulCount`, follow-up text; on the product row `reviewStatistics` (stars 1 to 5), `reviewTags` and `reviewsWithPhotos`.

Every product row says what became of each add-on you asked for: `detailStatus`, `descriptionStatus` (`ok`, `none`, `failed`, `no_detail` when the detail could not be read, `stopped`) and `reviewsStatus` (`complete`, `capped` by `maxReviewsPerProduct`, `charge_limit`, `failed`, `partial`, `stopped`) with `reviewsRead`. The search's coverage row counts the products whose reviews were incomplete and whose description failed.

**Other markets.** AliExpress answers a reader outside the ship-to country with lean cards (id, title, image and price; no rating, units sold, list price or ships from) on many markets (Germany, France, Japan, Poland and others, 2026-10-19). When half or more of a page's cards are lean, the Actor reads that page again through an exit in your ship-to country, where the cards are full, and reads the rest of that search there, whenever the page can still deliver at least 4 products; a page with fewer lean cards is delivered as it came, its lean rows marked. A monitor (a run with a memory name) and a search capped below 4 products keep the lean cards (their price is what a monitor compares); rows say so in `leanCard`. A rating or units sold filter cannot be applied to lean cards: such a search stops with a free row. A filter of this Actor that drops every product of 5 pages in a row ends the search there, marked incomplete.

**About prices.** AliExpress shows a visitor who is not signed in its new shopper prices on many products (often 1.09 USD with a one piece limit). Rows say so: `newShopperDeal` on the card, `promotion`, `newShopperPrice` and `maxPerShopper` with details, and `originalPrice` keeps the list price. In some European markets AliExpress shows no list price at all; the field is then empty.

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

Pay per event, prices per 1,000 events:

| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Product (a product of a search, category or store) | $1.99 | $1.82 | $1.65 | $1.42 |
| Product detail (add-on, or a product link) | $3.40 | $3.20 | $3.00 | $2.80 |
| Review (add-on) | $0.55 | $0.50 | $0.45 | $0.38 |
| Search page (runs with a memory name only: a results page of a search, search link or category) | $0.40 | $0.37 | $0.34 | $0.30 |
| Store page (runs with a memory name only: a page of 40 products of a store's list) | $1.70 | $1.50 | $1.40 | $1.20 |
| Actor start (once per run) | $0.0095 | $0.0095 | $0.0095 | $0.0095 |

Platinum and Diamond plans pay the Gold price. The Store pricing card shows these same prices per 1,000 events: "$1.42 / 1,000" on the Product row means one product costs less than a fifth of a cent. There is no discount on the Actor start event.

- A product is charged once per run, however many searches find it, and once per memory name across runs.
- Product detail is charged only for a product whose detail was read and that AliExpress ships to your ship-to country; a detail that could not be read is free (the row says why in `detailStatus`).
- Free: searches with no match (AliExpress fills them with unrelated products, which are not delivered: a first page AliExpress marks as no match, or one where no product title holds any of your search words of 3 letters or more; a misspelt single word can end this way, so check the spelling), pages AliExpress served for another market or without your filter, unknown products and stores, filtered and repeated products, coverage, status and summary rows.
- A monitor (a run with a memory name) also pays each page it reads again: a Search page for a results page, a Store page for a page of a store's list (store lists are read through residential exits, so their pages cost more to read). When your charge limit is spent on products, the last pages are read free.
- Example: 1,000 products with details on the Gold plan cost $1.42 + $2.80 + $0.0095 = $4.23.

### Input

| Setting | What it does |
|---|---|
| `searchQueries` | search words, one search each (up to 100 searches and links a run) |
| `startUrls` | AliExpress search, category, store, product and short links |
| `storeSearch` | words searched inside each store link |
| `productIds` | product ids or links, read in full (charged as Product detail) |
| `maxItems`, `maxItemsPerSearch`, `maxPages`, `startPage` | how many products and pages |
| `shipTo`, `currency`, `language` | the market (default United States, USD, English) |
| `sort`, `minPrice`, `maxPrice`, `freeShipping`, `choiceOnly`, `localWarehouse`, `onSale`, `fourStarsAndUp`, `sevenDayDelivery`, `shipFrom`, `categoryId`, `attributes` | AliExpress's own filters; each search checks that AliExpress applied them |
| `minRating`, `minSold`, `excludeSponsored`, `excludeGiftOffers` | filters this Actor applies to every product |
| `includeDetails`, `includeDescription` | the product detail add-on and the description text |
| `includeReviews`, `maxReviewsPerProduct`, `reviewsFilter`, `reviewsSort`, `includePersonalData` | the reviews add-on |
| `memoryName`, `monitorMode`, `resetMemory` | the monitor |
| `includeRaw` | adds AliExpress's own card object to each row |

A setting you give replaces only that filter of a pasted search link; a filter you leave empty keeps the link's own. Tracking parameters of copied links (spm, gatewayAdapt, utm and the like) are read past; a link with a parameter this Actor does not read gets a free row naming its position.

### FAQ

#### How do I scrape AliExpress without the API?

Give search words or paste AliExpress links; this Actor reads AliExpress's own pages and calls without a login, an API key or the affiliate approval, and delivers JSON, CSV or Excel.

#### Can I get AliExpress prices in my own country and currency?

Yes. Choose the ship-to country, currency and language; prices, shipping fees and delivery days follow them, every row carries them, and a page AliExpress served in another market is not delivered.

#### How do I monitor AliExpress prices and stock for dropshipping?

Schedule a run with a memory name and `monitorMode: newAndPriceChanges`, with product details on for variant stock. Each run delivers only new products and products whose price changed, with the previous price and the change.

#### Can I get every product of an AliExpress store?

Yes. Paste the store link (aliexpress.com/store/<number>); add `storeSearch` to search inside the store. AliExpress lists about 4,800 products of one store per query.

#### Why does this Actor run with limited permissions?

It reads and writes only its own storages (its dataset, its key-value store and, with a memory name, the memory store it creates for you). Least privilege keeps your account's other data out of its reach.

### What this Actor does not do

- Sort search results by rating or by newest: AliExpress's search pages do not apply those orders (its stores do apply newest).
- Sort a store's products by price or orders: AliExpress ignores those orders on store pages; a store link asked for one gets a free row.
- Give the EU energy class as a letter: AliExpress shows the label as images only, which the rows link.
- Take your own proxy or timeout settings: the Actor picks its exits per AliExpress door and keeps its time limits, which keeps runs cheap and bounded.
- Sign in, solve captchas or read anything AliExpress shows only to signed in buyers (checkout prices for returning customers included).
- Read one product's prices for several countries in one run: run once per country.

### API examples

```bash
curl -X POST "https://api.apify.com/v2/acts/automation_craft~aliexpress-search-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["phone case"],"shipTo":"GB","currency":"GBP","maxItems":100}'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('automation_craft/aliexpress-search-scraper').call({ searchQueries: ['usb cable'], includeDetails: true, maxItems: 50 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/aliexpress-search-scraper").call(run_input={"startUrls": ["https://www.aliexpress.com/store/1102860872"], "maxItems": 200})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

### Changelog

- 0.1 (2026-10-15): search words, search, category, store, product and short links; product details, description and reviews add-ons; the monitor.
- 0.1 (2026-10-18): store search links; the EU energy label; the outcome of every add-on on each row; a word search answered with unrelated products is a free no match; reads stay within your charge limit; the Store page event for store monitors.

### More data tools by Automation Craft

- [Amazon Sponsored Products Scraper - Ads by Keyword](https://apify.com/automation_craft/amazon-sponsored-products-scraper)
- [Facebook Marketplace Scraper with Sold Tracker](https://apify.com/automation_craft/facebook-marketplace-scraper)
- [Google Trends Scraper - Compare and Trending Now](https://apify.com/automation_craft/google-trends-scraper)
- [Trustpilot Reviews Scraper: Coverage Per Company](https://apify.com/automation_craft/trustpilot-reviews-scraper)
- [Amazon Product Scraper - Search, Best Sellers](https://apify.com/automation_craft/amazon-data-scraper)

# Changelog

This Actor's version history is a separate document: https://apify.com/automation_craft/aliexpress-search-scraper/changelog.md

# Actor input Schema

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

Words to search on AliExpress, one search each, as you would type them in the AliExpress search box (for example "wireless earbuds"). Up to 100 searches and links per run.

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

Search links (aliexpress.com/w/wholesale-..., aliexpress.us, country sites such as fr.aliexpress.com), category links (aliexpress.com/category/<id>/...), store links (aliexpress.com/store/<number>, every product of the store), product links (aliexpress.com/item/<id>.html) and short links (a.aliexpress.com). The filters a search link carries (sort, price, switches, attributes, ship-from, category, page) are applied; a setting you give below replaces only that one filter of the link.

## `storeSearch` (type: `string`):

Words searched inside each store link (AliExpress's own search within a store), for example "case". Left empty, a store link lists all its products.

## `productIds` (type: `array`):

AliExpress product ids (1005... or the 3256... form of aliexpress.us) or product links. Each is read through the product detail and delivered as one product row with variants, shipping and store, charged as Product detail.

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

The most products this run delivers over all searches and links (default 100). AliExpress shows at most 60 pages of 60 products per search.

## `maxItemsPerSearch` (type: `integer`):

The most products one search or link delivers. Left empty, only the run maximum applies.

## `maxPages` (type: `integer`):

How many result pages each search or store link reads at most (a search page holds 60 products and AliExpress shows at most 60; a store page holds 40 and a store shows about 121). Default: all.

## `startPage` (type: `integer`):

The result page each search starts on (default 1, or the page of a pasted link).

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

The country AliExpress prices and ships for (default United States). Search results, prices, shipping fees and delivery days follow it.

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

The currency of every price (default USD).

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

The language of titles and texts (default English). Prices do not change with it.

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

The order of results (default best match). Price orders are sorted within each page, as AliExpress sorts them. A store link takes best match or newest only (AliExpress ignores the other orders on store pages; a store asked for one gets a free row).

## `minPrice` (type: `number`):

Products from this price, in the run currency (up to two decimals). Each delivered product is checked against it too.

## `maxPrice` (type: `number`):

Products up to this price, in the run currency (up to two decimals). Each delivered product is checked against it too.

## `freeShipping` (type: `boolean`):

Only products AliExpress lists under its free shipping filter.

## `choiceOnly` (type: `boolean`):

Only AliExpress Choice products.

## `localWarehouse` (type: `boolean`):

Only products AliExpress ships from a warehouse in or near the ship-to country (its "Local+" filter, offered for some countries).

## `onSale` (type: `boolean`):

AliExpress's sale filter. It returns very few products outside sale events.

## `fourStarsAndUp` (type: `boolean`):

AliExpress's four stars and up filter (it narrows a search to a few hundred products).

## `sevenDayDelivery` (type: `boolean`):

AliExpress's seven day delivery filter (offered for the United Kingdom only).

## `shipFrom` (type: `string`):

A two-letter country code (or EU) of the country the products ship from. AliExpress offers a few such values per ship-to country (United States: US; Germany: DE, EU, CN and others); a value it does not offer is reported in a free row.

## `categoryId` (type: `string`):

An AliExpress category number (from a category link, for example 44 in aliexpress.com/category/44/...). With search words, the search stays inside the category; without search words, use a category link above.

## `attributes` (type: `array`):

AliExpress attribute filter codes as they appear in a search link (attr=2250-4169245), one per line, for example a brand or a cable length. Up to 10.

## `minRating` (type: `number`):

Only products rated at least this many stars (products without a rating are left out).

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

Only products with at least this many units sold (AliExpress's own count where the page carries it, else the number in its label such as 10,000+).

## `excludeSponsored` (type: `boolean`):

Leave out the products AliExpress marks as ads on its result pages. Every row says whether it was sponsored.

## `excludeGiftOffers` (type: `boolean`):

Leave out the "free with any purchase" gift cards that carry no price of their own.

## `includeDetails` (type: `boolean`):

Read each product's detail record: every variant with its price, list price and stock, shipping options with fee and delivery days to the ship-to country, the store with its ratings and followers, specifications, images, video and wishlist count. Charged as Product detail, only for products AliExpress ships to the ship-to country.

## `includeDescription` (type: `boolean`):

With product details: the seller's description as text with its images (one more read per product, no extra charge).

## `includeReviews` (type: `boolean`):

Read each product's reviews: stars, date, text and English translation, buyer country, the variant bought and photos, plus the product's star breakdown. Charged per review delivered.

## `maxReviewsPerProduct` (type: `integer`):

The most reviews read per product (default 20, up to 5,000: every review AliExpress lists for most products).

## `reviewsFilter` (type: `string`):

The reviews AliExpress lists (default all).

## `reviewsSort` (type: `string`):

The order reviews are read in (default AliExpress's own order); newest first reads the latest reviews.

## `includePersonalData` (type: `boolean`):

Adds the reviewer's gender and profile photo to review rows (off by default; the masked reviewer name AliExpress shows is always delivered). You are responsible for a lawful use of personal data, GDPR included.

## `memoryName` (type: `string`):

A name of your choice. Products delivered under this name are remembered per ship-to country and currency; later runs deliver and charge only products not delivered before (or, with price changes on, products whose price changed). A run with a memory name also pays a small Search page event per results page with products it reads, and a Store page event per page of a store's list. A memory belongs to this Actor and to your account.

## `monitorMode` (type: `string`):

With a memory name: deliver new products only (default), or also products whose price changed since they were delivered (with the previous price).

## `resetMemory` (type: `boolean`):

Forget every product remembered under the memory name before this run (applied once, on a fresh run).

## `includeRaw` (type: `boolean`):

Adds AliExpress's own search card object to each product row under raw (for developers).

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxItems": 20
}
```

# Actor output Schema

## `items` (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"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/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 = {
    "searchQueries": ["wireless earbuds"],
    "maxItems": 20,
}

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

```

## MCP server setup

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