ASOS Scraper – Products, Prices, Sizes, Stock & Reviews avatar

ASOS Scraper – Products, Prices, Sizes, Stock & Reviews

Pricing

from $1.50 / 1,000 plp product rows

Go to Apify Store
ASOS Scraper – Products, Prices, Sizes, Stock & Reviews

ASOS Scraper – Products, Prices, Sizes, Stock & Reviews

Search ASOS by keyword or browse 39 built-in categories. One row per product: name, brand, colour, price and previous price, localised URL, images and sale flags. Switch on details for every size with its SKU, real in-stock status, rating and description. Needs a residential proxy.

Pricing

from $1.50 / 1,000 plp product rows

Rating

0.0

(0)

Developer

R.L.

R.L.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

Extract product data from ASOS by keyword search or category browse — name, brand, colour, price and previous price, images, sale flags, and (optionally) every size in the run with its SKU and real in-stock status, plus ratings and the full description. It calls ASOS's own mobile app API rather than rendering pages, so it returns clean structured JSON instead of parsed HTML. Get results via the Apify API, schedule runs, or plug straight into Make/Zapier/Google Sheets.

What can I use it for?

  • Price monitoring — track markdowns, previous-price drops, and outlet pricing across competitor or your own catalogue.
  • Market research — pull assortment, brand mix, and pricing by category and region.
  • Stock tracking — check size-level availability (SKU, low-stock, restocking) before a drop sells out.
  • Feed building — power a price-comparison site, deal alert bot, or affiliate feed with live ASOS data.

How do I run it?

  1. Click Try for free and open the Input tab.
  2. Enter a search keyword (e.g. dress, Nike sneakers) or pick a category from the dropdown — a category overrides the keyword.
  3. Pick your store/locale (store, currency, lang, sizeSchema) to match the ASOS region you care about. See which locales work — they have to be a combination ASOS accepts.
  4. Set Max items (0 = everything matching) and optionally turn on Include product details for per-size SKU and stock, ratings, gender and description (slower and charged again per product — one extra request each).
  5. Click Start and grab results from the Dataset tab, or via API in JSON, CSV, Excel, etc.

No coding needed, but everything here is also driveable via the Apify API for scheduled or automated runs.

What input does it take?

FieldDescription
qSearch keyword. Leave empty to browse by category instead. One of q or category is required.
categoryCategory ID to browse (dropdown, 39 categories). Overrides q.
store / currency / lang / sizeSchemaLocale settings. Default US/USD/en-US/US.
maxItemsMax products to return. 0 = all matches. Default 100.
limitResults per page from ASOS (max 72, the default).
includeDetailsFetch each product's detail page for per-size SKU and stock, ratings, gender, fit and description. Off by default — one extra request per product.
detailConcurrencyParallel detail requests when includeDetails is on (1–20, default 8).
proxyConfigurationProxy to use. Residential proxy is required — ASOS blocks datacenter IPs via Akamai — and is preselected for you.

Which categories can I browse?

Pick one from the dropdown, or pass the ID directly:

CategoryIDCategoryID
Men's Accessories4210Women's Bags8730
Men's Activewear26090Women's Boots6455
Men's Bags9265Women's Coats & Jackets2641
Men's Boots5774Women's Dresses8799
Men's Face + Body19517Women's Face + Body1314
Men's Hoodies & Sweatshirts5668Women's Jeans3630
Men's Jackets & Coats3606Women's Jewellery4175
Men's Jeans4208Women's Jumpers & Cardigans2637
Men's Jewellery5034Women's Lingerie6046
Men's Shirts3602Women's Sandals6458
Men's Shoes4209Women's Shirts15200
Men's Shorts7078Women's Shoes4172
Men's Suits5678Women's Shorts9263
Men's Sunglasses6519Women's Suits13632
Men's Swimwear13210Women's Sunglasses4545
Men's T-Shirts & Vests7616Women's Swimwear2238
Men's Trainers5775Women's Tops4169
Men's Trousers4910Women's Trainers6456
Women's Accessories4174Women's Trousers2640
Women's Activewear26091

Which stores and locales work?

