# AliExpress Search Scraper & API: Products, Prices & Orders (`quarra/aliexpress-search-scraper`) Actor

AliExpress search results from keywords or search and category URLs: title, price, discount, rating, units sold, images, position, up to 3,600 products per search. Turn on full details to add variants with price and stock, store and shipping. Any country, currency and language.

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

## Pricing

from $4.00 / 1,000 product with full details

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, Prices, Orders by Keyword

Type keywords (or paste an AliExpress search or category URL) and get the products AliExpress lists for them, in its
order: title, price, discount, rating, units sold, images, page and rank. Up to 3,600 products per search, any
country, currency and language, no account or API key. Export as JSON, CSV or Excel, or read it through the Apify API.

- **Search data for each product**: title, URL, ID, price, price before discount, rating, units sold, images,
  category, Choice and ad flags, listing date, position in the search.
- **Filters**: sort (best match, orders, price up or down), min and max price; a pasted search URL keeps its filters.
- **Full details on demand**: turn on **Full details for search results** to add, for each product, its variants
  with price and stock, all images, store, shipping to your country and specifications.

**$2.50 per 1,000 search results, $5 per 1,000 products with full details**, plus a small start fee per run. Inputs
that fail and search cards without any price are not charged.

### Quick start

1. Type keywords into **Search keywords or search URLs**, one search per line (`wireless earbuds`), or paste a search
   or category URL copied from your browser.
2. Set **Max results per search** and **Max products**.
3. Click **Start** and read the products in the run's **Output** tab.

Through the API:

```json
{
  "searchQueries": ["phone holder", "https://www.aliexpress.com/w/wholesale-desk-lamp.html"],
  "maxItems": 500,
  "maxResultsPerSearch": 250,
  "sort": "orders",
  "minPrice": 2,
  "shipTo": "GB",
  "currency": "GBP"
}
```

Like any Apify Actor, it can be scheduled, connected to webhooks, Make, Zapier, n8n, or called by AI agents through
Apify's MCP server.

### Output

One record per product. A search result (real record of 10/10/2026, shortened):

```json
{
  "type": "product",
  "status": "ok",
  "detailLevel": "search",
  "productId": "1005011654041741",
  "url": "https://www.aliexpress.com/item/1005011654041741.html",
  "title": "Car Phone Holder – Nano Flexible Silicone, 360° Rotation, Doesn't Block Screen,  Compatible with BlackBerry.",
  "currency": "USD",
  "price": 0.99,
  "originalPrice": null,
  "discountPercent": null,
  "rating": 4.9,
  "soldCount": 2167,
  "soldText": "2K+ sold",
  "image": "https://ae-pic-a1.aliexpress-media.com/kf/S5cc06d1f806e400d853a7903ad2eefe9F.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/S5cc06d1f806e400d853a7903ad2eefe9F.jpg", "…"],
  "categoryId": "34,200003411,200003380,200003383",
  "isChoice": false,
  "isAd": false,
  "tags": [],
  "listedAt": "2026-02-06T00:00:00Z",
  "offer": null,
  "searchQuery": "phone holder",
  "searchPage": 1,
  "searchPosition": 1,
  "shipTo": "US",
  "scrapedAt": "2026-10-10T07:24:06.562Z"
}
```

| Field | What it holds |
|---|---|
| `detailLevel` | `search` for search data, `full` when the product also got its full details |
| `price`, `originalPrice`, `discountPercent` | in the run's currency, for the ship-to country (no price before discount in EU countries, where AliExpress shows none) |
| `soldCount`, `soldText` | units sold, and the label shown on the card (`2K+ sold`) |
| `searchPage`, `searchPosition` | where the product sits in the search |
| `offer`, `newBuyerPrice` | a gift offer for new buyers shown on the card (`FREE with any purchase`) and its price; `price` stays the regular price |
| `status` | `ok` (charged), `noPrice` (a card shown without any price, not charged), `error` (not charged; `error` says why) |

With **Full details for search results**, each product also has `skus` (variants with price and stock), `shipping`,
`store`, `attributes` (specifications) and all images, and is charged as a product with full details.

