# AliExpress Search Scraper: Prices, Sold Count & Rank (`jaaylee/aliexpress-search-scraper`) Actor

AliExpress search scraper for any keyword or category URL. Get search rank, product ID, price, original price, discount, rating, exact sold count, store, ship-from country, Choice and free shipping flags. Pick any ship-to country and currency. $1 per 1,000 results. Export CSV/JSON or use the API.

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

## Pricing

from $0.70 / 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/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

### What is AliExpress Search Scraper?

**AliExpress Search Scraper** extracts **AliExpress search results** for any keyword, aliexpress.com search URL or
category (`/category/...`) URL. For every result you get the **search rank (position)**, AliExpress product ID, title,
**price, original price and discount**, rating, the **exact number of orders sold** (not just "1,000+ sold"), store
name, **ship-from country**, **Choice** and **free shipping** flags, delivery estimate, promotion tags and images.

Pick **any ship-to country and currency** — for example Germany in EUR or the UK in GBP — and get the prices,
local-warehouse items and delivery estimates shoppers in that country see.

Use it for **dropshipping product research**, **AliExpress keyword rank tracking**, **price monitoring**, **supplier
and competitor research** and **market sizing**. Run it in Apify Console, on a schedule, or from Python, JavaScript,
Make, Zapier, n8n or an AI agent (MCP).

#### Why this AliExpress search scraper

- 💸 **$1.00 per 1,000 results.** Repeated products, results without a price and blocked pages are free.
- 🔢 **Exact sold count.** AliExpress rounds the label ("1,000+ sold"); `soldCount` gives the real number behind it
  (e.g. 1039), so you can rank products by actual orders.
- 🌍 **Any country and currency.** Set `shipTo` (US, GB, DE, FR, CA, AU…) and `currency` (USD, EUR, GBP…). Results
  include `shipFrom`, so you can see which items ship from a local warehouse (e.g. DE, PL, UK) instead of China.
- 🏆 **Exact rank across pages.** Pages of one search are read in order, so `position` continues from page to page
  (1…60 on page 1, 61…120 on page 2).
- 🧹 **No duplicates.** AliExpress repeats some products on later pages (about 18% of 600 results in our tests). Each
  product is returned once per search, at the rank where it first appeared, and repeats are not charged.
- 🆔 **One global product ID.** US shoppers see different card IDs (3256…); they are converted to the global product
  ID (1005…) used in aliexpress.com/item URLs, so IDs match across countries.
- ⚡ **Fast and light:** plain HTTP, no browser. 60 results per page, up to 60 pages (3,600 results) per search.

### What AliExpress search data can you extract?

| Group | Fields |
|---|---|
| Search | `searchTerm`, `page`, `position`, `positionOnPage`, `organicPositionOnPage`, `sponsored`, `totalResults`, `searchUrl` |
| Product | `productId`, `url`, `title`, `image`, `images`, `categoryIds`, `listedDate` |
| Price | `price`, `originalPrice`, `discountPercent`, `currency`, `priceText` |
| Demand & reputation | `soldCount` (exact), `soldText` (as shown), `rating` |
| Store & shipping | `storeName` (when shown), `shipFrom`, `shipTo`, `choice`, `freeShipping`, `deliveryEstimate` |
| Promotions | `tags` ("Lowest price in 90 days", "Extra 5% off with coins", bulk prices, installments…) |
| Run | `complete`, `scrapedAt` |

### How to scrape AliExpress search results

1. Click **Try for free** and open the Actor input.
2. Enter one or more **Search keywords or URLs** — e.g. `phone case`, an aliexpress.com search URL, or a category URL
   such as `aliexpress.com/category/200003482/dresses.html`.
3. Choose **Pages per search** (1–60), the **Ship to country** and **Currency**, and optionally **Sort by** and a
   **Min / Max price**.
4. Click **Start** and download the results as JSON, CSV or Excel, or read them via the API.

#### Input example

