# AliExpress Scraper (`datascrapers/aliexpress-scraper`) Actor

Search AliExpress and collect product listings. Product details and reviews are optional and stay on the same product row.

- **URL**: https://apify.com/datascrapers/aliexpress-scraper.md
- **Developed by:** [Farhan Ali](https://apify.com/datascrapers) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 products

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Scraper** creates a structured dataset of product listings collected from [AliExpress](https://www.aliexpress.com). Each dataset item is one product and can include price, currency, rating, sold count, images, shipping hints, category ids, and optional nested `productDetails` and `productReviews` objects on the same row. Query the source using search phrases, product URLs, or numeric product ids, control volume with `maxItems`, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format. Pricing starts from **$0.001 per product row**, with optional **$0.001** per details enrichment and **$0.001** per review when those options are enabled.

[![AliExpress Scraper — input to structured data](https://raw.githubusercontent.com/faizanalii/apify-actor-assets/main/aliexpress-scraper/aliexpress-scraper-value-demo.gif)](https://apify.com/datascrapers/aliexpress-scraper)

### Dataset at a glance

| Property | Value |
| --- | --- |
| Source | [www.aliexpress.com](https://www.aliexpress.com) |
| Record unit | One product listing |
| Input methods | `searchQueries`, `productUrls`, `productIds` |
| Main identifiers | `productId`, `url` |
| Delivery | Apify default dataset and [Dataset API](https://docs.apify.com/api/v2/dataset-items-get) |
| Export formats | JSON, CSV, Excel, XML, RSS, HTML (via Apify export) |
| Update model | Fresh records per Actor run |
| Pricing | Pay per event: product row, optional details, optional reviews (see below) |

### Coverage and available records

**Supported**

- Wholesale search results (about 60 products per search page) from a text query
- Direct lookup by AliExpress item URL or numeric `productId`
- Ship-to storefront context via `region` (prices, language, shipping copy)
- Search filters: sort, category id, min/max price, ship-from country, free-shipping switch, extra refine switches
- Optional **product details** on the same row: product-page title and full gallery (`productDetails`), with listing fields filled from search when price was missing on the page
- Optional **reviews** on the same row: summary stats, filter counts, impressions, and a `reviews` array inside `productReviews`, paginated up to `maxReviewsPerProduct` (0 = all pages)

**Observed behavior**

- Listings reflect the selected ship-to country and residential proxy country; align `region` and `proxyConfiguration.apifyProxyCountry`
- Review text may be translated for the selected locale; some listings aggregate reviews from similar products (`reviewScope` / `note` on `productReviews`)
- When details or reviews are enabled, products are enriched in parallel up to `concurrency`

**Not currently collected**

- Full variant/SKU matrix and long-form description from the gated authenticated product API
- Separate dataset rows per review (reviews stay nested under `productReviews`)
- Historical price snapshots across runs (each run is a new extract)

### Data dictionary

#### Product (top-level fields)

| Field | Type | Nullable | Description | Example |
| --- | --- | --- | --- | --- |
| `productId` | string | no | AliExpress product id | `"3256812906139628"` |
| `title` | string | yes | Listing title from search or detail page | `"For PD 35W Fast Quick Charger..."` |
| `url` | string | no | Canonical item URL | `https://www.aliexpress.com/item/3256812906139628.html` |
| `sourceQuery` | string | yes | Search phrase that produced the row; null for id-only input | `"usb c cable"` |
| `price` | number | yes | Sale price in ship-to currency | `0.33` |
| `priceFormatted` | string | yes | Display price string | `"US $0.33"` |
| `currency` | string | yes | ISO currency code | `"USD"` |
| `originPrice` | number | yes | Reference/origin price when available | `3.78` |
| `discountPercent` | integer | yes | Discount percentage | `91` |
| `skuId` | string | yes | Listing sku id from search card | `"12000060251500036"` |
| `rating` | number | yes | Star rating from search card | `4.9` |
| `sold` | integer | yes | Sold count when exposed numerically | `83578` |
| `soldText` | string | yes | Human-readable sold string | `"50,000+ sold"` |
| `imageUrl` | string | yes | Primary image URL | `https://ae-pic-a1.aliexpress-media.com/...` |
| `images` | string\[] | no | Gallery URLs (may be empty) | `[ "https://..." ]` |
| `categoryIds` | string\[] | no | Category id path from search trace | `[ "202192403", "100001205" ]` |
| `shipFrom` | string | yes | Ship-from country code | `"CN"` |
| `shipTo` | string | yes | Ship-to country from run region | `"US"` |
| `delivery` | string | yes | Delivery/ETA selling point when present | `"Fastest delivery in 6 days"` |
| `freeShipping` | boolean | no | Free shipping flag from search card | `false` |
| `sellingPoints` | string\[] | no | Marketing tags from the card | `[ "Free shipping" ]` |
| `launchDate` | string | yes | Launch time string from search card | `"2026-09-01 00:00:00"` |
| `productDetails` | object | yes | Present when `includeProductDetails` is true; otherwise `null` | see below |
| `productReviews` | object | yes | Present when `includeReviews` is true; otherwise `null` | see below |

**Recommended deduplication key:** `productId` (stable within AliExpress). For cross-run dedup, use `productId` plus your run timestamp or dataset id.

#### `productDetails` (when enabled)

| Field | Type | Nullable | Description |
| --- | --- | --- | --- |
| `title` | string | yes | Title from product page Open Graph / embed |
| `url` | string | no | Item page URL |
| `imageUrl` | string | yes | Primary gallery image |
| `images` | string\[] | no | Full gallery from page embed |

Top-level price, rating, and sold fields may be filled from a matching search card when the product page shell does not expose them.

#### `productReviews` (when enabled)

| Field | Type | Nullable | Description |
| --- | --- | --- | --- |
| `productId` | string | no | Queried product id |
| `total` | integer | yes | Total reviews reported by the storefront |
| `totalPages` | integer | yes | Total review pages |
| `fetched` | integer | no | Reviews returned in this run (after limits/charges) |
| `pageSize` | integer | yes | Page size used (20) |
| `filter` | string | no | Review filter applied |
| `sort` | string | no | Review sort applied |
| `note` | string | yes | Storefront note (e.g. aggregated reviews) |
| `reviewScope` | string | yes | Storefront product type (e.g. hyperchain listings) |
| `averageStars` | number | yes | Average star rating |
| `starCounts` | object | yes | Counts for five–one star buckets |
| `positiveCount` | integer | yes | Positive review count |
| `neutralCount` | integer | yes | Neutral review count |
| `negativeCount` | integer | yes | Negative review count |
| `impressions` | object\[] | no | Frequent review phrases `{ phrase, count }` |
| `filterCounts` | object\[] | no | Filter bucket counts `{ filter, count }` |
| `reviews` | object\[] | no | Review objects (see below) |

#### Review object (`productReviews.reviews[]`)

| Field | Type | Nullable | Description |
| --- | --- | --- | --- |
| `evaluationId` | string | no | Review id |
| `productId` | string | yes | Product id on the review (may differ on aggregated listings) |
| `buyerName` | string | yes | Display name |
| `buyerCountry` | string | yes | Buyer country code |
| `anonymous` | boolean | no | Anonymous flag |
| `stars` | number | yes | Star rating (0–5 scale) |
| `date` | string | yes | Localized review date string |
| `text` | string | yes | Translated or primary text |
| `textOriginal` | string | yes | Original feedback when available |
| `sku` | string | yes | Purchased variant description |
| `images` | string\[] | no | Review image URLs |
| `upvotes` | integer | no | Helpful votes |
| `logistics` | string | yes | Shipping line when present |

### Example dataset record

Produced with `searchQueries: ["usb c cable"]`, `region: "US"`, `maxItems: 10`, details and reviews disabled:

```json
{
  "productId": "3256812906139628",
  "title": "For PD 35W Fast Quick Charger USB Type C For iPhone 15 14 13 12 11 Pro Max Mini Plus XR XS Charging Data Cable Accessories",
  "url": "https://www.aliexpress.com/item/3256812906139628.html",
  "sourceQuery": "usb c cable",
  "price": 0.33,
  "priceFormatted": "US $0.33",
  "currency": "USD",
  "originPrice": 3.78,
  "discountPercent": 91,
  "skuId": "12000060251500036",
  "rating": 4.9,
  "sold": 83578,
  "soldText": "50,000+ sold",
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S44533c20a8614092bc17c156f9251bc2T.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/S44533c20a8614092bc17c156f9251bc2T.jpg"],
  "categoryIds": ["202192403", "100001205", "440504"],
  "shipFrom": "CN",
  "shipTo": "US",
  "delivery": "Fastest delivery in 6 days",
  "freeShipping": false,
  "sellingPoints": ["Fastest delivery in 6 days"],
  "launchDate": "2026-09-01 00:00:00",
  "productDetails": null,
  "productReviews": null
}
```

### Query and input reference

| Input | Type | Required | Default | Accepted values | Description |
| --- | --- | ---: | --- | --- | --- |
| `searchQueries` | string\[] | no\* | — | Non-empty strings | Product search phrases |
| `productUrls` | string\[] | no\* | — | Item or wholesale URLs | Item URLs add ids; wholesale URLs become queries |
| `productIds` | string\[] | no\* | — | Numeric ids | Direct product ids |
| `maxItems` | integer | no | `0` | ≥ 0 | Max product rows; `0` = no cap |
| `region` | string | no | `US` | `US`, `DE`, `GB`, … | Ship-to country for prices and locale |
| `currency` | string | no | preset | 3-letter code | Override display currency |
| `locale` | string | no | preset | e.g. `en_US` | Override locale |
| `sort` | string | no | `default` | `default`, `orders`, `price_asc`, `price_desc` | Search sort |
| `categoryId` | string | no | — | Category id | Narrow search |
| `minPrice` | number | no | — | Number | Min price in ship-to currency |
| `maxPrice` | number | no | — | Number | Max price in ship-to currency |
| `shipFrom` | string | no | — | Country code | Ship-from filter |
| `freeShippingOnly` | boolean | no | `false` | true/false | Free shipping filter |
| `switches` | string\[] | no | `[]` | e.g. `freeshipping` | Extra search refine codes |
| `includeProductDetails` | boolean | no | `false` | true/false | Fill `productDetails` (parallel enrichment) |
| `includeReviews` | boolean | no | `false` | true/false | Fill `productReviews` (parallel enrichment) |
| `maxReviewsPerProduct` | integer | no | `20` | ≥ 0 | Cap reviews per product; `0` = all pages |
| `reviewFilter` | string | no | `all` | `all`, `image`, `local`, … | Review subset |
| `reviewSort` | string | no | `default` | `default`, `newest` | Review order |
| `concurrency` | integer | no | `5` | 1–20 | Parallel products when details/reviews enabled |
| `proxyConfiguration` | object | no | US residential | Apify proxy | Use residential; match proxy country to `region` |

\*At least one of `searchQueries`, `productUrls`, or `productIds` is required.

**Minimal request**

```json
{
  "searchQueries": ["usb c cable"],
  "maxItems": 100,
  "region": "US",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

**Advanced request (search + details + reviews)**

```json
{
  "searchQueries": ["wireless earbuds"],
  "maxItems": 50,
  "region": "DE",
  "sort": "orders",
  "freeShippingOnly": true,
  "includeProductDetails": true,
  "includeReviews": true,
  "maxReviewsPerProduct": 20,
  "reviewFilter": "image",
  "reviewSort": "newest",
  "concurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

### Retrieve the data through the API

1. Start the Actor with JSON input (Apify Console, CLI, or HTTP API).
2. Wait for the run to finish, or use the synchronous dataset endpoint for small jobs.
3. Read items from the run’s default dataset (`GET /v2/datasets/{datasetId}/items`).
4. Paginate with `offset` and `limit`, or export the full dataset from the Console.

**Python (Apify client)**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("datascrapers/aliexpress-scraper").call(
    run_input={
        "searchQueries": ["usb c cable"],
        "maxItems": 25,
        "region": "US",
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
            "apifyProxyCountry": "US",
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["productId"], item.get("price"), item.get("currency"))
```

**cURL (start run)**

```bash
curl -s -X POST "https://api.apify.com/v2/acts/datascrapers~aliexpress-scraper/runs" \
  -H "Authorization: Bearer <YOUR_APIFY_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["usb c cable"],"maxItems":10,"region":"US"}'
```

Agent-oriented docs: [aliexpress-scraper.md](https://apify.com/datascrapers/aliexpress-scraper.md). OpenAPI spec is published on the Actor API tab.

### Data quality and record handling

- **Completeness:** Search cards populate most listing fields. `rating`, `sold`, and price may be null on sparse cards. Optional columns stay `null` when disabled or when a single product fails enrichment.
- **Fail-soft:** One bad product page or review page does not stop the run; that product’s optional object is set to `null` and processing continues.
- **Deduplication:** Within a run, the same `productId` is emitted once even if it appears in multiple queries or pages.
- **Cross-run dedup:** Not built in. Merge datasets on `productId` in your warehouse or use Apify webhooks to append only new ids.
- **Retries:** Transient network errors are retried on HTTP fetches; block pages skip the affected request.
- **Derived fields:** `productDetails` may overlay listing price/rating from search; review `stars` are normalized to a 0–5 scale from storefront scores.

Run statistics (`recordsScraped`, detail and review charge counts, timestamps) are stored in the key-value store under `run-stats`.

### Export and pipeline examples

| Destination | Recommended method | Typical use |
| --- | --- | --- |
| PostgreSQL / Supabase | Dataset API + scheduled Actor | Product catalog monitoring |
| Google Sheets | Apify integration or CSV export | Merchandising samples |
| S3 / cloud storage | Apify dataset export or webhook | Raw JSON archive |
| BI tools (Looker, Power BI) | CSV/Excel export | Price and rating dashboards |

### Pricing and cost examples

This Actor uses **pay-per-event** billing on the Apify platform. Placeholder Store prices (verify in Console before budgeting):

| Event | What triggers it | Placeholder unit price (Free tier) |
| --- | --- | ---: |
| Actor start | Each run | $0.00005 |
| `product` | Each product row pushed to the dataset | $0.001 |
| `product-detail` | Each product where `productDetails` is returned | $0.001 |
| `review` | Each review object inside `productReviews.reviews` | $0.001 |

Higher Apify plans may receive tier discounts on result events. Residential proxy usage is billed separately through Apify proxy consumption.

**Illustrative totals (product event only, details/reviews off)**

| Products | Estimated product event cost |
| ---: | ---: |
| 1,000 | $1.00 |
| 10,000 | $10.00 |

**Illustrative totals (100 products, details on, 20 reviews each)**

| Charge | Count | Placeholder cost |
| --- | ---: | ---: |
| Product rows | 100 | $0.10 |
| Details | 100 | $0.10 |
| Reviews | 2,000 | $2.00 |
| **Total (events only)** | | **~$2.20** |

Estimates exclude compute, proxy, and plan discounts. Edit event prices in the Apify Console monetization tab.

### Limitations and responsible data use

- Collects data exposed on the public AliExpress storefront for the selected ship-to context; availability and fields change when AliExpress updates its site.
- You are responsible for complying with AliExpress terms, applicable commerce and privacy laws, and your own data retention policies.
- Reviews and ratings may reference aggregated or translated content; do not treat them as verified purchase records without your own validation.
- The Actor does not guarantee complete marketplace coverage for a query—use pagination via repeated runs with different filters if you need broader samples.

### Dataset questions

#### What does one dataset item represent?

One AliExpress product listing. Reviews and extra gallery metadata are nested objects on that same item, not separate rows.

#### Which field should I use as a unique identifier?

Use `productId` as the primary key. Pair it with `region` or `shipTo` if you compare the same id across countries.

#### Are fields nullable or conditional?

Yes. Listing metrics from search may be null. `productDetails` and `productReviews` are null unless you enable them. Individual review fields can be null when buyers post anonymously or without text.

#### Can I retrieve the records as CSV or JSON?

Yes. Export from the Apify Console or call the Dataset API with `format=csv` or `format=json`.

#### How do I paginate large datasets?

Use dataset API `offset` and `limit` parameters, or download split files from the Console export dialog.

#### Does the Actor return historical data?

Each run captures a current snapshot. Store dataset exports yourself if you need history.

#### What counts as a billable result?

Each product row bills the `product` event. Enabling details bills `product-detail` once per successful enrichment. Each review object returned in `productReviews.reviews` bills one `review` event.

### Related datasets from Data Scrapers

| Actor | Relationship |
| --- | --- |
| [Amazon Search Scraper](https://apify.com/datascrapers/amazon-scraper) | Compare marketplace search results and pricing fields |
| [HomeDepot Scraper](https://apify.com/datascrapers/homedepot-scraper) | Retail product catalog with sku-oriented listings |

Browse the full [Data Scrapers Store profile](https://apify.com/datascrapers) for more commerce and catalog Actors.

### Data Scrapers support

Need an additional field, ship-to preset, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample AliExpress URL or search phrase, required fields, expected product volume, and whether you need nested reviews or details on every row.

# Actor input Schema

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

Product search phrases, such as usb c cable. Use this, Product URLs, or Product IDs.

## `productUrls` (type: `array`):

AliExpress item links, such as https://www.aliexpress.com/item/1005013092454380.html. Wholesale search links are treated as search queries.

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

Numeric AliExpress product ids, for example 1005013092454380.

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

Maximum number of product rows to return. 0 means no cap.

## `region` (type: `string`):

Country used for prices, language, and shipping. Match the proxy country to this value.

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

Optional three-letter currency override, such as USD. Leave empty to use the ship-to country currency.

## `locale` (type: `string`):

Optional locale override, such as en_US or de_DE. Leave empty to use the ship-to country locale.

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

How search results are ordered.

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

Optional AliExpress category id to narrow search.

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

Inclusive minimum price in the ship-to currency. Leave empty for no minimum.

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

Inclusive maximum price in the ship-to currency. Leave empty for no maximum.

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

Optional ship-from country code, such as CN or US. This is not the ship-to country.

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

Keep search results that offer free shipping.

## `switches` (type: `array`):

Optional storefront filter codes, such as freeshipping. The filterCode: prefix is added when missing.

## `includeProductDetails` (type: `boolean`):

Add a productDetails object on each product row. Off by default. Charged once per product when the details are returned. Uses concurrency.

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

Add a productReviews object on each product row. Off by default. Reviews are nested in that object and charged one by one. Uses concurrency.

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

How many reviews to keep on each product when reviews are enabled. 0 means every review page.

## `reviewFilter` (type: `string`):

Which reviews to collect.

## `reviewSort` (type: `string`):

Review order.

## `concurrency` (type: `integer`):

How many products to enrich at once. Used only when product details or reviews are enabled.

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

Residential proxy. Set the country to the same ship-to country.

## Actor input object example

```json
{
  "searchQueries": [
    "usb c cable"
  ],
  "productUrls": [],
  "productIds": [],
  "maxItems": 10,
  "region": "US",
  "sort": "default",
  "freeShippingOnly": false,
  "switches": [],
  "includeProductDetails": false,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "reviewFilter": "all",
  "reviewSort": "default",
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

One dataset row per product. Reviews and product details are nested on that row.

## `runStats` (type: `string`):

Product, detail, and review counts for this run.

# 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": [
        "usb c cable"
    ],
    "productUrls": [],
    "productIds": [],
    "maxItems": 10,
    "region": "US",
    "currency": "",
    "locale": "",
    "sort": "default",
    "categoryId": "",
    "shipFrom": "",
    "switches": [],
    "maxReviewsPerProduct": 20,
    "reviewFilter": "all",
    "reviewSort": "default",
    "concurrency": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascrapers/aliexpress-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": ["usb c cable"],
    "productUrls": [],
    "productIds": [],
    "maxItems": 10,
    "region": "US",
    "currency": "",
    "locale": "",
    "sort": "default",
    "categoryId": "",
    "shipFrom": "",
    "switches": [],
    "maxReviewsPerProduct": 20,
    "reviewFilter": "all",
    "reviewSort": "default",
    "concurrency": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("datascrapers/aliexpress-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": [
    "usb c cable"
  ],
  "productUrls": [],
  "productIds": [],
  "maxItems": 10,
  "region": "US",
  "currency": "",
  "locale": "",
  "sort": "default",
  "categoryId": "",
  "shipFrom": "",
  "switches": [],
  "maxReviewsPerProduct": 20,
  "reviewFilter": "all",
  "reviewSort": "default",
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call datascrapers/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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