AliExpress Products Scraper avatar

AliExpress Products Scraper

Pricing

from $0.11 / 1,000 products

Go to Apify Store
AliExpress Products Scraper

AliExpress Products Scraper

Scrape AliExpress search results by keyword for dropshipping and price research. Rows carry the product id, title, link, price, old price, rating, order count, image, delivery window and promo labels. Filter by price, orders, rating or free shipping and track price changes. $0.12 per 1,000 products.

Pricing

from $0.11 / 1,000 products

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

4

Monthly active users

2 days ago

Last modified

Categories

Share

Search AliExpress by keyword and get one row per listing: product id, title, a clean link, the current price in one currency, the old price where there is a real markdown, the advertised discount, star rating, lifetime order count, the image and the Choice badge. No account, no API key.

It reads search listings and stops there. It never opens a product page, so there is no seller name, no review text and no shipping cost in the output.

InputSearch terms, or AliExpress search URLs
OutputOne row per product: price, old price and discount, star rating, lifetime orders, images, delivery window, selling-point labels, Choice and ad flags
Ceiling5,000 products per run, or per term with maxItemsPerTerm
Account neededNone
Price$0.12 per 1,000 products on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 41,000

๐Ÿ” What AliExpress Products Scraper does

You give it terms like phone case or wireless earbuds. It walks the search listings 20 products at a time and writes a row for each one, until it has the number you asked for or the term runs out.

Every price in one currency. Left alone, AliExpress picks the display currency itself, and a single dataset can come back with some rows in USD and some in EUR with nothing on the row saying which. Setting currency pins it for the whole run, so price means one thing when you sort or total the file, and every row carries currency so you never have to remember what you picked.

Titles in your language. Pick one of 14 languages and AliExpress returns its own translated titles, with the order badge in ordersText following along.

Results reshuffle as you page through them, which is AliExpress's doing. Rows are de-duplicated on productId as they arrive, so maxItems means unique products, not raw cards seen.

๐Ÿ“‹ What data you get from each AliExpress product

What you getField
Product id, title and a clean linkproductId, title, productUrl
Current price, the price before a markdown, the advertised discount, and the currencyprice, originalPrice, discountPercent, currency
Star ratingrating
Lifetime orders, exact and as the badge shows themorders, ordersText
The main image, and every picture the card lists, main firstimageUrl, imageUrls
The Choice badge, and whether it is a paid placementisChoice, isAd
Which of your terms found it, and where it rankedsearchKeyword, page, position
The selling-point labels on the card, and whether shipping is freepromoLabels, freeShipping
Delivery estimate: fewest and most days, earliest and latest datedeliveryMinDays, deliveryMaxDays, deliveryFromDate, deliveryToDate
AliExpress category ids, broadest first (ids only, no names)categoryIds
The price as the card prints it, like US $1.09priceText
Number of reviews (optional, includeReviewCount)reviewCount
Last run's price, the change, and whether the product is new (optional, monitorName)previousPrice, priceChange, isNew

โ–ถ๏ธ How to scrape AliExpress products

  1. Open AliExpress Products Scraper and click Try for free.
  2. Type your terms into Search terms, one per line.
  3. Set Maximum products, or Products per term to give each term its own cap. 40 is enough to see the shape of the output.
  4. Pick a Sort by, Currency, Ship-to country, Language or Filters if the defaults do not suit you, then click Start.
  5. Download the dataset as JSON, CSV or Excel.

Run it with no input at all and you get one labelled sample row, free.

๐Ÿ’ฐ How much does it cost to scrape AliExpress products?

$0.12 per 1,000 products on the Free plan. Paid plans pay a little less: $0.118 on Starter, $0.116 on Scale and $0.114 on Business. On the free plan, the $5 Apify gives you each month covers about 41,000 products.

You pay per product row. The sample row and diagnostic rows are not charged, and the same product appearing again on a later page is dropped before it becomes a row. Products your filters leave out are free too, and the review count is part of the product price. One exception: with a price monitor, every product checked is charged, including the ones onlyChanged does not write.

๐Ÿ“ฅ What you give it

{
"searchQueries": ["phone case", "wireless earbuds"],
"maxItemsPerTerm": 500,
"minOrders": 100,
"currency": "USD",
"country": "US"
}

maxItems is shared, and the first term fills it first: these two terms with maxItems: 1000 would come back as 1,000 phone cases and no earbuds. maxItemsPerTerm gives each term its own cap.