```json
{
  "searchTerms": ["wireless earbuds", "https://www.aliexpress.com/category/200003482/dresses.html"],
  "maxPagesPerSearch": 3,
  "sort": "bestsellers",
  "shipTo": "US",
  "currency": "USD",
  "minPrice": 5,
  "maxPrice": 50
}
```

#### Output example

```json
{
  "productId": "1005008226107860",
  "url": "https://www.aliexpress.com/item/1005008226107860.html",
  "title": "LEGO 76424 Harry Potter Flying Ford Anglia, Buildable Car Toy with 2 Minifigures Harry Potter Car, Gift Boys and Girls Ages 7",
  "price": 35.29,
  "originalPrice": 70.59,
  "discountPercent": 50,
  "currency": "USD",
  "priceText": "US $35.29",
  "rating": 4.9,
  "soldCount": 1039,
  "soldText": "1,000+ sold",
  "storeName": null,
  "shipFrom": "CN",
  "choice": true,
  "freeShipping": false,
  "deliveryEstimate": "Delivery: Oct 21 - 26",
  "tags": ["4 × $8.82 with no interest"],
  "sponsored": false,
  "image": "https://ae-pic-a1.aliexpress-media.com/kf/Sb398685b70b540f4be8712aa14c86a87O.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/Sb398685b70b540f4be8712aa14c86a87O.jpg"],
  "categoryIds": ["26", "200001383", "2622"],
  "listedDate": "2024-12-10",
  "searchTerm": "lego",
  "page": 1,
  "position": 2,
  "positionOnPage": 2,
  "organicPositionOnPage": 2,
  "totalResults": 76021,
  "complete": true,
  "shipTo": "US",
  "searchUrl": "https://www.aliexpress.com/w/wholesale-lego.html",
  "scrapedAt": "2026-10-16T09:00:00+00:00"
}
```

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

**$1.00 per 1,000 results** on the Free plan. Lower prices apply on higher Apify plans (see the pricing panel).
Repeated products, results without a price and blocked pages are free. Set **Max results in total** or a maximum total
charge to cap any run.

| You scrape | You pay (Free plan) |
|---|---|
| 1 keyword × 1 page (60 results) | ~$0.06 |
| 10 keywords × 5 pages | ~$2.50–$3.00 |
| 10,000 results | $10.00 |

### AliExpress rank tracking and sold counts, explained

- `position` — overall rank across all pages of the search, including sponsored placements (ads).
- `positionOnPage` — rank on the current page.
- `organicPositionOnPage` — rank among non-sponsored results on the page (`null` for ads).
- `soldCount` — the exact number of orders AliExpress has for the product. `soldText` is the rounded label shoppers
  see ("900+ sold"). New products without orders have both fields `null`.

Turn off **Include sponsored results** to save organic results only — the organic rank stays the same.

### Use cases

- **Dropshipping product research** — sort by orders (`bestsellers`) and compare `soldCount`, price, discount and
  rating to find winning products.
- **AliExpress keyword rank tracking** — schedule a daily run and follow where your products rank for each keyword.
- **Price monitoring** — track price, original price and discount for a niche over time.
- **Local warehouse sourcing** — set `shipTo` to your market and filter by `shipFrom` to find items that ship fast
  from a local warehouse.
