AliExpress Scraper
Pricing
Pay per event
AliExpress Scraper
Pricing
Pay per event
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Search AliExpress and get 60 products per page back as rows: price in your own currency, the previous price, the star rating, and how many units have sold.
No login, no cookie, no API key. It reads the ordinary search page from an exit in the country you pick, so prices and currency are the ones a shopper there sees.
What you get
- 60 products per page, not 17. The rendered grid links 17 products. The page's own embedded payload carries 60, and that is what this actor reads. A scraper built on the HTML throws away nearly three quarters of every page it fetches
- Units sold, on the markets that show it.
sold_textis AliExpress's own wording ("700+ sold") andsold_at_leastis that as a number. It is the closest thing to a demand signal any marketplace publishes, and it is in the payload but not in the grid. AliExpress only serves it to some countries: measured present on the US and UK exits and absent on the Dutch, German and Brazilian ones - Price in the right currency, verified. Pick a country and results come back for that market; the currency comes out of the payload rather than being assumed. US returns USD, Netherlands and Germany return EUR, Brazil returns BRL
- Star rating on roughly seven products in ten
- Both prices and the claimed discount, with the previous price dropped when it is not actually above the current one
- Where it ships from.
ships_fromis decoded from the card's own tracking blob andships_locallyflags anything not coming from China. On a Dutch run that separated 17 items in French, German, Spanish, Polish and Italian warehouses from 43 shipping out of China. This is the single field that decides whether an order takes days or weeks, and it is nowhere in the rendered grid - Every image, not just the thumbnail.
imagesaverages six per product - Scarcity and promo badges as text, for example "Early bird deal, only 1 left"
- Paid placements flagged.
is_promotedmarks AliExpress's ownadproduct type, which runs to about a quarter of a results page - Product id, SKU id and image on every row
Why the payload matters more than usual here
Most marketplace scrapers can get away with reading the rendered page, because the rendered page is what the shopper sees. AliExpress is different: it renders a fraction of its results as links and keeps the rest in a JavaScript config object that the front end paints later.
The number that matters is 17 against 60. A DOM parser returns 17 rows, they are all valid, and nothing anywhere reports that 43 products were dropped. The run looks fine. You only find out when your competitor's dataset is three and a half times the size of yours.
Reading that object is not a regex job either. It is close to 400 KB of nested JSON, and product titles routinely contain braces, brackets and escaped quotes, so counting delimiters without tracking string state closes the object halfway through somebody's product name. This actor uses a string-aware matcher.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
query | string | one of the two | laptop | What to search for |
country | select | no | us | Sets the market, and therefore price and currency |
url | string | one of the two | – | An AliExpress search or category URL. Takes precedence |
deals_only | boolean | no | false | Keep only products with a real previous price |
limit | integer | no | 60 | Products to return, 1 to 1000. A page carries 60 |
retries | integer | no | 3 | Retry attempts per page |
Output
{"position": 1,"product_id": "3256809981706062","url": "https://www.aliexpress.com/item/3256809981706062.html","title": "14.1\" Ultra Slim Windows 11 Pro Laptop Computer Intel 12GB RAM 1TB SSD","price": 184.54,"price_text": "US $184.54","was_price": 456.79,"was_price_text": "US $456.79","discount_percent": 59.0,"currency": "USD","rating": 4.9,"sold_text": "700+ sold","sold_at_least": 700,"ships_from": "ES","ships_locally": true,"selling_points": ["Early bird deal, only 1 left"],"image_count": 8,"image": "https://ae-pic-a1.aliexpress-media.com/kf/...","sku_id": "12000055944120646","product_type": "natural","is_promoted": false,"country": "us","query": "laptop"}
Use cases
Finding what actually sells. Sort a category by sold_at_least and you have the products with proven demand rather than the ones AliExpress chose to rank. For anyone sourcing stock, that column is the whole point of the dataset.
Sourcing price research. Run your product category and take the distribution of price. Because results are per country you can run the same term for US, EU and Brazil and see three real landed-price pictures rather than one converted number.
Competitor product discovery. product_id is stable, so a scheduled run diffed on id shows what appeared in a category and what disappeared.
Sourcing from EU or US warehouses only. Filter on ships_locally and you have the subset that arrives in days instead of weeks. On a Dutch run that was 17 products out of 60, spread across five European countries. Buyers care about this more than about a few euros of price difference, and no other AliExpress actor returns it.
Rating-weighted shortlists. Combine rating with sold_at_least to filter out the listings with a high score and eleven sales, which dominate a naive sort by rating.
Feeding a reverse lookup. title plus image is enough to match an AliExpress listing back to the same product on Amazon or a European marketplace.
How it compares
| this actor | devcake/aliexpress-products-scraper | khadinakbar/aliexpress-all-in-one-scraper | |
|---|---|---|---|
| Per 1.000 products | $2,00 | no per-item rate | $2,00 |
| Actor-start fee | $0,001 | $0,00005 | $0,00005 |
| Products per page | 60 | not stated | not stated |
| Units sold | yes | not stated | not stated |
| Currency follows country | yes, verified | not stated | not stated |
| Monthly users | new | 301 | 92 |
Honest about the other side: devcake has 301 monthly users to this actor's none and charges nothing per row, so on a large run it is cheaper. The category has 98 actors and 1.255 monthly users between them, so no one owns it.
Pricing
Two events. run_start costs $0,0010 per run. product costs $0,0020 per product written to the dataset, which is $2,00 per 1.000. Pages whose payload is missing never reach the dataset and are never billed.
Limits and gotchas
- Almost everything on AliExpress is "discounted". 147 of 150 products in a test run carried a previous price. That is a pricing convention on the platform, not a sale. Treat
discount_percentas a marketing figure andpriceas the real number, and do not build alerts on the discount alone. - Units sold is a US and UK field. Measured across five exits: present on all 60 rows for
usandgb, and on none at all fornl,deandbr. If you need that column, run the US market. The summary flags a run where it is entirely absent so a zero is never mistaken for a parse failure. sold_at_leastis a floor, not a count. AliExpress rounds and appends a plus, so "700+ sold" becomes 700. It is returned as the number it actually represents rather than dressed up as exact.- Some real products ship with no price. Roughly one row in ten comes back with
priceabsent because AliExpress's payload carriesprices: nullfor it. Those are genuine products, not banners, so they are kept with title, id, image and rating rather than dropped or given a guessed price.withPriceandwithoutPricein the summary give the split. - About a quarter of a results page is advertising.
is_promotedmarks them; they are not removed. - Rating is missing on about three products in ten, which are usually new listings with no reviews yet. They come back null, not zero.
- Promoted listings are mixed into the results.
product_typeis the closest signal AliExpress gives; they are not separated out. - A missing payload is reported, not swallowed. If the embedded object is absent the run says
no_payloadrather than returning zero products, because an empty result and a soft block look identical otherwise. - The same query in two countries returns different products, not just different prices. AliExpress varies its catalogue by destination.
FAQ
Why do I get more products than other AliExpress actors? Because this one reads the page's embedded payload, which holds 60 products, instead of the rendered grid, which links 17.
Are the discounts real? Mostly not. Nearly every AliExpress listing shows a previous price. The current price is the meaningful figure.
Can I get prices in euros?
Yes, set country to a euro market and the currency comes back as EUR.
Why is units-sold empty for my country?
Because AliExpress only publishes it to some markets. It is there on the US and UK exits and absent on the Dutch, German and Brazilian ones. Run country: us if you need it.
Is sold_at_least an exact sales count?
No. It is AliExpress's rounded public figure with the plus removed, so it is a lower bound.
Does it scrape product detail pages or reviews? No. It reads search and category pages only. Everything returned is on that one page.
Why there is no product-detail mode
Deliberate: AliExpress product pages are not readable over a plain request, so this Actor returns listing data only.
So a detail mode here would need a real browser per product, which is a different cost structure and a separate decision. The listing payload already carries price, previous price, discount, rating, units sold, ship-from country, SKU id and up to eight images, which is most of what a detail page would have added.
Related Actors
- eMAG Scraper — Romania, Bulgaria and Hungary
- Newegg Scraper — US retail with real listing-page discounts
- Beslist.nl Scraper — Dutch price comparison with EAN barcodes