# AliExpress Product Variants Scraper (`parsebird/aliexpress-product-variants-scraper`) Actor

Extract every SKU variant from AliExpress product pages: color, size, price, stock quantity, images, ratings, and store data. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/aliexpress-product-variants-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 variants

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### AliExpress Product Variants Scraper

Extract every SKU variant — color, size, price, stock, and images — from any [AliExpress](https://www.aliexpress.com) product page with a single product URL.

<table><tr>
<td style="border-left:4px solid #FF4747;padding:12px 16px;font-weight:600">
Paste an AliExpress product URL and get one row per SKU combination — color, size, price, stock quantity, variant image, and store data — including products with multiple variant dimensions like Color + Size.
</td>
</tr></table>

<br>

<table>
<tr>
<td colspan="2" style="padding:10px 14px;background:#FF4747;border:none;border-radius:4px 4px 0 0">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">ParseBird AliExpress Suite</span>
<span style="color:#FFD9D9;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Products, variants &amp; pricing data</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;border-right:none;border-top:none;vertical-align:top;width:50%;background:#FFFFFF">
🛒 &nbsp;<a href="https://apify.com/parsebird/aliexpress-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">AliExpress Scraper</a><br>
<span style="color:#78716C;font-size:11px">Search, listings &amp; product details</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:50%;background:#FFF5F5">
🎨 &nbsp;<a href="https://apify.com/parsebird/aliexpress-product-variants-scraper" style="color:#FF4747;text-decoration:none;font-weight:700;font-size:13px">AliExpress Product Variants Scraper</a><br>
<span style="color:#FF4747;font-size:11px;font-weight:600">&#10148; You are here</span>
</td>
</tr>
</table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
parsebird/aliexpress-product-variants-scraper on Apify. Call: ApifyClient("TOKEN").actor("parsebird/aliexpress-product-variants-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: urls (array of strings, required — full AliExpress product page URLs on aliexpress.com or aliexpress.us, e.g. "https://www.aliexpress.com/item/1005001234567890.html"), maxItems (integer, default 100 — max SKU variants to extract per product), proxyConfiguration (object, default Apify Residential Proxy). Output: one item per SKU variant with fields productId, productTitle, productUrl, variantSkuId, variantAttribute, variantDisplayName, variantColorValue, variantImage, originalPrice, salePrice, stockQuantity, maxBuyCount, properties, saleableStatus, productRating, totalReviews, stock, storeName, storeRating, storeTotalSales, storeId, storeUrl, storeOpenSince, mainImage, allImages, shippingInfo, maxDeliveryTime, minDeliveryTime, shipsFrom, skuProperties, totalAvailableSkus, categoryId, categoryPath, sellerCountry, topRatedSeller, brand, isBrandPlus, specifications. Full actor spec: fetch build via GET https://api.apify.com/v2/acts/parsebird~aliexpress-product-variants-scraper (Bearer TOKEN). Get token: https://console.apify.com/account/integrations
```

### What does AliExpress Product Variants Scraper do?

**AliExpress Product Variants Scraper** is an AliExpress API alternative that turns any product page into structured, SKU-level data. AliExpress doesn't expose product or variant data in a public API or in the page's raw HTML — this actor drives a real browser session, loads the product page the way a shopper would, and reads the same structured variant data AliExpress's own site renders for the color/size selector.

- 🎨 Extract every variant combination (Color, Size, or both) as a separate row, with sale price, original price, and stock quantity per SKU
- 🖼️ Get the variant-specific image for each color/style option, plus the full product image gallery
- 🏪 Capture store details: name, rating, total sales, seller country, top-rated status, and store open date
- 🚚 Get shipping details: ships-from country, delivery time range, and shipping cost
- ⭐ Include product rating, review count, brand, and the full specifications list on every row
- 🌍 Works on both `aliexpress.com` and `aliexpress.us` product URLs
- ⏱️ Schedule recurring runs to track price and stock changes, trigger via the [Apify API](https://docs.apify.com/api/v2), or connect to Zapier, Make, Google Sheets, and webhooks
- 📁 Export results as JSON, CSV, Excel, or pull them straight into your app with the Apify API

### What data can you extract from AliExpress?

| Field | Description |
|-------|-------------|
| `productId` / `productTitle` / `productUrl` | Product identifiers and link |
| `variantSkuId` | Unique identifier for the specific SKU |
| `variantAttribute` / `variantDisplayName` | Variant dimension(s) (e.g. "Color, Size") and their values (e.g. "Black, XL") |
| `variantColorValue` | Hex color code for color-type variants, when AliExpress provides one |
| `variantImage` | Variant-specific product image |
| `originalPrice` / `salePrice` | List price and current selling price for the SKU |
| `stockQuantity` / `saleableStatus` / `stock` | Units available, whether the SKU can be ordered, and a normalized stock label |
| `maxBuyCount` | Maximum units allowed per order for the SKU |
| `storeName` / `storeRating` / `storeTotalSales` / `topRatedSeller` | Seller/store details |
| `productRating` / `totalReviews` | Product rating and review count |
| `shippingInfo` / `shipsFrom` / `minDeliveryTime` / `maxDeliveryTime` | Shipping cost, origin country, and delivery window in days |
| `specifications` / `properties` | Full spec sheet and key technical properties |
| `categoryId` / `categoryPath` / `brand` | Category and brand metadata |

### How to scrape AliExpress product variants

1. Go to the [AliExpress Product Variants Scraper](https://apify.com/parsebird/aliexpress-product-variants-scraper) page on Apify Store
2. Click **Try for free**
3. Paste one or more AliExpress **product URLs** (from `aliexpress.com` or `aliexpress.us`)
4. Set **Max variants per product** to cap how many SKU rows to save per URL
5. Click **Start** and wait for the run to finish
6. Download your data as JSON, CSV, or Excel, or pull it through the **API** tab

### Use cases

- **Price monitoring** — Track sale price and stock changes across every color/size variant of a product over time
- **Catalog enrichment** — Pull variant images, prices, and specs into your own store or comparison app
- **Dropshipping research** — Compare variant pricing, stock levels, and store reputation before listing a product
- **Competitor tracking** — Monitor a competitor's AliExpress listings for price drops or stock-outs on specific variants
- **Sourcing due diligence** — Check store rating, total sales, seller country, and top-rated status before ordering

### How it works

AliExpress Product Variants Scraper drives a real browser session against the product URL you provide and reads the same structured SKU data AliExpress's own page loads to build its color/size selector — price, stock, and images per variant — instead of scraping visible text. It then expands every SKU combination (including multi-dimension variants like Color + Size) into its own dataset row, up to the **Max variants per product** you set.

### Use with the Apify API

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("parsebird/aliexpress-product-variants-scraper").call(run_input={
    "urls": ["https://www.aliexpress.com/item/1005007011185664.html"],
    "maxItems": 50,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['variantDisplayName']} - {item['salePrice']} ({item['stock']})")
```

**JavaScript:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('parsebird/aliexpress-product-variants-scraper').call({
    urls: ['https://www.aliexpress.com/item/1005007011185664.html'],
    maxItems: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(`${item.variantDisplayName} - ${item.salePrice} (${item.stock})`));
```

### Output example

```json
[
  {
    "productId": "1005007011185664",
    "productTitle": "Choice Wireless Bluetooth Headphones 43dB Hybrid Active Noise Cancellation Hi-Res LDAC 75H Spatial Audio Headset Earphones",
    "productUrl": "https://www.aliexpress.com/item/1005007011185664.html",
    "variantSkuId": "12000039933758752",
    "variantAttribute": "Color",
    "variantDisplayName": "Black",
    "variantColorValue": "#0080FF",
    "variantImage": "https://ae-pic-a1.aliexpress-media.com/kf/S93c6989dbef144f0aba095eb29f80cc6E.jpg",
    "originalPrice": 271.24,
    "salePrice": 92.77,
    "stockQuantity": 44,
    "maxBuyCount": 1,
    "properties": { "Department": "Unisex-adult", "Material": "Metal" },
    "saleableStatus": true,
    "productRating": 4.8,
    "totalReviews": 804,
    "stock": "In Stock",
    "storeName": "Ugreen Official Store",
    "storeRating": 98.4,
    "storeTotalSales": 100000,
    "storeId": "1103243235",
    "storeUrl": "https://www.aliexpress.com/store/1103243235",
    "storeOpenSince": "2023-10-19",
    "shippingInfo": "AliExpress Selection Standard Shipping - RM4.08",
    "maxDeliveryTime": 12,
    "minDeliveryTime": 6,
    "shipsFrom": "China",
    "skuProperties": ["Color:Black"],
    "totalAvailableSkus": 4,
    "categoryId": 63705,
    "sellerCountry": "Hong Kong,China",
    "topRatedSeller": false,
    "brand": "UGREEN"
  }
]
```

Download results in JSON, HTML, CSV, or Excel from the **Storage** tab, or fetch them programmatically from the [Dataset API](https://docs.apify.com/api/v2#/reference/datasets).

### Pricing

**How much does it cost to scrape AliExpress with this actor?**

AliExpress Product Variants Scraper uses **Pay-per-event** pricing — you only pay for SKU variant rows actually saved to the dataset:

| Event | Price per event | Price per 1,000 |
|-------|-----------------|------------------|
| `variant-scraped` | $0.0019 | **$1.90** |

Pricing steps down automatically as your account's Apify usage tier increases: $1.90/1,000 on the Free tier, $1.80/1,000 on Bronze and Silver, and $1.60/1,000 on Gold. Scraping a product with 20 variants on the Free tier costs about $0.04. Every new Apify account gets free trial credits, so you can test this actor without adding a payment method first.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `urls` | array of strings | **Yes** | — | AliExpress product page URLs to scrape |
| `maxItems` | integer | No | 100 | Maximum number of SKU variants to extract per product |
| `proxyConfiguration` | object | No | Apify Residential Proxy | Proxy settings used to load each product page |

### FAQ

**Does this actor use an official AliExpress API?**
No — AliExpress does not publish a public product API. This actor reads the same structured SKU data AliExpress's own product page loads into its variant selector, via a real browser session.

**Why do some variants show a null color or image?**
Older or discontinued variant options sometimes stay listed as unavailable SKUs (`saleableStatus: false`) without a current color swatch or image on AliExpress's side. The actor still returns them with whatever attribute name AliExpress's page itself displays.

**What happens if a product URL is invalid or the item no longer exists?**
The actor logs a warning and skips that URL, continuing with the rest of your list instead of failing the whole run.

**Why did a run return fewer products than URLs I submitted?**
AliExpress protects its product data with bot detection that occasionally blocks a session outright or returns a "not available in your region" response for a specific proxy exit country. The actor automatically retries each URL up to 3 times with a fresh browser session and proxy IP before giving up on it — if a URL still comes back empty after that, re-running it (ideally at a different time) usually succeeds.

**Does this work on `aliexpress.us` URLs?**
Yes. Both `aliexpress.com` and `aliexpress.us` product pages are supported.

**Can I schedule recurring runs?**
Yes. Use [Apify's Scheduler](https://docs.apify.com/platform/schedules) to run this actor daily, hourly, or on any custom interval to track price and stock changes over time.

**Can I use this with the API or integrations?**
Yes. Every run is accessible through the [Apify API](https://docs.apify.com/api/v2), and you can connect this actor to Zapier, Make, Google Sheets, Slack, and webhooks from the **Integrations** tab.

**I found a bug or the actor stopped returning data — what do I do?**
AliExpress occasionally changes its site layout or bot-detection rules. Please open an issue on the **Issues** tab with your input and a description of what happened — reports are usually addressed quickly.

### Is it legal to scrape AliExpress?

Scraping publicly available data, such as product listings and prices shown to any visitor without logging in, is generally considered legal, including under precedents like *hiQ Labs v. LinkedIn*. This actor does not access any account-gated or private data. You are responsible for using the collected data in compliance with AliExpress's terms of service and applicable data protection laws in your jurisdiction. Read more in [Apify's blog post on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Related actors

Other e-commerce actors from ParseBird:

- [AliExpress Scraper](https://apify.com/parsebird/aliexpress-scraper) — search AliExpress by keyword or URL and extract product listings, prices, and seller data
- [Trendyol Product Scraper](https://apify.com/parsebird/trendyol-product-scraper) — extract product data from Trendyol
- [Shopify Products Scraper](https://apify.com/parsebird/shopify-products-scraper) — extract product catalogs from any Shopify store
- [MercadoLibre Scraper](https://apify.com/parsebird/mercadolibre-scraper) — extract listings from MercadoLibre

# Actor input Schema

## `urls` (type: `array`):

AliExpress product page URLs to scrape (aliexpress.com or aliexpress.us). Add one URL per line, e.g. https://www.aliexpress.com/item/1005001234567890.html

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

Maximum number of SKU variants to extract from each product page.

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

AliExpress renders product data client-side behind bot detection. Residential proxies are strongly recommended for reliable runs at scale. Pinned to a single country by default since some products are region-restricted and switching exit countries between retries can trigger 'not available in your region' responses.

## Actor input object example

```json
{
  "urls": [
    "https://www.aliexpress.com/item/1005007011185664.html"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "urls": [
        "https://www.aliexpress.com/item/1005007011185664.html"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/aliexpress-product-variants-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 = {
    "urls": ["https://www.aliexpress.com/item/1005007011185664.html"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/aliexpress-product-variants-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 '{
  "urls": [
    "https://www.aliexpress.com/item/1005007011185664.html"
  ],
  "maxItems": 100
}' |
apify call parsebird/aliexpress-product-variants-scraper --silent --output-dataset

```

## MCP server setup

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