24S Scraper at a glance
24S Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes sku, change type (incremental mode), brand, name and price, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Automation, Developer Tools
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 25 options
Scrape 24S luxury fashion by category, filters, or URL. Extract brand, name, price, discounts, size stock, colors, images, descriptions, composition, and country of origin. Filter by brand, color, size, price, and sale.
What 24S Scraper can do
- 40+ fields per product, including per-size stock and color variants that many catalog scrapers skip.
- Two ways to collect: build a category search with brand, color, size, price and discount filters, or paste category and product links directly.
- Specials tracked at the source: was-price, savings amount, discount percentage and a single toggle that checks every discount bucket at once, on every discounted result.
- Optional full product-detail enrichment: description, bullet points, composition, made-in country, product code and the complete image gallery, added with one extra request per product.
- Built for schedules: incremental mode returns only new, updated and reappeared products on recurring runs, and a resume mode continues one interrupted run without re-collecting or re-charging what it already gathered.
- Works across 24S markets (locales such as en-gb, en-us, en-au, fr-fr and more), with the backup residential exit matched to the chosen market's country.
Choose what to collect
These inputs let you configure 24S Scraper - Luxury Fashion, Prices, Stock & Product Details. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | How to find products to scrape. 'search' builds catalog pages from categories + filters; 'url' scrapes category or product page links you paste. |
localestring | 24S market in the form lang-country: de-de, fr-fr, or en- for gb, us, au, fr, it, es, nl, be, ch, de, jp, se, dk, hk, pt, at, sg, ie, ca, kr, cn, ae, no, fi, pl (for example en-gb, en-us, en-au). Any other value is ignored with a warning and en-gb is used. The backup residential exit is matched to this market's country. Category names must be in the locale's language (en- uses women, shoes, bags, ready-to-wear). |
countrystring | Optional ISO-2 market code: gb (or uk), us, au, fr, it, es, nl, be, ch, de, jp, se, dk, hk, pt, at, sg, ie, ca, kr, cn, ae, no, fi, pl. Shortcut for the Market / locale field: gb -> en-gb, de -> de-de; every other code uses the English storefront en-xx, because those markets redirect or have no storefront under their own language. Any other code is ignored with a warning. Only applies while Market / locale is left at en-gb; an explicit locale always wins. |
categoriesarray | Category paths to scrape (search mode). Format universe/category[/subcategory], e.g. 'women/shoes', 'women/bags', 'women/ready-to-wear', 'women/shoes/boots-ankle-boots/ankle-boots'. Use a category path, not a bare universe such as 'women': the universe landing page is editorial and lists no products. 24S no longer runs a separate menswear universe, so 'men/...' paths redirect away and return nothing. Defaults to 'women/shoes' so a run started with no input still returns real results. You may also paste full category page URLs (https://www.24s.com/en-gb/women/shoes); the market is taken from the URL. |
brandsarray | Filter by brand. Use the exact brand name as shown on 24S, e.g. 'CHLOE', 'LOEWE', 'BOTTEGA VENETA', 'LOUIS VUITTON', 'CELINE'. Leave empty for all brands. |
colorsarray | Filter by color, e.g. 'Black', 'Beige', 'Brown', 'Blue'. Leave empty for all colors. |
sizesarray | Filter by size in 24S 'FR NN' notation, e.g. 'FR 38' (shoes) or 'FR 36' (clothing). Leave empty for all sizes. |
Show 18 more inputs
| Input | What it controls |
|---|---|
minPriceinteger | Minimum price in the locale's currency (whole units). Leave empty for no minimum. |
maxPriceinteger | Maximum price in the locale's currency (whole units). Leave empty for no maximum. |
discountsarray | Show only discounted items at or above these discount buckets. Valid values: 20, 30, 40, 50. Leave empty to include full-price items. |
specialsOnlyboolean | Show only items currently on sale. 24S has no separate sale/outlet category or collection (verified: does not exist as a page); this checks every discount bucket at once. Ignored if you already picked specific buckets above. |
sortBystring | Result ordering (search mode). |
urlsarray | 24S category or product page URLs to scrape (url mode). Category URLs paginate forward; product URLs are fetched as single detail records. Filter fields are ignored in this mode (use the filters already in the pasted URL). Accepted shapes: category, nested subcategory, colour or brand page?page=N (starts at that page)?sort=/brands= query, product page (slug_SKU), any locale, trailing slash, locale-less legacy path (uses the Market/locale input). Bare department pages and old /men/ links are skipped with a warning, never charged. Paste a category page such as https://www.24s.com/en-gb/women/shoes rather than a bare department landing page such as https://www.24s.com/en-gb/women, which is editorial and carries no product listing. 24S no longer runs a separate menswear universe, so old /men/ links redirect away and return nothing. |
fetchDetailsboolean | Add the full product-detail fields to every result: long description, bullet points, composition, made-in, product code and the complete image gallery. Adds one request per product. |
maxItemsinteger | Maximum number of products to scrape across all categories/URLs. Set 0 for unlimited. |
maxPagesinteger | Optional safety cap on pages walked per category/URL (72 products per page). Leave empty for no page limit; the run stops at Max products. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl of products without returning or charging for products already collected there. Use this after an interrupted run, or when continuing a product catalogue pull in another run. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately for each locale/category/URL and filter/detail-mode setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the locale/category/URL and filter settings, different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max products capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Optional. Field names that must NOT count as a change in incremental mode, for example "price" or "availability". A product whose only differences are in these fields is treated as UNCHANGED, so it is not returned or billed as UPDATED. Names match at any nesting depth. The fields still appear in the output of rows that are returned. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
idSKU (text)changeTypeChange type (incremental mode) (text)brandBrand (text)nameName (text)pricePrice (number)discountPriceSale Price (number)currentPriceCurrent Price (number)discountPercentageDiscount % (number)currencyCurrency (text)colorColor (text)inStockIn Stock (boolean)onSaleOn Sale (boolean)Show 22 more fields
isOnSpecialOn Special (boolean)wasPriceWas Price (number)savingsAmountSavings (number)imagesCountImages (number)urlURL (link)imageUrlImage (image)originalPriceOriginal price (number)discountDiscount % (number)categoryCategory (text)countryCountry (text)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)descriptionDescription (text)compositionComposition (text)madeInMade in (text)genderGender (text)sizesSizes (array)imageUrlsImages (array)promoEventNamePromo event (text)discountStartDateDiscount start (date)discountEndDateDiscount end (date)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": "BRDXXX0XBCK",
"shortSku": "BRDXXX0XBCK",
"brand": "Sample Brand",
"name": "Structured shoulder bag",
"title": "Sample Brand Structured shoulder bag",
"color": "Black",
"price": 890,
"discountPrice": 623,
"currentPrice": 623,
"discountPercentage": 30,
"currency": "EUR",
"onSale": true,
"isOnSpecial": true,
"wasPrice": 890,
"savingsAmount": 267,
"discountPercent": 30,
"promoEventName": "sample_sales",
"discountStartDate": "2026-01-15T09:00:00+00:00",
"discountEndDate": "2026-02-15T00:00:00+00:00",
"inStock": true,
"stockLevel": 1,
"sizes": [
{
"label": "FR 38",
"sku": "BRDXXX0XBCKO0AAA00",
"inStock": true
},
{
"label": "FR 39",
"sku": "BRDXXX0XBCKO1AAA00",
"inStock": false
}
],
"otherColors": [
{
"label": "Beige",
"shortSku": "BRDXXX0XBEI",
"image": "https://www.24s.com/static/images/unsafe/fit-in/1024x1280/00000000000000000000000000000000"
}
],
"images": [
"https://www.24s.com/static/images/unsafe/fit-in/1024x1280/00000000000000000000000000000000"
],
"imagesCount": 8,
"description": "Full product description appears here when Fetch product details is on.",
"bulletPoints": [
"Adjustable strap",
"Logo detail",
"Suede lining"
],
"composition": "Calf leather",
"madeIn": "Italy",
"productCode": "BRDXXX0XBCKO0AAA00",
"year": "2024",
"productSlug": "structured-shoulder-bag-sample-brand",
"url": "https://www.24s.com/en-gb/structured-shoulder-bag-sample-brand_BRDXXX0XBCK?color=black",
"locale": "en-gb",
"detailFetched": true
}Ways to use this data
- Price and markdown monitoring: track was-price, discount percentage and savings amount across brands and categories to watch how 24S prices move over time.
- Sale-cycle tracking: turn on Specials only to catch every discount bucket at once and get alerted the moment new markdowns appear.
- Assortment and merchandising research: build brand- and category-level datasets of stock, sizes and color variants for competitive analysis.
- Resale and sourcing tools: check size-level stock and color availability for products before sourcing or relisting them.
- Content, comparison and affiliate sites: pull descriptions, images, composition and product codes to build product pages automatically.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does 24S Scraper return?
The documented output for 24S Scraper includes sku, change type (incremental mode), brand, name, price, sale price, current price and discount %. Availability of each field depends on the source page and the selected mode.
How much does 24S Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared products, and unchanged ones are not billed unless you turn on Emit unchanged.
What is the difference between Resume and Incremental mode?
Resume continues one specific interrupted run: paste that run's ID and this run skips everything it already collected. Incremental mode is for running the same search again and again on a schedule and getting only what changed each time. Using both together seeds the first incremental baseline from the resumed run so those products are not reported as new the next day; this works only before the search has any saved incremental state, otherwise the run stops and asks you to remove Resume or pick a new State key.
Why did my run fail instead of returning an empty dataset?
If 24S refuses or redirects every request for a category or pasted URL, the run stops with a clear message so "no products in this category" is never confused with "the page could not be read". Run it again in a few minutes. If only some categories or URLs could be read, you still get what was found, along with a note about what is missing.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
