ASOS Sale Watch: Products & Markdowns by Country avatar

ASOS Sale Watch: Products & Markdowns by Country

Pricing

from $0.70 / 1,000 product scrapeds

Go to Apify Store
ASOS Sale Watch: Products & Markdowns by Country

ASOS Sale Watch: Products & Markdowns by Country

ASOS products from 11 country stores as flat rows: name, brand, price, price before the markdown, discount percent, lowest price in the last 30 days, colour, photos, URL. Search any terms; filter to sale items, a minimum discount, newest or price order.

Pricing

from $0.70 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Read ASOS search results as flat rows: product name, brand, current price, the price before the markdown, the discount percent, the lowest price of the last 30 days, colour, photos and the product link. Eleven country stores, each in its own currency. Tick Only products on sale or pick a minimum discount and ASOS itself returns only marked-down products. Schedule it daily and diff the runs: that is an ASOS sale watch.

No account, no API key, no login, no browser. One request returns up to 200 products.

Input

FieldNotes
storeus (USD), com United Kingdom (GBP), au (AUD), de, fr, es, it, nl (EUR), se (SEK), dk (DKK), pl (PLN). Default us.
queriesSearch terms, one per line (jeans, white trainers). Required. A product found by two terms is returned once, under the first.
onlyOnSaleKeep only products ASOS currently marks down (its own range=sale filter).
minDiscount20 to 60: keep only products marked down by at least that percent, using ASOS's own Discount % bands. Anything but 0 (no minimum) implies onlyOnSale.
sortrelevance (ASOS's default ranking), newest, price_low, price_high.
maxItemsProducts to read per search term (default 100, up to 1,000).
proxyConfigurationApify proxy by default.

A search needs at least one term: ASOS answers a search without one with an error, so there is no "list everything" mode and the actor refuses such a run before it charges anything.

Output

FieldNotes
query, storeThe term that first found the product, and the store (us, com, ...).
product_id, colourway_id, product_codeASOS's product id (the number in /prd/210492282), the id of the colour the search listed, and its internal product code. The product id is the row's identity.
name, brand, colourAs ASOS prints them, in the store's language.
urlAbsolute product page on the store, https://www.asos.com/<store>/<brand>/<slug>/prd/<id> (the UK store has no store segment).
product_typeProduct, MixMatchProduct (a co-ord piece) or MixMatchGroup, as sent.
currency, price, price_textThe current price as a number, with its currency, and exactly as the storefront prints it ($34.99, 25,99 €).
previous_priceThe price before the markdown. Null on every product that is not marked down.
on_saleASOS's own isMarkedDown flag.
discount_percent(previous_price - price) / previous_price, one decimal, only when both exist and the price is below the previous one.
lowest_price_30dThe lowest price of the last 30 days as ASOS reports it. Null when ASOS reports none (see below).
is_outlet_price, has_multiple_pricesASOS's isOutletPrice and hasMultiplePrices flags.
image_url, additional_image_urls, video_urlPhotos and the product video, with https:// added (ASOS sends them without a scheme).
is_new, is_selling_fastASOS's "New" and "Selling fast" badges.

Honest nulls

A field ASOS did not send is null, never 0 or "":

  • previous_price and discount_percent are null for a product that is not marked down. Measured 2026-10-12 over 6,383 product records (many of them the same page fetched twice) from the US, UK, AU, IT, NL, SE, DK, PL, DE, FR and ES stores: ASOS sent a previous price on every marked-down product and on no other, so a null means "no markdown", not "free".
  • lowest_price_30d is null on every product that is not marked down and on a few marked-down ones (the Netherlands store sent none for some). It can sit above the current price: a UK jeans listing at 19.99 GBP, down from 35.99, reported a 30-day low of 23.99.
  • currency: ASOS puts the currency code on the price block of most responses, but on some it is null (measured: the Italy store at 72 rows a page, with prices printed without a symbol). The row then carries the currency of the store the request asked for, which is the one ASOS prices that store in.
  • colour, brand, video_url, price: null when ASOS sends no value.

Pricing

Pay per event:

  • $0.002 per run (actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing.
  • $0.0007 per product row written (product-scraped), i.e. $0.70 per 1,000 products.

How it fetches

It calls the JSON search API behind ASOS's own storefront (www.asos.com/api/product/search/v2/), up to 200 rows per request, with no cookie, token or login, presenting a Chrome TLS fingerprint through the Apify datacenter proxy. Measured 2026-10-12 from Apify datacenter addresses with that fingerprint: HTTP 200 JSON on all eleven stores listed above. ASOS's edge (Akamai) answers roughly two requests in five with an Access Denied page (HTTP 403) whatever the request is. The actor treats that as a refusal, rotates to a fresh address and retries each page up to eight times; a page that is still refused is reported in the run log and skipped. Expect run logs to show retries.

Things worth knowing, all measured:

  • Only the first 1,000 results of any search can be read. itemCount for jeans on the US store was 5,919 and the page at offset 1,000 is empty; a page that straddles the line is cut short (200 rows asked at offset 950 gave 50). The run log says when a search found more than it can serve. To reach beyond it, narrow the search: another term, onlyOnSale, a minDiscount.
  • The sale filter is ASOS's. onlyOnSale sends range=sale; for jeans on the US store that was 1,298 of 5,920 products, the count of the response's own Sale facet. minDiscount sends ASOS's Discount % bands (20-30%, 30-40% ... 60% or more) as a list; the counts add up to the facet counts (bands 3 to 6 gave 622 against 187+184+164+83 on the same search).
  • Counts move. itemCount for the same search drifted by a handful between requests minutes apart (5,914 to 5,919), and the sale rack changes through the day, so a walk can show a product twice across a page boundary; it is returned once.
  • Some searches report exactly 100 hits. Rare terms (lime green jeans) came back as itemCount 100 with real rows to the end; the actor stops at the count ASOS reports.
  • The stores are fixed combinations. ASOS refuses a wrong store/language/currency pairing with a 400, so the input offers the pairings that answered. Measured and not offered: Canada, Switzerland, Ireland, Norway, Rest of World, Singapore, Malaysia, Hong Kong (HTTP 400, "No valid store was found"), Russia (answered one product), and the Rest-of-Europe store, which answered but whose product pages redirect to the UK site root.
  • Product links resolve. A real id answers 200 on the store's page and an unknown one 404 (measured on the US store); every store's pages were checked with a product of that store.
  • Sort. newest sends freshness; price_low and price_high send priceasc / pricedesc. The single products come back in price order; a MixMatchGroup (a set priced as a whole) is placed out of order (a $377.00 group followed five single products running $295.20 down to $237.91). ASOS's own recommended / relevance names are rejected by the API (HTTP 400), so the default ranking is "no sort parameter".