# Changelog of ASOS Scraper (`autofacts/asos`) Actor

- **URL**: https://apify.com/autofacts/asos/changelog.md
- **Full Actor documentation**: https://apify.com/autofacts/asos.md

## ChangeLog

#### 26/09/2026 — Pay-per-event charging

**Feat:**

- Records are billed through Apify pay-per-event: `product` (one per product, one per piece of a product group), `category` (one per category record), and three add-ons charged only for products that actually carry the extra — `reviews`, `saved-count`, `other-colours`. Each add-on matches an input switch, so switching an extra off also stops its charge.
- A record is stored and charged in one step, so a record the budget no longer covers is never stored, and a retried request never stores or bills the same record twice.
- When **Max total charge** is reached the Actor stops fetching and finishes SUCCEEDED, keeping everything already saved.

#### 26/09/2026 — All categories of a storefront

**Feat:**

- **NEW** storefront (`https://www.asos.com/`, `https://www.asos.com/us/`, ...) and department (`/men/`, `/women/`) start URLs: emit one **category record** per menu category — 540 in the UK store. The A–Z brand directories are not included; brand pages remain supported as category URLs.
- Category records follow the spec's `Collection` shape (`id`, `title`, `handle`, `description`, `productsCount`) and add `url`, `store`, `country`, `language`, `currency`, `department`, every menu `paths` leading to the category, and the category page's refinement `facets` (brand, size, colour, price range, ... with product counts). They share the default dataset with products, like the fleet's Shopify collections, and have their own "Categories" view.
- **NEW** input `withCategoryProducts`: also scrape every product of those categories, each product once however many categories list it. Off by default.
- Where the menu links a category through a filtered view of another category (e.g. "Little Black Dresses" → Dresses filtered to black), the category's own id is authoritative; its own page is `url` and the menu link is `menuUrl`.

**Changed:**

- `Collection.publishedUTC` / `updatedUTC` are optional: ASOS publishes neither for a category.
- The dataset schema has no top-level required fields any more, since products and categories share it.

**Docs:**

- The README opens with a hero banner in the fleet's style, generated with Codex from `.actor/readme-hero-v1-brief.md` and served from the key-value store `asos-scraper-readme`; `AGENTS.md` says how to replace it.

#### 25/09/2026 — 2.0: full product data, every storefront

The 1.x actor had stopped working: every product and category request failed after ASOS changed its
services. 2.0 is a rebuild that restores scraping and adds much more product data.

**Fix:**

- Products, product groups, categories and prices scrape again, with stock for every variant.
- Each storefront is scraped in its own store, currency, language and size schema: `/us/` URLs give USD and US sizes, `/fr/` EUR, and so on. 1.x sent every URL as store `ROW` in GBP with country `HK`.
- Product-group records now fill `source.bundleIds`, which 1.x declared but never populated.
- Links inside the description HTML are absolute www.asos.com URLs in the product's storefront, as in 1.x.
- A variant not sold in that store is reported out of stock at the product price, with `extraInfo.hasStockRecord: false`, instead of in stock at 0.

**Feat:**

- **NEW** search URLs (`/search/?q=…`), and `&page=N` on category and search URLs to start from that page.
- **NEW** per-variant `gtin` (EAN), and `extraInfo` with brand size, availability, Prop 65 flag, country of manufacture, stock timestamp, seller and fulfilment source.
- **NEW** price detail: RRP (`original`), formatted texts, 30-day lowest price, marked-down / outlet / restocking-soon flags, price start time, currency.
- **NEW** `stats`: star rating, rating distribution, recommended counts and percentage, fit/quality/comfort averages, AI review summary, and the saved-for-later count as `lovesCount`.
- **NEW** `reviews[]`: the latest reviews (up to 100 per product) with rating, text, sub-ratings, badges, photos and videos.
- **NEW** `relatedProducts[]`: the other colours of the same style, with price and stock.
- **NEW** media: flat-lay, spin-set and swatch images, catwalk videos, each linked to its colour (`optionId`) and variants.
- **NEW** `extraInfo`: product code, gender, product type, fit type, size-guide URL, one-size/no-size flags, selling tags, buy-the-look ids, localised URLs and titles for every ASOS language, and — for products found through a listing — the category, position and listing badges (selling fast, new, promotion, sponsored).
- **NEW** product-group members are full products (their own detail page, stock, reviews, saved count and colours), not the reduced group payload.
- **NEW** inputs `withReviews`, `maxReviewsPerProduct`, `withSavedCount`, `withOtherColours`, `maxRequestsPerCrawl`.

**Changed:**

- Migrated to Apify SDK 3 + Crawlee 3.18 on Node 22, with dataset and output schemas.
- `source.crawlUrl` is always a public www.asos.com page URL (with `cid` when the product came from a category).
- Feishu notifications are removed; Scraper Insight is the single monitoring channel.
- The run fails when any request is still failing after its retries, instead of succeeding with missing products. Delisted products (404) are logged and skipped, not counted as failures.

#### 04/04/2022

1. rewrite with new framework
2. removed headless requirement
