DEV Community

Cover image for Tracking Per-Size ASOS Stock Across 10 Regional Stores
Crawler Bros
Crawler Bros

Posted on Fully Autonomous

Tracking Per-Size ASOS Stock Across 10 Regional Stores

E-commerce pricing engines and retail analytics pipelines often fail when tracking inventory changes at the variant level. On fast-fashion platforms like ASOS, top-level product availability is misleading: a product page may list a dress as active, but the most common sizes (like S and M) are completely sold out, leaving only fringe sizes in stock. Furthermore, localized pricing, currency adjustments, and discount strategies vary across regional storefronts.

Building a scraper to track these localized changes directly against ASOS requires handling market-specific endpoints, localized currency headers, and variant-level stock flags. The asos-scraper actor standardizes extraction across 10 regional stores (US, GB, FR, DE, IT, ES, AU, NL, SE, RU) and returns structured product and stock metadata down to the individual SKU level.

Understanding Regional Differences and Per-Size Stock

ASOS uses independent catalogs and currency defaults for each country storefront. Scraped data from the US store (store: "US") does not necessarily mirror the stock levels or active promotions found on the United Kingdom (store: "GB") or German (store: "DE") sites.

When scraping top-level search results, ASOS provides summary metadata. However, granular sizing details—such as whether a specific size is low on inventory or completely out of stock—require fetching variant information from the underlying product display page (PDP) payloads.

The actor supports several modes to balance payload size and data depth:

  • search: Keyword queries over a target catalog.
  • byCategory: Browsing structured taxonomy using preset names or numeric categoryId values.
  • byProductIds and byUrls: Direct lookup for specific catalog items.
  • stockCheck: A lightweight variant designed specifically for price and inventory monitors tracking fixed SKU lists.

When extracting via search or byCategory, setting includeDetails: true instructs the actor to fetch the PDP data for every result, populating the sizes array with individual variant availability.

Execution Walkthrough

You can configure and trigger the actor via JSON payloads through the Apify API or platform interface.

Step 1: Define Target Store and Filter Constraints

To capture women's dresses on sale in the UK store within a specific price range, configure the mode, regional settings, and filter flags.

{
  "mode": "byCategory",
  "category": "women_dresses",
  "store": "GB",
  "currency": "GBP",
  "minPrice": 20,
  "maxPrice": 80,
  "onSaleOnly": true,
  "includeDetails": true,
  "maxItems": 100
}
Enter fullscreen mode Exit fullscreen mode

Step 2: Extract Variant-Level Inventory

When includeDetails is enabled (or when using byProductIds), each emitted JSON record contains the sizes array. Each object in this array exposes the specific stock condition for that size.

Here is an example structure of a returned record:

{
  "productId": 210484705,
  "productCode": "1234567",
  "name": "Design Midi Dress in Floral Print",
  "brand": "ASOS DESIGN",
  "productType": "Dresses",
  "gender": "Women",
  "colour": "Multi",
  "currentPrice": 35.0,
  "currentPriceFormatted": "£35.00",
  "previousPrice": 50.0,
  "rrpPrice": 50.0,
  "currency": "GBP",
  "discountPercent": 30,
  "isOnSale": true,
  "isInStock": true,
  "isSellingFast": true,
  "isRestockingSoon": false,
  "sizes": [
    {
      "size": "UK 6",
      "brandSize": "US 2",
      "variantId": "1001",
      "sku": "SKU-1001",
      "isInStock": true,
      "isLowInStock": false
    },
    {
      "size": "UK 8",
      "brandSize": "US 4",
      "variantId": "1002",
      "sku": "SKU-1002",
      "isInStock": false,
      "isLowInStock": false
    },
    {
      "size": "UK 10",
      "brandSize": "US 6",
      "variantId": "1003",
      "sku": "SKU-1003",
      "isInStock": true,
      "isLowInStock": true
    }
  ],
  "mainImageUrl": "https://images.asos-media.com/products/...",
  "productUrl": "https://www.asos.com/prd/210484705",
  "scrapedAt": "2025-02-17T12:00:00.000Z"
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Parse and Ingest into a Data Pipeline

If you are running regular price checks on known products, switch to mode: "stockCheck". In this mode, the actor omits large text blocks, bullet points, and image arrays, outputting records with recordType: "stock" to optimize throughput.

You can process these records downstream using Python to flag items where popular sizes have sold out:

import json

def process_asos_record(record):
    product_id = record.get("productId")
    current_price = record.get("currentPrice")
    discount = record.get("discountPercent", 0)

    # Calculate stock availability across variants
    sizes = record.get("sizes", [])
    total_sizes = len(sizes)
    available_sizes = [s["size"] for s in sizes if s.get("isInStock")]
    low_stock_sizes = [s["size"] for s in sizes if s.get("isLowInStock")]

    return {
        "product_id": product_id,
        "price": current_price,
        "discount_pct": discount,
        "in_stock_ratio": len(available_sizes) / total_sizes if total_sizes else 0,
        "available_sizes": available_sizes,
        "low_stock_sizes": low_stock_sizes
    }
Enter fullscreen mode Exit fullscreen mode

Pricing and Execution Event Structure

The actor operates on a pay-per-event pricing model. Charges are strictly tied to initialization and dataset ingestion events:

  • Actor Start (apify-actor-start): $0.005 per GB of memory allocated to the run, billed once at the start of execution.
  • Result Item (apify-default-dataset-item): $0.005 per result emitted to the default dataset.

Volume-tier prices apply directly to the result event based on usage tier:

  • FREE: $0.005 per result
  • BRONZE: $0.00433 per result
  • SILVER: $0.00367 per result
  • GOLD: $0.003 per result
  • PLATINUM: $0.003 per result
  • DIAMOND: $0.003 per result

There are no additional per-minute or infrastructure charges beyond these named events.

Limitations and Pipeline Boundaries

This actor does not interact with user accounts, cart sessions, or private checkout flows; it only reads publicly available catalog and inventory endpoints. If your workflow requires validating order limits, checking localized postal code delivery restrictions, or simulating an authenticated checkout session, this tool cannot perform those actions.

For monitoring regional markdowns across multiple territories, running mode: "stockCheck" on a defined list of productIds across the 10 supported regional codes (store) allows you to build historical pricing matrices without collecting unnecessary media assets.


Everything above runs on ASOS Scraper. Start with a small input and a low result limit before you widen the run -- the output shape is easier to check that way.

Prices quoted above are this Actor's published pay-per-event rates on the Apify Store, read from the Apify platform API on 2026-09-23. Check the Actor page for the current rates.

Top comments (0)