FieldDefaultWhat it is
searchQueriesnoneWhat to search for, one term per line.
productUrlsnoneAliExpress search URLs, if you would rather paste than type. The keyword is read out of the URL. An item page here gives you a BAD_INPUT row.
maxItems40Total products across all your terms, up to 5,000. The first term fills it first.
maxItemsPerTermnoneProducts per term, up to 5,000 each. When set, maxItems is not used.
sortByrelevanceAliExpress's own order, or priceAsc, priceDesc, ordersDesc (most orders first) or rating (highest rating first, unrated last). AliExpress sorts one page of 20 at a time; rating is sorted on each term's products once the term is done.
currencyUSDThe currency every price in the run comes back in: USD, EUR, GBP, CAD, AUD, BRL, RUB, JPY, KRW or INR.
countryUSTwo-letter ship-to country, which AliExpress uses for pricing and availability.
languageen_USThe language titles come back in: es_ES, fr_FR, de_DE, it_IT, pt_BR, nl_NL, pl_PL, tr_TR, ru_RU, ja_JP, ko_KR, ar_MA or th_TH.
minOrdersnoneOnly products with at least this many lifetime orders.
minRatingnoneOnly products rated at least this, 0 to 5. Unrated products are left out once it is set.
minPrice, maxPricenoneA price band, in your currency.
freeShippingOnlynoneOnly listings that show free shipping. Free shipping over a minimum spend does not count.
choiceOnlynoneOnly products with the Choice badge.
shipFromCountrynoneTwo-letter code, such as US or ES. Only listings that say they ship from there; one that does not say is left out. Local stock shows for the matching country: Spanish stock with ES, not with US.
includeReviewCountfalseAdds reviewCount. The run gets slower; the price does not change.
monitorNamenoneTurns on the price watch: letters, digits and hyphens, up to 38. Last prices are kept in a key-value store on your account named aliexpress-price-monitor- plus this name, one list per currency and ship-to country, up to 20,000 products. A new name marks every product isNew.
onlyChangedfalseWith monitorName: write only new and repriced products.
requestDelayMs800Gap between page requests, in milliseconds. Setting it to 0 falls back to 800.
proxyConfigurationnoneOptional. Leave it empty; the actor is set up to run without it. Your own servers are used exactly as given.

A value the actor can't use, like an unknown sortBy or a minPrice above maxPrice, stops the run with a free BAD_INPUT row before anything is searched.

๐Ÿ“ค What you get back

A real "phone case" row from 17 October 2026, imageUrls cut to three of seven:

{
"productId": "3256811843466811",
"title": "Card slot phone case for Samsung S25 Ultra Edge S23 S24 Plus FE A56 A55,with magnetic rotating ring holder, thickened shockproof",
"productUrl": "https://www.aliexpress.com/item/3256811843466811.html",
"price": 1.09,
"originalPrice": null,
"discountPercent": 90,
"currency": "USD",
"rating": 4.9,
"orders": 4430,
"ordersText": "4,000+ sold",
"imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S041465aa06b141109affeadc0ee1b03aH.jpg",
"isChoice": false,
"isAd": false,
"searchKeyword": "phone case",
"page": 1,
"position": 7,
"scrapedAt": "2026-10-17T04:48:24.175Z",
"promoLabels": ["Free shipping"],
"freeShipping": true,
"deliveryMinDays": 4,
"deliveryMaxDays": 10,
"deliveryFromDate": "2026-10-20",
"deliveryToDate": "2026-10-26",
"categoryIds": ["202192403", "202228401", "380230"],
"priceText": "US $1.09",
"imageUrls": [
"https://ae-pic-a1.aliexpress-media.com/kf/S041465aa06b141109affeadc0ee1b03aH.jpg",
"https://ae-pic-a1.aliexpress-media.com/kf/Sd3814f22e07a4f6cb02c36cbc6c1e5dcu.jpg",
"https://ae-pic-a1.aliexpress-media.com/kf/S7acd95374bba474ab11b6a4b2f8902dcW.jpg"
]
}
FieldHow to read it
priceWhat the listing sells for today, in your chosen currency. On AliExpress that is usually a sale price.
originalPriceThe price before the markdown, and null when the seller is not running one. Expect plenty of nulls rather than a copy of price dressed up as a discount.
discountPercentThe discount AliExpress advertises on the card. It can be present on a row where originalPrice is null, as above, because the two come from different places on the card.
priceTextThe price as the card prints it, like US $1.09. null when the card carries no price block, and then originalPrice and discountPercent are null too. In our tests that was between about one card in five and one in two, depending on the search. price is still read from the card's own numbers on those cards.
ordersThe exact lifetime order count, not a recent figure. Sort on this one.
ordersTextThe rounded badge a shopper actually sees, like 2,000+ sold.
isAdtrue on a paid placement. Roughly a fifth to a quarter of search rows are these. They are real listings, just promoted.
productUrlRebuilt from the product id, so it is clean and carries no tracking.
promoLabelsThe text labels on the card, in the run's language. Picture-only badges have no text and are not listed. null when there are none.
freeShippingtrue when the card shows free shipping, false when it shows other labels but not that one, null when it shows none. Free shipping over a minimum spend is false.
deliveryMinDays to deliveryToDateAliExpress's delivery estimate for your ship-to country. All four are null when the card gives none.
imageUrlsThe main image first, then each variant's picture once. null when the card lists no variant pictures.
reviewCountOnly with includeReviewCount. null when the count could not be read; the row is still charged.
previousPrice, priceChange, isNewOnly with monitorName. previousPrice is last run's price in the same currency, priceChange the difference, both null on a new product.