The run summary (counts per search, why the run stopped) is the `OUTPUT` record of the run's key-value store.

### Inputs

- **Search keywords or search URLs**: keywords, or a search or category URL copied from your browser (its filters are
  kept, and its `page=` is the first page read). Up to 5,000 searches per run. A search URL from a country site
  (`fr.aliexpress.com`, `de.aliexpress.com`…) uses that site's country, currency and language when you leave
  **Ship to**, **Currency** and **Language** at US, USD and English.
- **Max products**: total products the run delivers, counted exactly. **Max results per search**: at most 3,600
  (AliExpress shows 60 pages of 60). A product found by two searches is delivered once.
- **Sort**, **Min price**, **Max price** (in the run's currency, decimals allowed).
- **Ship to (country)**, **Currency**, **Language**.

### Pricing

Pay per event:

| Event | Price |
|---|---|
| Search result | $2.50 per 1,000 |
| Product with full details | $5.00 per 1,000 |
| Run start | $0.005 per GB of memory (1 GB minimum; $0.005 at the default 512 MB) |

Higher Apify plans pay less per event. Not charged: search cards without any price, error records, duplicates. Set
**Maximum cost per run** in the run options and the run stops before going over it.

### Limits

- AliExpress shows at most 60 pages per search; use several keywords or price ranges to go further.
- **Full details in large volumes**: AliExpress limits how many product pages it serves in a short period. When it
  does, the run keeps going with the search data for the remaining products, charged as search results (at the lower
  price) and flagged `detailLevel: "search"`; the run's status message says so.
- Store rating and store sales are empty for stores where AliExpress does not show them (new stores).

### FAQ

**Why is the price different from what I see in my browser?** AliExpress prices depend on the ship-to country and the
currency. Set **Ship to** and **Currency** to yours.

**What if the run is restarted by the platform (migration or reboot)?** It resumes where it was: products already in
the dataset are not delivered or charged again.

**Is it legal?** It collects public product data shown to any visitor. Check the rules that apply to your use of the
data.

### Related tools from Quarra

- [AliExpress Product Details Scraper](https://apify.com/quarra/aliexpress-product-details-scraper): full product
  pages from links, with optional reviews.
- [AliExpress Scraper](https://apify.com/quarra/aliexpress-scraper): searches and product links in one run.

# Actor input Schema

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

One per line: keywords (wireless earbuds), or an AliExpress search or category URL pasted as is (its filters are kept). Each search returns products in AliExpress order, up to 'Max results per search'.

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

Total number of products delivered by the run, counted exactly.

## `maxResultsPerSearch` (type: `integer`):

Products per search, at most 3,600 (AliExpress shows 60 pages of 60).

## `scrapeDetails` (type: `boolean`):

Off: search results with title, price, rating, orders, images (charged as search results). On: every search result also gets the full product details: all variants with price and stock, all images, store, shipping, specifications (charged as products).

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

Order of search results.

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

Lowest price, in the run's currency.

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

Highest price, in the run's currency.

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

Two-letter country code (US, GB, DE, FR, ES, BR…). Prices, availability and shipping are those for this country.

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

Currency of every price.

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

Language of titles and specifications (as translated by AliExpress).

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

Connection. Keep the default (automatic). Costs are included in the price.

## Actor input object example

```json
{
  "searchQueries": [
    "phone holder"
  ],
  "maxItems": 20,
  "maxResultsPerSearch": 20,
  "scrapeDetails": false,
  "sort": "default",
  "shipTo": "US",
  "currency": "USD",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every product with all its fields, reviews, and free error records with the reason.

## `overview` (type: `string`):

One line per product: title, price, rating, orders, store, shipping.

## `summary` (type: `string`):

Counts per input, why the run stopped, unavailable products and errors.

# 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": [
        "phone holder"
    ],
    "maxItems": 20,
    "maxResultsPerSearch": 20,
    "shipTo": "US",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/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": ["phone holder"],
    "maxItems": 20,
    "maxResultsPerSearch": 20,
    "shipTo": "US",
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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