AliExpress Scraper avatar

AliExpress Scraper

Pricing

Pay per event

Go to Apify Store
AliExpress Scraper

AliExpress Scraper

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor 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_text is AliExpress's own wording ("700+ sold") and sold_at_least is 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_from is decoded from the card's own tracking blob and ships_locally flags 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. images averages six per product
  • Scarcity and promo badges as text, for example "Early bird deal, only 1 left"
  • Paid placements flagged. is_promoted marks AliExpress's own ad product 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

FieldTypeRequiredDefaultWhat it does
querystringone of the twolaptopWhat to search for
countryselectnousSets the market, and therefore price and currency
urlstringone of the twoAn AliExpress search or category URL. Takes precedence
deals_onlybooleannofalseKeep only products with a real previous price
limitintegerno60Products to return, 1 to 1000. A page carries 60
retriesintegerno3Retry 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 actordevcake/aliexpress-products-scraperkhadinakbar/aliexpress-all-in-one-scraper
Per 1.000 products$2,00no per-item rate$2,00
Actor-start fee$0,001$0,00005$0,00005
Products per page60not statednot stated
Units soldyesnot statednot stated
Currency follows countryyes, verifiednot statednot stated
Monthly usersnew30192

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_percent as a marketing figure and price as 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 us and gb, and on none at all for nl, de and br. 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_least is 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 price absent because AliExpress's payload carries prices: null for 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. withPrice and withoutPrice in the summary give the split.
  • About a quarter of a results page is advertising. is_promoted marks 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_type is 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_payload rather 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.