- **Market sizing** — `totalResults` and up to 3,600 results per search show how crowded a niche is.
- **Cross-marketplace comparison** — run the same keywords with
  [Amazon Search Scraper](https://apify.com/jaaylee/amazon-search-scraper) or
  [Walmart Search Scraper](https://apify.com/jaaylee/walmart-search-scraper) and compare price and demand.

### Use the AliExpress search API

Python ([apify-client](https://docs.apify.com/api/client/python)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("jaaylee/aliexpress-search-scraper").call(
    run_input={"searchTerms": ["wireless earbuds"], "maxPagesPerSearch": 2, "sort": "bestsellers"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["position"], item["productId"], item["price"], item["soldCount"])
```

Find the best-selling products under a price that ship from a local warehouse:

```python
run = client.actor("jaaylee/aliexpress-search-scraper").call(
    run_input={"searchTerms": ["yoga mat"], "maxPagesPerSearch": 5, "shipTo": "DE", "currency": "EUR", "maxPrice": 30}
)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
local = sorted((i for i in items if i["shipFrom"] in {"DE", "PL", "ES", "FR"}), key=lambda i: -(i["soldCount"] or 0))
for i in local[:10]:
    print(i["soldCount"], i["price"], i["currency"], i["shipFrom"], i["title"][:60])
```

JavaScript / Node.js ([apify-client](https://docs.apify.com/api/client/js)):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('jaaylee/aliexpress-search-scraper').call({
    searchTerms: ['phone case'],
    maxPagesPerSearch: 2,
    shipTo: 'GB',
    currency: 'GBP',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((i) => console.log(i.position, i.productId, i.priceText, i.soldCount));
```

cURL (synchronous run that returns the results):

```bash
curl -X POST "https://api.apify.com/v2/acts/jaaylee~aliexpress-search-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["phone case"], "maxPagesPerSearch": 1}'
```

Export to CSV from the command line:

```bash
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&view=overview&token=<YOUR_APIFY_TOKEN>" -o aliexpress.csv
```

### Integrations: Google Sheets, Make, Zapier, n8n, webhooks and schedules

- **Schedules:** run daily or hourly from Apify Console → Schedules for rank and price tracking.
- **Google Sheets:** export each run to a sheet with the Apify Google Sheets integration.
- **Make, Zapier, n8n:** start runs and read results with the official Apify apps and nodes.
- **Webhooks:** get notified when a run finishes and process the results in your system.

### Use with AI agents (MCP)

This Actor works with the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). An AI agent can find it
with a query like "AliExpress search", read its input schema and call it to fetch AliExpress products, prices and sold
counts for a keyword — for example to shortlist dropshipping products in one conversation.

### More scrapers by the same developer

- [Walmart Search Scraper](https://apify.com/jaaylee/walmart-search-scraper) — Walmart search and category results
  with rank, price, was-price, ratings, seller and stock.
- [Amazon Search Scraper](https://apify.com/jaaylee/amazon-search-scraper) — Amazon search results with rank, price,
  "bought in past month" and delivery dates for any US ZIP code.
- [Amazon ASIN Scraper](https://apify.com/jaaylee/amazon-asin-product-details) — full Amazon product details by ASIN:
  price, BSR, stock, delivery date by ZIP, variants, specs, images.
- [Amazon Best Sellers Scraper](https://apify.com/jaaylee/amazon-bestsellers-scraper) — top 100 Best Sellers and New
  Releases for any Amazon category and subcategory.
- [Google Ads Transparency Scraper](https://apify.com/jaaylee/google-ads-transparency-scraper) — every ad a brand or
  retailer runs on Google Search, Shopping and YouTube, from the Google Ads Transparency Center.

### Tips for accurate AliExpress search data

- **Sort by orders for product research.** `bestsellers` sorts by orders, and `soldCount` tells you how far apart the
  top products really are.
- **Use URLs for filters.** Apply filters on aliexpress.com (Choice, free shipping, 4 stars & up, brand…) and paste the
  URL — the filters are kept and only the page number is set by the Actor.
- **Keep the country and currency fixed between runs.** Prices, promotions and even the result order depend on the
  ship-to country; keep the same settings so your history stays comparable.
- **Specific queries return fewer, better results.** For very specific queries AliExpress may show only a few exact
  matches; unrelated "you may also like" fillers are skipped and not charged.
- **Cap the cost.** Set **Max results in total** or a maximum charge per run; the Actor stops cleanly when it is reached
  and you only pay for results saved before that.
- **Monitor with failure alerts.** For scheduled monitoring tasks, turn on **Fail run on low data quality** so that a run
  with mostly blocked pages shows up as failed and triggers your Apify notifications.

### Limitations

- Results are read as a guest shopper (no login). Prices for new shoppers ("New shoppers save $…") and coins discounts
  are shown in `tags`; `price` is the price shown on the result card.
- `storeName` is shown by AliExpress only on some result cards (mostly sponsored ones); it is `null` otherwise. Store
  IDs, shipping fees and full specifications are on the product page, not in search results.
- `shipFrom` uses AliExpress codes; the United Kingdom is `UK`.
- AliExpress shows at most 60 pages per search. Use more specific keywords or filters to reach more products.
- CAPTCHAs (slider checks) are never solved; blocked pages are retried on fresh sessions and, if still blocked,
  skipped for free.

### FAQ

#### Is it legal to scrape AliExpress search results?

This Actor only reads publicly visible search pages without logging in and does not collect personal data. You are
responsible for using the data in line with applicable laws and AliExpress's terms. If in doubt, consult a lawyer.

#### How is soldCount different from "1,000+ sold"?

AliExpress rounds the label on the result card. The page also contains the exact order count, which this Actor
returns in `soldCount`. `soldText` keeps the label as shown.

#### Can I get prices in euros or pounds?

Yes. Set **Ship to country** (e.g. `DE`, `GB`) and **Currency** (e.g. `EUR`, `GBP`). AliExpress then shows the prices,
local-warehouse items and delivery estimates for that country.

#### Why are some products missing from page 2 or 3?

AliExpress repeats some products on later pages. With **Skip repeated products** on (default) each product is returned
once, at its first rank. Turn it off to get every card exactly as shown.

#### Can I scrape an AliExpress category instead of a keyword?

Yes. Paste a category URL (`aliexpress.com/category/...`) into **Search keywords or URLs**. Sort and price filters work
the same way.

#### Found a bug or need a field?

Open an issue on the Issues tab with the keyword and what you expected.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on AliExpress (e.g. phone case), or aliexpress.com search result (/w/wholesale-...) or category (/category/...) URLs with your filters. One per line. Duplicates are removed.

## `maxPagesPerSearch` (type: `integer`):

How many result pages to scrape for each search (AliExpress shows up to 60 results per page and up to 60 pages).

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

Result order, as in AliExpress's 'Sort by' bar. Ignored for URLs that already contain a sort.

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

2-letter country code (US, GB, DE, FR, CA, AU, ...). AliExpress shows prices, local-warehouse items and delivery estimates for this country.

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

3-letter currency code for prices (USD, EUR, GBP, CAD, AUD, ...).

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

Optional. Only results priced at or above this amount, in the selected currency.

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

Optional. Only results priced at or below this amount, in the selected currency.

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

Optional. Stop after this many results across all searches (useful to cap cost).

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

Optional. Stop each search after this many results.

## `includeSponsored` (type: `boolean`):

Keep results marked as ads. Turn off to get organic results only (organic rank is in organicPositionOnPage either way).

## `skipDuplicates` (type: `boolean`):

AliExpress repeats some products on later result pages. Keep only the first appearance of each product per search (its rank stays as shown). Skipped repeats are not charged.

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

How many searches run in parallel. Pages of one search are fetched in order so the overall rank is exact.

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

Primary proxy. The default Apify datacenter proxy works for AliExpress search pages.

## `residentialFallback` (type: `boolean`):

If a page stays blocked after 3 attempts on the primary proxy, retry it up to 2 more times through US residential proxies. Off by default because the datacenter proxy has been reliable. Blocked pages are never charged.

## `failOnLowQuality` (type: `boolean`):

For monitoring tasks: mark the run as failed when fewer than 80% of pages succeed or key fields are missing.

## Actor input object example

```json
{
  "searchTerms": [
    "phone case"
  ],
  "maxPagesPerSearch": 1,
  "sort": "relevance",
  "shipTo": "US",
  "currency": "USD",
  "includeSponsored": true,
  "skipDuplicates": true,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": false,
  "failOnLowQuality": false
}
```

# Actor output Schema

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

No description

## `files` (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 = {
    "searchTerms": [
        "phone case"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jaaylee/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 = {
    "searchTerms": ["phone case"],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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