ASOS does not check these four fields separately: it resolves one store from store + currency + lang together and answers HTTP 400 "No valid store was found" when that triple is not one it serves. So each store code goes with exactly one language and a short list of currencies — changing currency on its own is always rejected. Note that the UK store code is COM, not GB. The full set, verified against the live API:

Regionstorecurrencylang
United States (default)USUSDen-US
United KingdomCOMGBPen-GB
AustraliaAUAUDen-AU
GermanyDEEURde-DE
FranceFREUR or USDfr-FR
ItalyITEURit-IT
SpainESEURes-ES
NetherlandsNLEURnl-NL
SwedenSESEKsv-SE
DenmarkDKDKKda-DK
PolandPLPLNpl-PL
RussiaRURUB or USDru-RU
Rest of worldROWUSD, GBP, EUR, AUD, CAD, CHF, CNY, HKD, NZD, SGD or AEDen-GB

Case does not matter (com/gbp/en-gb work as well). A combination ASOS does not serve no longer fails the run: the Actor checks it before the first request and finishes with a status message naming the offending value and the right one, e.g. "store 'GB' is not a valid ASOS store code — the United Kingdom store is 'COM'".

lang changes the language of name and description (the German store really does return German titles), currency changes priceText and currency, and the url is built for the store you asked for so it does not 404 on a country-exclusive line.

sizeSchema decides whether brandSize reads US 4, UK 8 or DE 36, and is the one field ASOS validates per store, inconsistently: US and UK are accepted everywhere, EU is accepted by COM, US and IT but rejected by DE and FR, and a store's own schema (DE on the German store, AU on the Australian one) is accepted where it applies. It is therefore left to ASOS rather than pre-checked — if ASOS rejects it, the run reports that and finishes rather than failing. Leave it at US or UK if you do not need a local size.

What does each row contain?

Each dataset row is one product. Example from a real run (includeDetails: true, trimmed):

{
"id": 211123790,
"name": "ASOS DESIGN gold-tone hardware structured mini dress with one shoulder in black scuba-style fabric",
"brandName": "ASOS DESIGN",
"currentPrice": 84.99,
"priceText": "$84.99",
"previousPrice": null,
"currency": "USD",
"isMarkedDown": false,
"colour": "Black",
"colourWayId": 211123795,
"productCode": 158017324,
"url": "https://www.asos.com/us/asos-design/asos-design-gold-tone-hardware-structured-mini-dress-with-one-shoulder-in-black-scuba-style-fabric/prd/211123790#colourWayId-211123795",
"gender": "Women",
"averageRating": 4.1,
"totalReviewCount": 13,
"inStockSizes": ["US 0", "US 2", "US 4", "US 6", "US 8", "US 12"],
"sizes": [
{ "brandSize": "US 0", "sku": "158017325", "ean": null, "colour": "Black", "countryOfManufacture": "RO", "isInStock": true, "isLowInStock": false, "isRestockingSoon": false }
],
"careInfo": "Machine wash according to instructions on care labels"
}

You can download the dataset in JSON, CSV, Excel, XML, or HTML from the Console or API.

Fields from search and category browse

FieldDescription
id / productCodeASOS product id (the number in the product URL) and the product code
name / brandNameProduct title and brand, in the language of lang
currentPrice / previousPrice / priceText / previousPriceText / currencyPrice now and before, as numbers and as the formatted strings ASOS shows
isMarkedDown / isOutletPrice / isPromotion / hasMultiplePricesPricing flags
colour / colourWayId / hasVariantColoursThis colourway, its id, and whether other colours of the same product exist
url / imagesLocalised product page URL (with the colourway anchor) and the image URLs for this colourway
isSellingFast / isRestockingSoon / isNewASOS's own badges for this product
productTypeASOS's record type. In practice it is the constant Product — it is not a category label, so do not group by it

Fields that need includeDetails: true

Without it, these keys are present but null, so the row shape stays stable:

FieldDescription
sizesEvery size in the run: brandSize, sku, ean, colour, countryOfManufacture, isInStock, isLowInStock, isRestockingSoon
inStockSizesJust the size names you can actually buy right now
averageRating / totalReviewCountReview score and count
description / aboutMe / sizeAndFit / careInfoThe product copy, converted from ASOS's HTML to plain text
gender / fitType / isDiscontinuedWho it is listed for, the fit name, and whether ASOS has discontinued it

