# AliExpress Product Details Scraper: Variants, Stock & Specs (`tagadanar/aliexpress-product-details-scraper`) Actor

Paste AliExpress product URLs or item IDs, get one flat row per product: every variant's price and stock, specs, images, description, rating and sold count, store and shipping for your country. Removed items get a named status, free. $3 per 1,000 products.

- **URL**: https://apify.com/tagadanar/aliexpress-product-details-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** E-commerce, Agents, Integrations
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 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 Product Details Scraper: variants, stock, specs, description

Paste AliExpress product links or bare item IDs and get one flat row per product: every variant with its own price and stock, the discount, rating, review and sold counts, the brand and full specification table, gallery images and video, the seller's description text and its images, the store and its scores, and the shipping cost and delivery window for the country you ship to.

Every input gets exactly one row. When there is no product to deliver, the row says why in `status`: `not_found` (no such ID), `not_sold_here` (AliExpress sells it to other countries but not to your ship-to country), `removed`, `refused` (AliExpress's anti-bot page on every route, retry later) or `invalid_input`. Those rows are free.

$3 per 1,000 products, platform usage included, plus $0.001 per run. No API key, no login, no proxy settings to pick.

### What you get

| Field | Description |
| --- | --- |
| `input`, `productId`, `url` | What you gave, the product ID, and its canonical aliexpress.com link |
| `status`, `statusMessage` | `ok` for a delivered product, otherwise the reason there is none (see below) |
| `title` | Title, in the language you picked |
| `price`, `originalPrice`, `discountPercent`, `currency`, `priceText` | Price for your ship-to country, the crossed-out price and the discount, as AliExpress shows them |
| `minVariantPrice`, `maxVariantPrice` | Price range across all variants |
| `variants` | Every SKU: `skuId`, `attributes` (e.g. Color, Size, Ships From), `price`, `originalPrice`, `discountPercent`, `stock`, `available`, `maxPerOrder`, `image` |
| `options` | The option lists (e.g. Color: Black, White, Blue) |
| `variantCount`, `totalStock`, `inStock` | Variant count and stock |
| `rating`, `reviewsCount` | Star rating and number of reviews |
| `soldText`, `soldCount` | The sold label as shown ("10,000+ sold") and its number |
| `wishlistCount` | How many shoppers saved it |
| `brand`, `specs` | The brand and the specification table as `{name, value}` pairs |
| `images`, `videoUrl` | Gallery images and the product video |
| `description`, `descriptionImages`, `descriptionUrl` | The seller's description as plain text, the images in it, and the link to it |
| `storeName`, `storeId`, `sellerId`, `storeUrl`, `storeLogo` | The store |
| `storeRating`, `storePositiveRate`, `storeSold180Days`, `storeFollowers` | Store rating, positive feedback %, items sold in 180 days, followers (AliExpress shows no store rating for some stores: then it is `null`) |
| `storeCommunicationRating`, `storeItemAsDescribedRating`, `storeFeedbackScore` | The store's detailed scores, when AliExpress shows them |
| `storeCountry`, `storeOpenedAt`, `storeTopRated` | Where the seller is, since when, Top Rated flag |
| `shipFrom`, `shipTo` | Ship-from warehouse and ship-to country |
| `shippingCost`, `shippingCurrency`, `freeShipping`, `shippingCarrier` | The shipping option AliExpress shows first for your country |
| `deliveryDaysMin`, `deliveryDaysMax`, `deliveryDateMin`, `deliveryDateMax` | Delivery window in days and as dates |
| `shippingOptions` | Every shipping option listed |
| `categoryId`, `categoryPathIds` | AliExpress category IDs |
| `capturedAt` | When the row was read (UTC) |

#### Status values

| `status` | Meaning | Charged |
| --- | --- | --- |
| `ok` | Product delivered with full details | yes |
| `not_found` | AliExpress has no product with this ID (deleted long ago, or a wrong ID) | no |
| `not_sold_here` | AliExpress sells no variant of it to your ship-to country; another country may list it | no |
| `removed` | AliExpress lists the item as unavailable | no |
| `refused` | AliExpress showed its anti-bot check page on every route tried (this actor never solves it); retry later | no |
| `page_changed` | AliExpress answered without the usual product data (a change on their side) | no |
| `invalid_input` | Not an AliExpress product URL or ID; `statusMessage` says what it looked like (a search page, a short share link...) | no |
| `not_started`, `charge_limit` | The run time limit or your maximum charge was reached before this product | no |

#### Example row (real, trimmed, from a run on 2026-10-25)

```json
{
  "input": "https://www.aliexpress.com/item/1005009463232289.html",
  "productId": "1005009463232289",
  "status": "ok",
  "title": "Ultra Thin Clear TPU Phone Cases For iPhone 18 17 16 15 14 13 12 11 Pro Max Plus Air 16E XR XS Max Transparent Silicone Cover",
  "price": 1.09,
  "currency": "USD",
  "rating": 4.7,
  "reviewsCount": 2978,
  "soldText": "10,000+ sold",
  "soldCount": 10000,
  "brand": "Amour Brave",
  "variantCount": 35,
  "variants": [
    { "skuId": "12000049183381385", "attributes": { "Color": "Clear", "Compatibility by Model": "iPhone 16 Pro Max" }, "price": 1.09, "originalPrice": 3.08, "discountPercent": 65, "stock": 6, "available": true, "maxPerOrder": 1 }
  ],
  "description": "Ultra Thin Clear TPU Phone Cases For iPhone 18 17 16 15 14 13 12 11 Pro Max Plus Air 16E XR XS Max Transparent Silicone Cover",
  "descriptionImages": ["https://ae-pic-a1.aliexpress-media.com/kf/Sf898ce9c147a42edb66872faa1120d79n.jpg"],
  "storeName": "Shop1102861803 Store",
  "storeId": "1102860872",
  "storeRating": 4.9,
  "shipFrom": "China",
  "shipTo": "US",
  "shippingCost": 1.99,
  "deliveryDaysMax": 13
}
```

### Who uses this

- **Dropshippers and store owners.** Sync variants, stock and prices of the products you sell, with the real shipping fee and delivery window for your customers' country.
- **Price and stock monitoring.** Schedule a run on your product list and track per-variant price and availability over time; `not_found` / `not_sold_here` / `removed` rows tell you when a product disappears.
- **Catalog and listing builders.** Titles, images, description, spec tables and variant matrices ready to map into Shopify, WooCommerce or a marketplace feed.
- **Supplier vetting.** Compare stores selling the same item by rating, positive feedback, followers and years open.
- **AI and data teams.** Clean structured product records for matching, enrichment or catalog work.

### Input

| Field | What it does |
| --- | --- |
| Product URLs or item IDs | `https://www.aliexpress.com/item/1005009463232289.html`, `1005009463232289`, any country site (`fr.`, `de.`, `es.aliexpress.com`...), `aliexpress.us`, `aliexpress.ru`, mobile `m.aliexpress.com` links, `/i/<id>.html` links. A pasted block of IDs separated by spaces, commas or new lines works too. |
| Ship to | The country prices, stock, shipping and delivery dates are calculated for |
| Currency | Currency for every price |
| Language | Language of titles, specs and descriptions |
| Include the description text | On by default; turn off if you do not need the description |

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/1005009463232289.html",
    "1005010587572937"
  ],
  "shipTo": "DE",
  "currency": "EUR",
  "language": "de_DE"
}
```

The same product listed twice is delivered and billed once. Up to 5,000 products per run.

### Pricing

Pay per product delivered, platform usage included, plus a flat start fee per run.

| Plan | Per 1,000 products | Run start |
| --- | --- | --- |
| Free | $3.00 | $0.001 |
| Bronze | $2.70 | $0.001 |
| Silver | $2.40 | $0.001 |
| Gold | $2.10 | $0.001 |

Status rows (not found, not sold to your country, removed, refused, invalid input) cost nothing. Set a maximum charge per run and the actor stops when it is reached.

### Limits and honest caveats

- **Prices are what a logged-out shopper sees.** AliExpress often shows first-order and welcome-deal prices to new visitors; `price` is that sale price, `originalPrice` the crossed-out one. Coupons that need an account are not applied. For EU ship-to countries AliExpress usually shows no crossed-out price.
- **About 2.5 seconds per product.** AliExpress limits how many products one network address may open in a row, so the actor reads one product at a time and moves to another route when one is refused: 50 products took a little over 2 minutes in our tests, 1,000 take about 45 minutes (raise the run timeout or split the list).
- **Descriptions** are the seller's own text; many sellers describe with images only, then `description` is empty and `descriptionImages` carries them.
- **Short share links** (`a.aliexpress.com/_...`) are not resolved: open one once in a browser and paste the `/item/<id>.html` address it lands on.
- **Category names** are not part of the product data, only the category IDs.

### FAQ

**Do I need an AliExpress account, an API key or a proxy?** No.

**Can I get prices for my country?** Yes: pick the ship-to country and currency. Prices, stock, shipping cost and delivery dates are the ones AliExpress calculates for that destination. A product AliExpress does not sell to that country comes back as `not_sold_here`.

**Does it work with aliexpress.us links?** Yes. US product IDs (3256...) work as well as the global ones (1005...).

**I have search keywords, not product links.** Use [AliExpress Product Details & Search Scraper](https://apify.com/tagadanar/aliexpress-scraper): it searches, ranks and can also add reviews.

**Can I monitor price changes?** Yes: save your input as a task and schedule it; each row carries `capturedAt`.

### Related actors

- [AliExpress Product Details & Search Scraper](https://apify.com/tagadanar/aliexpress-scraper): search by keyword, results with rank, product details and reviews.
- [Alibaba Scraper](https://apify.com/tagadanar/alibaba-scraper): wholesale suppliers, MOQ and tiered prices on Alibaba.com.
- [Amazon Product Scraper](https://apify.com/tagadanar/amazon-product-scraper): the same product research on Amazon.
- [Taobao Scraper](https://apify.com/tagadanar/taobao-scraper): products from China's largest marketplace.

# Changelog

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

# Actor input Schema

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

AliExpress product links or bare item IDs, one per line, e.g. https://www.aliexpress.com/item/1005009463232289.html or 1005009463232289. Any country site (fr., de., es.aliexpress.com...), aliexpress.us, aliexpress.ru and mobile m.aliexpress.com links work. Each one returns one row: the full product, or a status naming why not (not found, removed, refused).

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

Prices, stock, shipping cost and delivery dates are the ones AliExpress shows a shopper in this country.

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

Currency for every price.

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

Language of titles, specs and descriptions (AliExpress's own translation).

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

Also read the seller's description (text and image links). No extra charge.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/1005009463232289.html"
  ],
  "shipTo": "US",
  "currency": "USD",
  "language": "en_US",
  "includeDescription": true
}
```

# Actor output Schema

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

One row per input: full product details (status ok) or a status row naming why there is no product.

# 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 = {
    "productUrls": [
        "https://www.aliexpress.com/item/1005009463232289.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/aliexpress-product-details-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 = { "productUrls": ["https://www.aliexpress.com/item/1005009463232289.html"] }

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

```

## MCP server setup

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