Track AliExpress Price Changes for Arbitrage Research (2026)
Create a scheduled AliExpress price monitor that emits only new and repriced products, then combine it with verified landed costs and target-market prices.

A useful price monitor should not charge you to download the same unchanged catalog every day. The AliExpress Scraper has a stateful mode that returns only products that are new, repriced, or newly expose a price.
▶ Run the ready-made workflow: Monitor AliExpress bestseller price changes.
Create the baseline
{
"queries": ["wireless earbuds", "portable blender"],
"sortBy": "orders",
"country": "US",
"maxResults": 100,
"monitorMode": "price-changes",
"monitorStoreName": "aliexpress-arbitrage-bestsellers-us"
}The first run creates the watch state and returns newly seen products. Add an Apify Schedule with the same input. Later runs compare the current search results with that state. Keep maxResults at 60 or more per query: smaller AliExpress search slices rotate across sessions and can create noisy false-new alerts.
Monitoring rows use the regular product fields plus:
{
"product_id": "1005006789123456",
"title": "Wireless Bluetooth Earbuds",
"sale_price": 11.49,
"sale_price_currency": "USD",
"change_type": "price_changed",
"previous_sale_price": 12.99,
"price_delta": -1.5,
"price_delta_percentage": -11.55,
"url": "https://www.aliexpress.com/item/1005006789123456.html"
}change_type can be new, price_changed, or price_available. After the baseline, a candidate must recur in two consecutive snapshots before it becomes an alert. This matters because AliExpress can rotate products and promotional prices between anonymous sessions. A successful run publishes confirmed changes before advancing state. If AliExpress returns an incomplete or unexpectedly empty monitoring response, the Actor fails and preserves the previous state.
Turn changes into alerts
Filter the dataset in an automation or webhook receiver:
def actionable(row):
return (
row.get("change_type") == "new"
or float(row.get("price_delta_percentage") or 0) <= -10
)
alerts = [row for row in rows if actionable(row)]Use a separate monitorStoreName for each watch. Changing country, query, sort order, or result depth changes the comparison cohort; create a new store instead of mixing incompatible baselines.
Calculate margin with verified inputs
The source price is only one term:
landed_cost = source_price + shipping + duty + handling
net_revenue = target_price - marketplace_fees - fulfillment - expected_returns
contribution_margin = net_revenue - landed_cost - advertisingThe Actor supplies sale_price; it does not supply shipping, wholesale tiers, marketplace fees, or product matching. Verify those independently. When comparing with Amazon Scraper, match exact variants and bundles rather than assuming similar titles are identical SKUs.
Why low-noise monitoring matters
Ordinary mode is best for a fresh market snapshot. Monitoring mode is best for recurring workflows because unchanged products produce no dataset rows. That reduces downstream processing and focuses users on events they can act on, while retaining a stable product history in the Actor's key-value store.
Frequently asked questions
Can the Actor detect AliExpress price drops automatically?
Yes. Price-change monitoring stores a baseline and later emits only new products, changed prices, or prices that became available. Rows include previous price and absolute and percentage deltas.
Does the output include landed cost or shipping?
No. The Actor returns the advertised search-card price. Add independently verified shipping, duties, fees, returns, and fulfillment costs before calculating arbitrage margin.
How often should I schedule a watch?
Daily is useful for active shortlists; weekly is usually enough for exploratory niches. Keep the same country, queries, sort, limit, and monitor store between runs.
Related
100 free credits, no credit card.
About 30 real searches. Add the MCP to Claude or Cursor in two minutes.