# ASOS (`datasaurus/asos`) Actor

Scrape products from ASOS websites. Includes reviews and Q\&As. Fast and Efficient.

- **URL**: https://apify.com/datasaurus/asos.md
- **Developed by:** [datasaurus](https://apify.com/datasaurus) (community)
- **Categories:** E-commerce
- **Stats:** 7 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 product-pages

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## ASOS Scraper

Scrapes product data from [asos.com](https://www.asos.com/) and [topshop.com](https://www.topshop.com/) including product details, pricing, variants, stock status, and reviews.

### Features

- **All ASOS regional sites** — UK, US, Australia, France, Germany, Italy, Spain, Netherlands, Sweden, Denmark, Poland — with correct currency and language auto-detected from the URL
- **Topshop** — scrapes Topshop brand products via the ASOS API from `www.topshop.com` URLs
- **Search API** — scrape product listings by category or text search
- **Product page parsing** — full product details from embedded page data (no browser needed)
- **Stock/price API** — real-time pricing and variant-level stock status
- **Reviews & ratings** — embedded BazaarVoice review data from product pages
- **Group products** — handles both standard and group/multi-colour product pages

### Supported URL Types

#### ASOS — All Regions

| Region | URL Example |
|--------|-------------|
| 🇬🇧 UK | `https://www.asos.com/men/shoes/cat/?cid=4209` |
| 🇺🇸 US | `https://www.asos.com/us/men/shoes/cat/?cid=4209` |
| 🇫🇷 France | `https://www.asos.com/fr/hommes/chaussures/cat/?cid=4209` |
| 🇩🇪 Germany | `https://www.asos.com/de/herren/schuhe/cat/?cid=4209` |
| 🇦🇺 Australia | `https://www.asos.com/au/men/shoes/cat/?cid=4209` |
| 🇮🇹 Italy | `https://www.asos.com/it/uomo/scarpe/cat/?cid=4209` |
| 🇪🇸 Spain | `https://www.asos.com/es/hombre/zapatos/cat/?cid=4209` |
| 🇳🇱 Netherlands | `https://www.asos.com/nl/heren/schoenen/cat/?cid=4209` |
| 🇸🇪 Sweden | `https://www.asos.com/se/herr/skor/cat/?cid=4209` |
| 🇩🇰 Denmark | `https://www.asos.com/dk/herrer/sko/cat/?cid=4209` |
| 🇵🇱 Poland | `https://www.asos.com/pl/mezczyzni/buty/cat/?cid=4209` |

#### Topshop

| URL Type | Example |
|----------|---------|
| Main | `https://www.topshop.com/gb` |
| Search | `https://www.topshop.com/gb/search?q=dresses` |
| Category | `https://www.topshop.com/gb/topshop/category/...?cid=52990` |

#### Other ASOS URL types (all regions)

| URL Type | Example |
|----------|---------|
| Product page | `https://www.asos.com/nike/nike-air-force-1/prd/202389207` |
| Regional product | `https://www.asos.com/fr/nike/nike-air-force-1/prd/202389207` |
| Group product | `https://www.asos.com/brand/product-name/grp/12345` |
| Text search | `https://www.asos.com/search/?q=trainers` |
| Category landing | `https://www.asos.com/men/` |

### Region Auto-Detection

The store, currency, language and country are **automatically detected from the URL prefix**. No manual configuration needed:

| URL prefix | Store | Currency |
|------------|-------|----------|
| (none / UK) | `COM` | `GBP` |
| `/us/` | `US` | `USD` |
| `/au/` | `AU` | `AUD` |
| `/fr/` | `FR` | `EUR` |
| `/de/` | `DE` | `EUR` |
| `/it/` | `IT` | `EUR` |
| `/es/` | `ES` | `EUR` |
| `/nl/` | `NL` | `EUR` |
| `/se/` | `SE` | `SEK` |
| `/dk/` | `DK` | `DKK` |
| `/pl/` | `PL` | `PLN` |

You can mix URLs from different regions in a single run — each URL uses its own region settings automatically.

### Example Input

```json
{
  "start_urls": [
    {"url": "https://www.asos.com/men/shoes/cat/?cid=4209"},
    {"url": "https://www.asos.com/fr/femmes/robes/cat/?cid=8799"},
    {"url": "https://www.topshop.com/gb/search?q=dresses"}
  ],
  "scrape_product_page": true,
  "scrape_reviews": true,
  "max_products": 2,
  "max_reviews": 10
}
```

### Example Output

```json
{
  "name": "adidas Originals Handball Spezial gum sole trainers in brown and white",
  "brand": "adidas Originals",
  "productCode": "133694500",
  "productId": 205774480,
  "colour": "MULTI",
  "gender": "Unisex",
  "price": 90,
  "priceText": "£90.00",
  "rrp": 90,
  "rrpText": "£90.00",
  "currency": "GBP",
  "imageUrl": "https://images.asos-media.com/products/adidas-originals-handball-spezial-gum-sole-trainers-in-brown-and-white/205774480-1-multi",
  "description": "Shoes by adidas Originals\n\n• Off-duty days call for trainers\n• Low-profile design\n• Lace-up fastening\n• Padded cuff\n• Signature adidas branding\n• Gum sole\n• Supplier reference: IF6490",
  "brandDescription": "adidas Originals needs no introduction. The brand’s famous 3-Stripes can be seen on the track, field and in the latest streetwear trends. Scroll the adidas Originals at ASOS edit to get your fix, from fresh trainers from the iconic Superstar, Stan Smith, Gazelle and Continental 80 collections to archive-inspired adidas Originals tracksuits, T-shirts and sweatshirts. And if you’re in need of some fresh kit, then cop yourself some sweat-wicking shorts, vests and compression tights from adidas Performance.",
  "aboutMe": "Soft suede upper\n\nSole: 100% Rubber, Upper: 50% Leather, 50% Textile.",
  "careInfo": "Wipe clean with a soft dry cloth",
  "productType": "Trainers",
  "breadcrumb": [
    "Home",
    "Women",
    "Shoes",
    "adidas Originals Handball Spezial gum sole trainers in brown and white  "
  ],
  "variants": [
    {
      "size": "UK 6",
      "variantId": 205774483,
      "sku": "133694643",
      "colour": "MULTI",
      "isInStock": true,
      "isLowInStock": false,
      "ean": "4066765220004"
    },
    {
      "size": "UK 6.5",
      "variantId": 205774486,
      "sku": "133694644",
      "colour": "MULTI",
      "isInStock": true,
      "isLowInStock": false,
      "ean": "4066765219978"
    }
  ],
  "isInStock": true,
  "isMarkedDown": false,
  "reviewRating": 4.8,
  "reviewCount": 3417,
  "percentageRecommended": 97,
  "ratingDistribution": [
    {
      "ratingsValue": 5,
      "count": 3080
    },
    {
      "ratingsValue": 4,
      "count": 223
    },
    {
      "ratingsValue": 1,
      "count": 61
    },
    {
      "ratingsValue": 3,
      "count": 36
    },
    {
      "ratingsValue": 2,
      "count": 17
    }
  ],
  "reviews": [
    {
      "id": "181115362",
      "rating": 5,
      "submissionRecency": "New Today",
      "reviewText": "Trainers are stylish and comfortable. Look great with jeans",
      "title": "Up there with the best trainers",
      "isSyndicated": false,
      "syndicationSource": {
        "name": "adidas.com",
        "logoImageUrl": "https://photos-eu.bazaarvoice.com/photo/2/cGhvdG86YXR0cmlidXRpb25sb2dvMg/0e352a11-2bfd-4132-af54-7ca6edfbc5ba",
        "contentLink": "http://www.adidas.co.uk/product/KK0932.html"
      },
      "badges": {
        "verifiedPurchaser": {
          "id": "verifiedPurchaser",
          "contentType": "REVIEW"
        },
        "incentivizedReview": {
          "id": "incentivizedReview",
          "contentType": "REVIEW"
        }
      },
      "badgesOrder": [
        "verifiedPurchaser",
        "incentivizedReview"
      ],
      "contextDataValues": {},
      "contextDataValuesOrder": [],
      "additionalFields": {},
      "additionalFieldsOrder": [],
      "photos": [],
      "videos": []
    }
  ],
  "link": "https://www.asos.com/adidas-originals/adidas-originals-handball-spezial-gum-sole-trainers-in-brown-and-white/prd/205774480"
}
```

### Output Fields

| Field | Description |
|-------|-------------|
| `name` | Product name |
| `brand` | Brand name |
| `productCode` | ASOS product code |
| `productId` | ASOS product ID |
| `colour` | Product colour |
| `gender` | Gender category |
| `price` / `priceText` | Current price (in local currency) |
| `rrp` / `rrpText` | Original price (if marked down) |
| `currency` | Currency code |
| `isMarkedDown` | Whether product is on sale |
| `link` | Product page URL |
| `imageUrl` | Main product image |
| `additionalImageUrls` | Additional product images |
| `description` | Product description (plain text) |
| `brandDescription` | Brand description |
| `aboutMe` | Materials/composition info |
| `careInfo` | Care instructions |
| `sizeAndFit` | Size and fit guide |
| `productType` | Product type (e.g. "Trainers") |
| `breadcrumb` | Category breadcrumb path |
| `variants` | Size/colour variants with stock info |
| `isInStock` | Overall stock status |
| `isSellingFast` | Selling fast indicator |
| `reviewRating` | Average review rating |
| `reviewCount` | Total review count |
| `percentageRecommended` | % of reviewers who recommend |
| `ratingDistribution` | Rating breakdown (1-5 stars) |
| `reviews` | Individual review entries |

### Pricing (Pay-Per-Event)

This Actor uses pay-per-event billing. You are only charged for what you actually scrape.

| Event | Price | When charged |
|---|---|---|
| `product-listing` | $0.002 | Each product discovered from a category, brand, or search listing (Algolia API) |
| `product-page` | $0.005 | Each product enriched with full detail from the product page (description, ingredients, directions) |
| `review` | $0.0005 | Per individual customer review fetched |

Reviews require the product page to be fetched.

# Actor input Schema

## `start_urls` (type: `array`):

Supports all ASOS regional sites and Topshop.

ASOS URLs:
UK:  https://www.asos.com/men/shoes/cat/?cid=4209
US:  https://www.asos.com/us/men/shoes/cat/?cid=4209
FR:  https://www.asos.com/fr/hommes/chaussures/cat/?cid=4209
DE:  https://www.asos.com/de/herren/schuhe/cat/?cid=4209
AU:  https://www.asos.com/au/men/shoes/cat/?cid=4209
IT:  https://www.asos.com/it/uomo/scarpe/cat/?cid=4209
ES:  https://www.asos.com/es/hombre/zapatos/cat/?cid=4209
NL:  https://www.asos.com/nl/heren/schoenen/cat/?cid=4209
SE:  https://www.asos.com/se/herr/skor/cat/?cid=4209
DK:  https://www.asos.com/dk/herrer/sko/cat/?cid=4209
PL:  https://www.asos.com/pl/mezczyzni/buty/cat/?cid=4209

Topshop:
https://www.topshop.com/gb/search?q=dresses
https://www.topshop.com/gb

Product: https://www.asos.com/brand/product-name/prd/12345
Search: https://www.asos.com/search/?q=trainers

## `scrape_product_page` (type: `boolean`):

Fetch the individual product detail page for every product. Adds full details, variants, sizes, descriptions and care info to each output item.

## `scrape_reviews` (type: `boolean`):

Scraping reviews requires fetching the product detail page for every product, so will charge the product-detail event rate per product. Reviews are charged at the review event rate. ASOS reviews are embedded in the product page (up to 3 per product).

## `max_products_per_category` (type: `integer`):

Maximum number of products to scrape per category when scraping the whole site. Use lower numbers for testing. Leave empty to fetch all products.

## `max_products` (type: `integer`):

Maximum number of products to scrape per start URL. Use lower numbers for testing. Leave empty to fetch all products.

## `max_reviews` (type: `integer`):

Total number of reviews to fetch per product via the ASOS reviews API. Leave empty to fetch all available reviews. Reviews are charged at the review event rate.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.asos.com/men/shoes/cat/?cid=4209"
    }
  ],
  "scrape_product_page": true,
  "scrape_reviews": true,
  "max_products": 10,
  "max_reviews": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "start_urls": [
        {
            "url": "https://www.asos.com/men/shoes/cat/?cid=4209"
        }
    ],
    "max_products": 10,
    "max_reviews": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("datasaurus/asos").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "start_urls": [{ "url": "https://www.asos.com/men/shoes/cat/?cid=4209" }],
    "max_products": 10,
    "max_reviews": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("datasaurus/asos").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "start_urls": [
    {
      "url": "https://www.asos.com/men/shoes/cat/?cid=4209"
    }
  ],
  "max_products": 10,
  "max_reviews": 10
}' |
apify call datasaurus/asos --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datasaurus/asos"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fdoZtCZJn9ns3APV4/builds/mchTs1ZzMcxa9ijgz/openapi.json
