AliExpress Product Detail Scraper — Variants & Shipping
Pricing
from $13.87 / 1,000 product items
AliExpress Product Detail Scraper — Variants & Shipping
Extract AliExpress product detail records from URLs or IDs. Get variants, shipping, seller data, specifications, ratings, stock, and images. Run with residential proxy; no product-page login or third-party key. Pricing: $0.0143 per record on Free.
Pricing
from $13.87 / 1,000 product items
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
1
Bookmarked
84
Total users
13
Monthly active users
15 hours ago
Last modified
Categories
Features
Share
AliExpress Product Detail Scraper
Extract structured details from AliExpress product pages, including variants, prices, shipping, seller data, specifications, ratings, stock, and images. The Actor needs an Apify residential proxy for reliable access; the default proxy setting already selects it.
- Compare variant prices and stock for sourcing, dropshipping, and resale.
- Monitor sale prices, list prices, discounts, shipping, and delivery estimates.
- Enrich catalogs with specifications, seller details, and image URLs.
- Review
parse_confidenceandwarningswith each record.
What you get
| Fields | Type | Empty value |
|---|---|---|
product_id | string | never empty |
title, price_text, currency | string | null (a blank string is also null) |
url | string | never empty |
price, sale_price, original_price | number | null |
discount_pct | number (1 decimal) | null unless sale is below original |
variants | array of objects | [] |
variant_count | integer | 0 |
variants[].sku_id | string | "" when absent |
variants[].variant | string | null without a label |
variants[].price | number | null without a price |
variants[].stock | integer | null when the key is missing |
variants[].available | boolean | null when the key is missing |
shipping_cost | number | null; 0 is possible |
free_shipping | boolean | null when shipping_cost is null; otherwise shipping_cost == 0 |
shipping_currency | string | null when shipping_cost is null |
delivery_estimate | string | null when no delivery text with a date or day count is found; independent of shipping_cost |
seller_name, store_url, seller_level, seller_country | string | null |
seller_rating, rating | number | null |
seller_id | integer | null |
seller_total_reviews | integer | null |
seller_open_year | integer | null |
review_count | integer | null |
specifications | object of string to string | null when no attributes |
available_inventory | integer | null |
images | array of strings | [] |
main_image | string | null when images is empty |
category_path, category, description_url | string | null |
parse_confidence | number, 0 to 1, 3 decimals | never empty |
warnings | array of strings | [] |
scraped_at | ISO 8601 string | never empty |
A field is null when AliExpress does not provide it, unless the table gives another empty value. Values are copied from AliExpress without conversion, so their type can differ from the type shown.
Sample output
Shortened real record: only the first variants item and first images item are shown; category_path, category, and description_url are omitted. All other record fields are included.
{"product_id": "1005008233186508","title": "80ST-M02430 220V 750W AC Servo Motor 2.39N.M. 3000RPM 0.75KW Servomotor Single-Phase AC Drive Permanent Magnet Matched Driver","url": "https://www.aliexpress.us/item/1005008233186508.html","price": 167.88, "sale_price": 167.88, "original_price": null, "discount_pct": null, "currency": null, "price_text": "$167.88","variants": [{"sku_id": "12000044823433404", "variant": "Speed: white shielded wire", "price": 296.59, "stock": 80, "available": true}], "variant_count": 8,"shipping_cost": null, "shipping_currency": null, "free_shipping": null, "delivery_estimate": "Delivery: Dec 04 - 26","seller_name": "China Motor automation Store", "seller_id": 240411452, "store_url": "https://m.aliexpress.com/store/storeHome.htm?sellerAdminSeq=240411452", "seller_rating": 93.4, "seller_total_reviews": 708,"seller_level": "21-s", "seller_country": "China", "seller_open_year": 6, "rating": 5, "review_count": 3,"specifications": {"Does it include wireless functionality?": "No", "Does it include a Battery?": "No", "High-concerned chemical": "none", "EU LVD Voltage": "Low voltage: Below 50Vac or 75Vdc", "Model Number": "80ST-M02430 220V AC servo motor", "Phase": "Single-phase", "Protect Feature": "Waterproof", "Type": "Servo Motor", "Efficiency": "IE 1", "AC Voltage": "208-230 / 240 V", "Certification": "CE", "Origin": "Mainland China", "Output Voltage": "750W"},"available_inventory": 720,"images": ["https://ae-pic-a1.aliexpress-media.com/kf/S24c7bb15861249af93abb7fee431bcb0t.jpg_960x960.jpg?has_lang=1&ver=1"], "main_image": "https://ae-pic-a1.aliexpress-media.com/kf/S24c7bb15861249af93abb7fee431bcb0t.jpg_960x960.jpg?has_lang=1&ver=1","parse_confidence": 0.95, "warnings": ["shipping_cost_equals_price_dropped", "shipping_missing"],"scraped_at": "2026-11-04T06:10:03.028730+00:00"}
currency is null because neither the original-price object nor the sale-price object carried a currency. original_price and discount_pct are null, and price equals sale_price, because no original price was present.
shipping_cost is null because AliExpress gave no explicit fee. The only fee-like value equalled an item price, so the Actor dropped it and added shipping_cost_equals_price_dropped. shipping_currency and free_shipping are therefore null, while delivery_estimate is filled because it is read separately.
shipping_missing lowers the score by 0.05. The score starts at 1.0, and the dropped-fee warning deducts nothing, giving parse_confidence 0.95.
Pricing
This Actor uses pay-per-event pricing. One product-item event is charged for each non-empty product detail record pushed to the dataset.
| Plan | product-item | apify-actor-start |
|---|---|---|
| Free plan | $0.0143 per event | $0.00005 per event |
On the Free plan, 1,000 product-item events cost $14.3; 10,000 cost $143.
An empty record has no title and neither price nor sale_price, or has parse_confidence below 0.5; it is written without a product-item charge. Failed products are skipped without that charge.
The apify-actor-start event is charged once per GB of run memory, with a minimum of one event per run. The default run memory is not specified in the Actor configuration, so price examples count only product-item events and assume one apify-actor-start event per run, at minimum.
The Apify Free plan includes $5 of monthly platform usage credit. With one Free-plan apify-actor-start event assumed, the $5 credit covers 349 product results at the Free-plan product-item price.
Platform usage of your runs (compute, proxy traffic, and storage) is billed to you separately because this Actor uses the Pay per event + usage option.
How to use
- Open the Actor in an Apify account.
- Paste AliExpress product URLs or bare numeric IDs of at least 8 digits into
productUrls. - Choose
US,GB,DE,FR,ES, RU, orBRforcountry, and setapifyProxyCountryto that market. - Keep
currencyasUSDand setmaxItemsto1for the first check run, then read the returnedcurrency. - Use the residential proxy configuration below.
- Run and review records, confidence, and warnings.
- Repeat the run through Apify Schedules; daily is a starting point for prices and stock.
{"productUrls": ["https://www.aliexpress.com/item/1005008233186508.html"],"country": "US","currency": "USD","maxItems": 1,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Export the dataset as JSON or CSV, or read it through the Apify dataset API.
Input parameters
| Parameter | What it does | Default |
|---|---|---|
productUrls | Required URLs or bare numeric IDs of at least 8 digits. Valid IDs are deduplicated and processed once. | Required |
country | Trimmed and uppercased. US → www.aliexpress.us; GB, DE, FR, ES, BR → www.aliexpress.com; RU → aliexpress.ru; any other code → www.aliexpress.us. Shipping, delivery, and price follow the proxy exit. | US |
currency | Trimmed, uppercased, and sent as requested. Returned currency is AliExpress's value. | USD |
maxItems | Processes the first deduplicated IDs in input order. 0 means all; a positive value limits the count. Minimum: 0. | 0 |
proxyConfiguration | Browser proxy. A residential proxy is required for reliable access. | {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"],"apifyProxyCountry":"US"} |
disableUsageStats | Set to true to turn off the run summary described in Usage statistics. | false |
Limits and edge cases
| Condition | What you see | What to do |
|---|---|---|
| No valid URL or numeric ID of at least 8 digits | The run ends as Failed and nothing is charged. The status message names the problem. | Paste a product URL or an ID. |
| A product is deleted or cannot be parsed | That product is skipped without a charge; other products continue. | Check the URL and rerun it. |
| AliExpress blocks the session | The Actor makes at most 4 session attempts and re-queues each product at most twice. | Use a smaller input or run later. |
| Some products stay unreachable after rows were pushed | The run ends as Succeeded with a short dataset. The log lists up to 10 IDs still unprocessed; the reason appears in the log as a Partial delivery warning. | Compare product_id values with your input and rerun missing IDs. |
| No product is delivered | The run ends as Failed with a status message. Nothing is charged. Empty records may be in the dataset. | Try later, or use a smaller input. |
| The time limit is reached after rows were pushed | The run ends as Succeeded with the pushed rows. The status message says results are partial because of the time limit. | Use a larger timeout or a smaller input. |
| The time limit is reached before any product is delivered | The run ends as Failed and nothing is charged. | Use a larger timeout or a smaller input. |
| You abort the run, or the platform stops it | Rows already pushed stay in the dataset. A product is charged only after its row is written. | Read the rows and rerun the rest. |
| The browser is unavailable and no row was pushed | The run ends as Failed and nothing is charged. | Try again later. |
| The browser becomes unavailable after rows were pushed | The run ends as Succeeded with those rows. The remaining IDs are not processed. | Rerun the remaining IDs. |
| Shipping or an optional detail is unavailable | The field can be null, and warnings or lower confidence can appear. Delivery may still be present. | Check warnings and parse_confidence. |
FAQ
How much does it cost to scrape an AliExpress product?
On the Free plan, each product-item event costs $0.0143 and each apify-actor-start event costs $0.00005. The Free plan includes the $5 monthly platform usage credit described in Pricing; 1,000 product-item events cost $14.3.
Why did my run return no products?
No valid URL or ID, an unavailable browser, empty AliExpress data, or products remaining unreachable after the bounded session attempts can leave the run with no charged product record. Check the status message and log. If the dataset has fewer rows than the input, compare product_id values with the input list.
What should I do if access is not working?
Use the residential proxy configuration shown above. If the time limit hits or products stay unreachable, use a larger timeout or a smaller input.
Is collecting this public data legal or allowed?
The Actor collects publicly available product information shown on AliExpress product pages. Whether collecting or using it is legal or allowed depends on your use case, applicable law, and AliExpress's terms; review those requirements before using the output.
Usage statistics
This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.
A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.
To opt out, set disableUsageStats to true in the input. Nothing is sent then.