AliExpress Products Scraper
Scrape AliExpress products by search term: product ID, title, price, discount, rating, order count and image. All prices in one currency. $0.12 per 1,000.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,productUrls,maxItems(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00012 per product = $0.12 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Product | One AliExpress product returned, including title, price, original price, discount, rating, order count, image and product URL. Sample rows and error rows are never charged. | $0.00012 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-09, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | What to search AliExpress for. One row is returned per product found. | array |
productUrls | Or paste AliExpress search URLs instead of typing terms, the keyword is read out of the URL. | array |
maxItems | Total products across all search terms. | integer |
sortBy | The order AliExpress returns products in. AliExpress sorts each page of 20 itself; from one page to the next the order is close but not strict, so sort the dataset afterwards if you need an exact order. | string |
currency | Currency prices are returned in. Leave it set and every row in a run uses the same currency. | string |
country | Country used for pricing and availability, as a two-letter code. | string |
language | The language product titles come back in. AliExpress supplies the translated titles; the order-count badge in ordersText follows the same language. | string |
requestDelayMs | Gap between page requests. Raise it if runs start hitting rate limits. | integer |
What you get
A structured dataset — each result includes fields like:
titlepriceoriginalPricediscountPercentcurrencyratingordersisChoiceproductUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in E-commerce & Price Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Taobao Category Products Scraper
Scrape Taobao products by category. Get the title, price in CNY, image, product URL, seller and shop ids. No account, no cookies. $1.95 per 1,000 products.
Amazon Product & Reviews Scraper
Scrape Amazon by keyword or ASIN: title, price, rating, review count, brand and availability. 7 marketplaces, no API key. $0.75 per 1,000.
Shopify Products Scraper
Scrape any Shopify store's catalog: titles, prices, variants, SKUs, stock, tags and images. No API key. $1.00 per 1,000 products.
Structured Product Price & Stock Monitor — JSON-LD / Shopify
Track product price and stock from a store's own JSON-LD or Shopify data. Restock, price-drop and sale alerts into Slack or Discord. No API key.
eBay Sold Listings Scraper
Get sold and completed eBay listings: sale price, shipping, sold date, condition, bids, on 9 marketplaces. Bring your own eBay login. $0.70 per 1,000.
1688 Wholesale Scraper
Scrape 1688.com wholesale listings. Get unit price, quantity price tiers, MOQ, supplier, sales count and rating. $0.35 per 1,000 products.
Where this tool sits
- Categories
- E-commerce & Price Tools
AliExpress Products Scraper: search results with prices, ratings and order counts
Type a search term and get the AliExpress listings back as rows. Product ID, title, canonical link, current price, the old price where there is a real markdown, star rating, lifetime order count, the image and the Choice badge.
It reads search listings and stops there. It does not open individual product pages, so there is no seller name, no review text and no shipping cost in the output.
| Input | Search terms, or AliExpress search URLs |
| Output | One row per product |
| Ceiling | 5,000 products per run |
| Account needed | None, and no API key |
| Price | $0.12 per 1,000 products, flat on every plan |
🔍 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. AliExpress decides the display currency on its own, and left alone 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. There is a currency field on every row so you never have to remember what you picked.
Results reshuffle as you page through them, which is AliExpress's doing. Rows are deduplicated on productId as they arrive, so maxItems means unique products and not raw cards seen.
📥 What you give it
{
"searchQueries": ["phone case", "wireless earbuds"],
"maxItems": 1000,
"currency": "USD",
"country": "US"
}
| Field | Default | What it is |
|---|---|---|
searchQueries | none | What to search for. The box starts with phone case in it, which is a suggestion and not a default. |
productUrls | none | AliExpress 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. |
maxItems | 40 | Total products across all your terms, up to 5,000. |
sortBy | relevance | AliExpress's own order, or priceAsc, priceDesc or ordersDesc (most orders first). AliExpress does the sorting, one page of 20 at a time. |
currency | USD | The currency every price in the run comes back in. USD, EUR, GBP, CAD, AUD, BRL, RUB, JPY, KRW or INR. |
country | US | Two-letter ship-to country, which AliExpress uses for pricing and availability. |
language | en_US | The 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. AliExpress supplies the translations, and ordersText switches language too. |
requestDelayMs | 800 | Gap between page requests, in milliseconds. Raise it if a long run starts coming up short. Setting it to 0 falls back to 800. |
proxyConfiguration | none | Optional. Leave it empty; the actor is set up to run without it. Your own servers are used exactly as given. |
Run it with no input at all and you get one labelled sample row, so you can see the shape before committing to a list.
📤 What you get back
A real row from a recent run:
{
"productId": "3256807846299122",
"title": "Soft Silicone Cute Cat Ear Phone Case For iPhone 16 17 13 15 14 12 11 Pro Max Air XS Max Funda Transparent Shockproof Back Cover",
"productUrl": "https://www.aliexpress.com/item/3256807846299122.html",
"price": 3.06,
"originalPrice": null,
"discountPercent": 13,
"currency": "USD",
"rating": 4.8,
"orders": 2336,
"ordersText": "2,000+ sold",
"imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S7bea8ef05d414461a09f1710f7e26ad5I.jpg",
"isChoice": true,
"isAd": false,
"searchKeyword": "phone case",
"page": 1,
"position": 1,
"scrapedAt": "2026-09-20T07:01:34.801Z"
}
| Field | What it is |
|---|---|
price | What the listing sells for today, in your chosen currency. On AliExpress that is usually a sale price. |
originalPrice | The price before the markdown, and null when the seller is not running one. A lot of listings sell at one price, so expect plenty of nulls rather than a copy of price dressed up as a discount. |
discountPercent | The discount AliExpress advertises on the card. It can be present on a row where originalPrice is null, because the two come from different places on the card. |
orders | The exact lifetime order count, not a recent figure. Sort on this one. |
ordersText | The rounded badge a shopper actually sees, like 2,000+ sold. |
isChoice | The AliExpress Choice badge. |
isAd | true on a paid placement. Roughly a fifth to a quarter of search rows are these. They are real listings, just promoted. |
page, position | Where the row sat in the results, so you can reconstruct the ranking. |
productUrl | Rebuilt from the product ID, so it is clean and has no tracking on it. |
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A product | It has a productId | yes |
| The sample row | _sample: true | no |
| A diagnostic | It has a status and no productId | no |
A diagnostic row tells you what happened to one search term:
status | What it means |
|---|---|
BAD_INPUT | That URL is not an AliExpress search URL, or a sortBy or language value the actor does not know. An unknown value stops the run before anything is searched. |
NO_RESULTS | AliExpress returned nothing for that term. Usually a typo or a term that is too narrow. |
SEARCH_FAILED | That term could not be read, or AliExpress answered it without the sort or language you asked for. Re-run it. |
BLOCKED | AliExpress stopped answering for that page. Whatever had already been delivered is kept. |
▶️ How to run it
1. Open AliExpress Products Scraper and click Try for free. 2. Type your terms into Search terms, one per line. 3. Set Maximum products. Start at 40 to see the shape of the output. 4. Pick a Sort by, Currency, Ship-to country or Language if the defaults do not suit you, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.12 per 1,000 products. Flat on every Apify plan, no volume tiers.
You pay per product row. The sample row is not charged, diagnostic rows are not charged, and the same product appearing again on a later page is dropped before it becomes a row.
💡 What people use it for
- Sizing a niche before sourcing it: pull 1,000 rows for a term and look at where
priceclusters
and how far orders runs.
- Finding what actually sells rather than what ranks, by sorting on
ordersinstead of onposition. - Watching a term weekly and joining on
productIdto see which listings appeared, which moved up
and which quietly changed price.
- Filtering
isAdout to see the organic ranking on its own, or keeping onlyisAdrows to see who
is paying for that term.
- Pulling a competitor's whole category into a sheet in one currency so the totals mean something.
🚧 What it does not do
- Search listings only. No product pages, which means 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.
- The sort is per page, not strict across pages. With
sortByset, 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.
ordersis 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. They are flagged
isAd. - A term can stop early. When AliExpress stops answering for a page, the run ends that term with
a BLOCKED 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.
🧭 Which marketplace scraper do you need?
| If you want | Use |
|---|---|
| AliExpress search results with prices and order counts | This one |
| Wholesale prices, minimum order quantities and suppliers | 1688 Wholesale Scraper |
| Buyer reviews with photos and the SKU that was bought | 1688 Reviews Scraper |
| A Shopee shop's ratings and reviews | Shopee Shop Reviews Scraper |
| Classified listings in Russia and the CIS | Avito Listings Scraper |
❓ Questions people ask
Do I need an AliExpress account or an API key? No. Everything here is public search data.
Why are my 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.
Can I paste a product link? 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.
How deep can one search term go? As deep as maxItems lets it. The limit is your setting, not a page number.
Is scraping AliExpress legal? These are public listings. Check AliExpress's terms and your own local rules before using the output commercially. Apify's write-up on scraping and the law 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.