Quarra
Guide · AliExpress

How to export AliExpress product variants with their price and stock

The price AliExpress lists for a product is the cheapest of its variants. How variants are laid out, why one row per variant matters, and how to export them all with their price and stock.

Measured on October 10, 2026.

The short answer

An AliExpress product is one listing with many variants: every combination of its options, such as color and phone model, is a SKU with its own price, stock and image. The price AliExpress lists for the product is the lowest of them. To compare or monitor prices you need one row per variant, which the page only shows one click at a time. The AliExpress Scraper returns every variant of each product in a skus list, and ten lines of Python turn it into a CSV with one row per variant.

Why the listed price is not enough

We searched “magsafe phone case” on October 10, 2026, shipped to the US, and took the first three products with every variant. Here is what the listed price hides:

ProductVariantsListed priceVariant prices
Magnetic clear case for iPhone41$1.09All 41 at $1.09
Metallic TPU case for Samsung Galaxy A126$1.78One variant at $1.78 (white, Galaxy A37); the other 125 from $2.58 to $2.71
Woven MagSafe case for iPhone216$4.33$4.33 to $4.74, depending on the model

For the second product, the listed price applies to 1 variant out of 126. A price tracker that reads the listing price follows that one variant. Stock varies the same way: from 7 to 9,999 units across the variants of that product, as AliExpress displays them.

How variants are laid out

A product page has option groups (skuProperties; for the case below, Color with 10 values and, in this seller's words, “Material” with 25 phone models) and the list of combinations that exist (skus). Not every combination is sold: options multiply, SKUs are what the seller actually listed. Each SKU carries its options, its price and price before discount, its stock, whether it can be bought, and the image of its color when there is one.

"skuProperties": [
  { "id": "14", "name": "Color", "values": [ { "id": "366", "name": "Green", "image": "https://..." }, "..." ] },
  { "id": "10", "name": "Material", "values": [ { "id": "...", "name": "For iPhone 16 Plus" }, "..." ] }
],
"skus": [
  { "skuId": "12000049795776652", "attributes": { "Color": "Green", "Material": "For iPhone 16 Plus" },
    "price": 1.09, "originalPrice": 3.68, "stock": 872, "maxPerOrder": 1, "available": true,
    "image": "https://ae-pic-a1.aliexpress-media.com/kf/S551c3f555c6144fd8058838f4f3cba9bN.jpg" }
]

Option names are the seller's own words: one seller writes “Material” for the phone model, another “Compatibility by Model”. Group by attributes per product rather than by a fixed column name.

Doing it by hand

On the product page, each click on an option updates the price and the quantity available. For a product with 2 colors and 3 sizes, writing down 6 prices is fine. For 216 combinations it is an afternoon, and the numbers have changed by the time you finish.

Export every variant with our Actor

Turn on full details so that each search result comes with its variants. Set the country and currency you sell to or buy from: AliExpress prices change with the ship-to country.

{
  "searchQueries": ["magsafe phone case"],
  "maxItems": 50,
  "scrapeDetails": true,
  "shipTo": "US",
  "currency": "USD"
}

Or give product pages directly in productUrls (any country site, or the bare ID such as 1005013110952666) to follow the same products over time.

One row per variant, in Python

from apify_client import ApifyClient
import csv

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("quarra/aliexpress-scraper").call(run_input={
    "searchQueries": ["magsafe phone case"],
    "maxItems": 3,
    "scrapeDetails": True,
    "shipTo": "US",
    "currency": "USD",
})
items = client.dataset(run.default_dataset_id).list_items(clean=True).items
products = [x for x in items if x["type"] == "product" and x.get("detailLevel") == "full"]

with open("variants.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.writer(f)
    w.writerow(["productId", "title", "skuId", "options", "price", "originalPrice", "stock", "shippingFee", "deliveryDays", "store"])
    for p in products:
        for s in p["skus"]:
            options = " / ".join(f"{k}: {v}" for k, v in s["attributes"].items())
            w.writerow([p["productId"], p["title"], s["skuId"], options, s["price"], s.get("originalPrice"),
                        s.get("stock"), p.get("shippingFee"), p.get("deliveryDays"), p["store"]["name"]])
print(len(products), "products,", sum(len(p["skus"]) for p in products), "variants")

Tested with apify-client 3.2 on October 10, 2026: 3 products, 383 variants, in a 21-second call. With apify-client 2.x, write run["defaultDatasetId"] instead of run.default_dataset_id. Some of the rows it wrote, with the title left out:

OptionsPriceBefore discountStock
Color: Black With Box / Compatibility by Model: iPhone 11 Pro Max$4.33$8.65999
Color: Black With Box / Compatibility by Model: iPhone 13 Pro Max$4.63$9.26996
Color: Cherry Red With Box / Compatibility by Model: iPhone 16$4.58$9.16996
Color: Cherry Red With Box / Compatibility by Model: iPhone 16 Plus$4.69$9.39994

The same product also has shipping, the list of shipping options to your country with fee and delivery days; the CSV above keeps the cheapest one, from shippingFee and deliveryDays.

Which variant reviewers bought

With "includeReviews": true, each review comes back as its own row with a variant field, the options the reviewer bought as AliExpress records them, such as Color:Dark Blue Compatibility by Model:Galaxy A26. It tells you which variants actually sell. A seller can reuse an old listing for a new product, and the reviews stay with the listing: in our sample, a clear iPhone case carried reviews of a magnetic phone holder, with variants the listing no longer offers. Compare the review variants with the current options before you trust the count.

Limits

  • Stock is the quantity AliExpress displays for the variant. Some sellers show a round number such as 9,999, which reads more like a cap than a count; in our sample, 25 of the 126 variants of one product did.
  • AliExpress limits how many product pages it serves in a short period. When it does, a run with full details keeps going with the search data for the remaining products, charged as search results and marked "detailLevel": "search": those rows have no variants. For thousands of products with variants, split them across runs.
  • Prices are those shown for the ship-to country and currency of the run, without your account's coupons.

What it costs

A product with full details, all its variants included, costs $5.00 per 1,000 on the Free and Starter plans ($4.50 on Scale, $4.00 on Business and above), plus $0.005 per run at the default memory. The 3 products above, with their 383 variants, cost $0.02 on the Free plan. Search results without details cost $2.50 per 1,000, and reviews $0.50 per 1,000.

Run it on the Apify Store

Products with full details cost $5.00 per 1,000, search results $2.50 and reviews $0.50 per 1,000 on the Free plan, plus $0.005 per run. Errors and empty results are not charged, and you can set a maximum cost per run.