Why is "in stock" more reliable here?

ASOS's catalogue lists every size of a product with isAvailable: true, even sizes that are sold out — the flag means "this is a valid size", not "you can buy it". A scraper that trusts it reports everything as available. This Actor makes a second call to ASOS's stock/price endpoint and merges the real per-variant state, so isInStock, isLowInStock and isRestockingSoon reflect what is actually purchasable, and inStockSizes is that subset. If the stock call fails for one product, that product falls back to the catalogue flag rather than dropping out.

Which brands are on ASOS?

The Actor does not filter by brand — you get whatever ASOS returns for your keyword or category, ASOS's own labels and third-party ones alike. Brands seen in sample runs include Nike, adidas Originals, New Balance, Fred Perry, Tommy Hilfiger, Tommy Jeans, Jack & Jones, ONLY & SONS, Mango, Topshop, Miss Selfridge, Princess Polly, Reclaimed Vintage, Noak, ASOS DESIGN and ASOS Curve. To pull a single brand, search its name as the keyword (q) and filter the rows on brandName.

How much does a run cost?

Billing is pay-per-event, and there are two events (see the Pricing tab):

  • one per product row pushed, and
  • one more per product when includeDetails is on — charged only if the detail data actually came back, so a failed detail fetch is not billed.

So an enriched run costs about twice a plain one for the same number of products, and maxItems is the cap that bounds both. Platform usage is small: this calls an API rather than rendering pages, and the Actor runs in 128–512 MB of RAM. The residential proxy traffic is billed per Apify's proxy pricing.

Tips

  • Leave maxItems at a reasonable value while testing — set 0 only once you know how big the category or keyword is.
  • Skip includeDetails unless you need per-size stock, ratings or descriptions. It doubles both the requests and the charge.
  • Raise detailConcurrency for faster detail fetches, but watch for proxy or rate-limit errors if you push it too high.
  • Rows are deduplicated by product id across pages, because ASOS search rankings shift between page requests — so a run of 100 can end up asking for more than two pages.

FAQ

Do I need an ASOS account or API key? No. There is no login, token or API key — the Actor calls the endpoints ASOS's own app calls, unauthenticated. You do need a proxy (below).

Why do I need a residential proxy? ASOS's API is behind Akamai bot protection, which blocks datacenter IP ranges. Residential Apify Proxy is preselected in the input; a datacenter proxy or no proxy will fail rather than return partial data.

Can I scrape a specific product URL? Not directly — the input takes a keyword or a category, not a URL or a product id. Search the product name and match on id, which is the number at the end of every ASOS product URL (/prd/211123790).

Does it return reviews? It returns the score and the count (averageRating, totalReviewCount) with includeDetails on, not the individual review texts.

How do I get prices in GBP or EUR? Set the whole locale group, not just the currency: store: "COM" with currency: "GBP" and lang: "en-GB" for the UK, store: "DE" with currency: "EUR" and lang: "de-DE" for Germany. Changing currency alone leaves it inconsistent with the store and ASOS rejects it. The ROW store is the exception: it takes eleven currencies with lang: "en-GB".

What happens if the run fails? Input the Actor cannot work with — neither q nor category, or a locale combination ASOS does not serve — is not treated as a failure: the run stops, finishes successfully and the status message says which value was wrong and what to use instead. Nothing is charged, because nothing was delivered. A genuine problem still fails loudly: if ASOS blocks the requests the page fetch raises and the run ends non-zero rather than quietly pushing an empty dataset, and with includeDetails on the first product's detail is fetched up front for the same reason, so a systematic block fails the run instead of shipping unenriched rows.

The API changed and results stopped coming back. ASOS's mobile API is not public and can change without notice. Open an issue on the Actor's Issues tab and it will be looked at.

Disclaimer: The Actor only fetches publicly accessible product data from ASOS's own API. You are responsible for complying with ASOS's Terms of Service and the law in your jurisdiction, especially around commercial reuse of the data.

Did you find this useful?

Rate this actor on Apify! Your feedback helps other users find it and helps us keep improving it.