๐Ÿงพ Reading the output

RowHow to spot itBilled
A productIt has a productId and no _sample or _diagnostic keyyes
The sample row_sample: true, only when no search term or URL was givenno
A diagnostic_diagnostic: true and a statusno

Product rows carry no charged flag; the sample and diagnostic rows carry charged: false. The sample row has a productId like a real one, so to keep only products, drop every row with _sample or _diagnostic.

statusWhat it means
BAD_INPUTThat URL is not an AliExpress search URL, or a sortBy, language or filter value the actor can't use. A value like that stops the run before anything is searched.
NO_RESULTSAliExpress found nothing for that term, or nothing that passed your filters. When it fills the page with unrelated picks of its own instead, none of them are taken or charged. Usually a typo or a term that is too narrow.
FEW_MATCHESFewer than 2 of the first 100 products for that term passed your filters, so that term stopped there. leftOutByFilters says how many were left out, none of them charged.
MONITOR_UNAVAILABLEThe price watch's store could not be opened, so nothing was searched. Run it again in a few minutes.
SEARCH_FAILEDThat term could not be read, or AliExpress answered it without the sort or language you asked for. Re-run it.
NOT_SERVEDThis product was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
TIME_LIMITThe run got close to its time limit and stopped on its own. The products delivered before that are complete and charged. Give the run more time, or ask for fewer products, to get the rest.

A diagnostic row never fails the run, except two: when the time limit stopped the run before any product came back, the run ends as failed with a TIME_LIMIT row saying so, and a MONITOR_UNAVAILABLE run fails too.

๐Ÿ’ก What people use it for

  • Sizing a niche before sourcing it: pull 1,000 rows for a term and look at where price clusters and how far orders runs.
  • Finding what actually sells rather than what ranks, by sorting on orders instead of position.
  • Watching a term weekly: give it a monitorName, schedule it, and turn on onlyChanged to get just the new listings and the ones that changed price.
  • Dropping isAd rows to see the organic ranking on its own, or keeping only them to see who is paying for that term.

๐Ÿšง What it does not do

  • Search listings only. No product pages, so no description, no specifications, no variants and no SKU-level prices.
  • No seller or store fields. AliExpress took store name, seller id and seller country off its search cards, so there is no column rather than a column that is always empty.
  • No review text and no shipping cost. Both live on the product page; includeReviewCount adds only the number of reviews.
  • The sort is per page, not strict across pages. With sortBy set, every page of 20 comes back in that order, but page 2 can start above where page 1 ended. Sort the dataset yourself if you need one exact order. rating is the exception.
  • orders is lifetime, not recent. A listing from 2019 with 18,000 orders is not necessarily selling today.
  • Paid placements are mixed in, around a fifth to a quarter of rows, flagged isAd.
  • A term can stop early. When AliExpress stops answering for a page, the run ends that term with a NOT_SERVED row and keeps everything already delivered.
  • Prices are what AliExpress shows for your ship-to country, before any coupon, and they move constantly. scrapedAt records when the row was read.
  • It is not an official AliExpress tool. Dami's Studio is independent and is not affiliated with or endorsed by AliExpress or Alibaba, or by any other company named on this page.

๐Ÿงญ Which marketplace scraper do you need?

If you wantUse
AliExpress search results with prices and order countsThis one
Retail products in a Taobao categoryTaobao Category Products Scraper
1688 offers by search term: unit price, MOQ and the quantity price ladder1688 Wholesale Scraper
Export products, MOQ and suppliers on Alibaba.comAlibaba.com Scraper
Amazon products by keyword or ASINAmazon Scraper

โ“ Questions people ask

Do I need an AliExpress account or an API key?

No. Everything here is public search data.

Why are my AliExpress prices in the wrong currency?

They will not be if you set Currency. It is pinned for the whole run and echoed on every row.

No. productUrls takes search URLs and reads the keyword out of them. An item page comes back as BAD_INPUT.

Why is originalPrice empty on so many rows?

Because most listings are not on a markdown. A blank is the honest answer there.

Why did my second search term return nothing?

maxItems is shared and the first term filled it. Set maxItemsPerTerm instead.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/aliexpress-products-scraper. Either way the run happens on your Apify account at the same price.

These are public listings. Check AliExpress's terms and your own local rules before using the output commercially. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

๐Ÿ†˜ If something breaks

Open the Issues tab on the actor page. Send the search term and the run ID; if you got a diagnostic row, its status usually names the problem on its own.