AliExpress Scraper avatar

AliExpress Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
AliExpress Scraper

AliExpress Scraper

Scrape AliExpress search results: product title, sale price, original price, discount, star rating, units sold and images, from any search term, with pagination.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Juan ignacio Veltri

Juan ignacio Veltri

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

AliExpress Scraper — search results with price, discount, rating and units sold

Scrape AliExpress search results: product title, sale price, original price, discount percentage, star rating, units sold and images — 60 products per page, with pagination.

Why this one keeps working

Every guide on scraping AliExpress tells you to read window.runParams. That object no longer exists on the current site, which is why a lot of copied-from-a-tutorial scrapers quietly return nothing.

This Actor reads window._dida_config_._init_data_, the state AliExpress's own front end renders from. No CSS selectors are involved, so a redesign does not break it.


Quick start

{ "searchTerms": ["headphones"] }

Find what actually sells, not just what is listed:

{
"searchTerms": ["phone case", "screen protector"],
"minSold": 100,
"minRating": "4.5",
"maxPagesPerSearch": 10
}

minSold is the most useful filter here. AliExpress lists an enormous number of products that have never sold a unit; requiring a sales history is the fastest way to a list worth reading.

Discount hunting:

{ "searchTerms": ["mechanical keyboard"], "onlyDiscounted": true, "maxPrice": "40" }

Input

FieldTypeDefaultDescription
searchTermsarray["headphones"]What to search for
startUrlsarrayResult pages you already filtered on the site
maxPagesPerSearchinteger360 products per page
minPrice / maxPricestringSale price range, e.g. 5, 49.99
minRatingstringStar rating floor, e.g. 4.5
minSoldintegerMinimum units sold
onlyDiscountedbooleanfalseOnly products genuinely below list price
keywordsarrayOnly titles mentioning any of these
maxItemsinteger300Total cap. 0 = no cap
includeSeenbooleantrueOff = only products not seen in previous runs

Output

{
"id": "aliexpress:3256812596783345",
"url": "https://www.aliexpress.com/item/3256812596783345.html",
"title": "Wireless Over-Ear Headphones, 5.3 Smart Chip, HiFi Music Gaming",
"price": { "amount": 0.99, "currency": "USD", "raw": "US $0.99" },
"listPrice": { "amount": 21.72, "currency": "USD", "raw": "US $21.72" },
"discountPercent": 95,
"rating": 5,
"soldQuantity": 51,
"condition": "new",
"images": ["https://ae-pic-a1.aliexpress-media.com/kf/Sfa03eb...jpg"],
"sku": "3256812596783345",
"seller": null,
"reviewsCount": null
}

Three deliberate choices:

  • listPrice is only set when there is a real discount. With no offer running, AliExpress repeats the same number in both price fields; copying it would show a discount that does not exist.
  • soldQuantity is a number. The site publishes "51 sold" as text, and you cannot sort or filter a string by sales volume.
  • Products with no price are not returned at all. The results page mixes in promoted cards that carry no price in the page state; a product row you cannot compare, sort or filter by price is not a result, and you are not charged for it. On a real run that was 17% of the raw cards.
  • seller, reviewsCount and stockQuantity are null. They live on the product page, which is a separate request per product — a search results page simply does not carry them. That is information, not a gap.

Notes and limits

  • AliExpress rate-limits hard. From an ordinary connection the first request succeeds and the second comes back as a 2 KB challenge page. This Actor runs behind Apify's unblocking proxy, so you do not have to configure anything — but it is why runs are slower than a plain HTTP scraper, and why raising maxRequestsPerMinute a lot is how runs start failing.
  • Prices are in the market's currency, which depends on the country the request is made from. Runs are pinned to the US market so a dataset stays comparable across runs.
  • Products with no price are dropped by minPrice/maxPrice, because claiming they fall in a range they never published would misreport the filter you asked for.

Pricing

Pay per result. You are charged for products that actually land in your dataset — filtered out and duplicate rows cost nothing.