NET-A-PORTER Scraper — Luxury Products, Sizes & Style Codes avatar

NET-A-PORTER Scraper — Luxury Products, Sizes & Style Codes

Deprecated

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
NET-A-PORTER Scraper — Luxury Products, Sizes & Style Codes

NET-A-PORTER Scraper — Luxury Products, Sizes & Style Codes

Deprecated

Scrape NET-A-PORTER for designer clothing, bags, shoes and accessories: prices, per-size stock, category tree, images and the manufacturer style code (mfPartNumber) you can join on across retailers. 20+ markets, no login, no proxy needed.

Pricing

from $1.20 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

3

Monthly active users

17 hours ago

Last modified

Categories

Share

NET-A-PORTER Scraper

Search NET-A-PORTER and get back structured product data: designer, price, the full size ladder with per-size stock, category tree, images, and the manufacturer's own style code.

Why use this actor

Most luxury scrapers hand you a name and a price. The useful part of this one is mfPartNumber, the brand's own style code, which lets you recognise the same physical garment when it appears on a different retailer's site.

If you are price-monitoring, building a resale pricing tool, or maintaining a product database across several luxury retailers, that code is the difference between "two listings that look similar" and "the same item, two prices".

What makes the style code matter

Luxury has no EAN. Groceries and electronics have a barcode that every retailer shares, so joining catalogues is trivial. Fashion does not. Each retailer invents its own SKU, and the same jacket is P01165736 at one shop and 1647597289517280 at another. There is nothing to join on.

NET-A-PORTER publishes the manufacturer's code. Example: 834141QMAC44164 on an Alexander McQueen denim blazer. That is the code McQueen itself uses (alexandermcqueen.com/.../stretch-denim-jacket-834141QMAC44164.html), and it has the structure printed on the physical hangtag: six-digit style, five-character collection and fabric, four-digit colour.

Two of the big luxury retailers expose a real manufacturer code. Farfetch does it as brandStyleId, NET-A-PORTER as mfPartNumber. NET-A-PORTER is the cheaper harvest of the two: one ordinary brand query returns 20 to 50 codes in a single response.

One honest limitation. NET-A-PORTER's search index does not tokenise these codes, so you cannot search by a style code. Searching 834141QMAC44164 returns nothing. The workflow is: search by brand and category, then match on mfPartNumber yourself. A brand query costs the same as any other and hands back a batch of codes to filter against.

How to scrape NET-A-PORTER data

  1. Put one or more search terms in Search Queries. Brand plus category works best: gucci bag, mcqueen denim, loewe espadrilles.
  2. Pick a Market. nap_be is Belgium in EUR; there are 19 markets and each has its own prices and stock.
  3. Set Max Items and run it.

Keep queries short. NET-A-PORTER's index ANDs every token and does not stem, so each extra word can collapse the result set: mcqueen denim returns 5 hits where alexander mcqueen denim jacket returns 1, and prada shoes returns 0 where prada returns 15. The actor handles this for you (it trims stopwords, shortens long designer names, and re-asks with a shorter query when a result set comes back near-empty), but you will get better results by asking bluntly in the first place.

No login, no cookies to supply, and no proxy to set up. The actor does the anti-bot work itself.

Category mode

Set Category Slugs to browse a category listing directly instead of searching, the same way the Mytheresa Scraper's Category slugs field works.

  1. Take the part of a NET-A-PORTER category URL after /shop/. For https://www.net-a-porter.com/en-gb/shop/clothing/dresses that is clothing/dresses.
  2. Put it in Category Slugs: ["clothing/dresses"]. You can list several, and you can also paste the full URL directly — the locale and /shop/ prefix are stripped for you.
  3. Set Max Items and run it. Pagination through the category is handled for you.

Other slugs that work the same way: bags, designer/gucci, sale, shoes/boots. Category Slugs takes priority over Search Queries when both are set.

Input

FieldTypeRequiredDescription
categorySlugsArrayNoBrowse category listings directly, e.g. ["clothing/dresses"]. Takes priority over Search Queries. See Category mode above
searchQueriesArrayNoOne or more search terms. Default ["gucci bag"]
searchQueryStringNoSingle-term alternative to searchQueries
storeCodeStringNoMarket to read, default nap_be. See the market list below
maxItemsIntegerNoStop after this many products across all queries or categories. Default 50
pageSizeIntegerNoProducts per request, default 40. 50 is the ceiling for search, 60 for categories, but capped at 60 here for one consistent field
fetchProductDetailsBooleanNoFetch per-size availability. Default true
normalizeQueriesBooleanNoTrim long queries to the tokens the index matches. Ignored in category mode. Default true
proxyConfigurationObjectNoLeave it off, see Limitations

Markets

nap_be (Belgium), nap_nl, nap_fr, nap_de, nap_it, nap_es, nap_at, nap_ie, nap_dk, nap_se, nap_ch, nap_gb (GBP), nap_us (USD), nap_ca, nap_au, nap_hk, nap_jp, nap_kr, nap_ae.

Output

FieldTypeExample
nameString"Denim blazer"
brandString"MCQUEEN"
mfPartNumberString"834141QMAC44164"
priceNumber1990
currencyString"EUR"
originalPriceNumberOnly when the item is actually reduced
discountString"-30%", only when reduced
sizesArrayFull ladder, one entry per SKU, with availability
inStockBooleantrue when any size is buyable
stockBadgesArray["LOW STOCK"], ["EXCLUSIVE"], ["Sold out"]
lowStockBooleantrue
categoryArray["Clothing", "Jackets", "Blazers"]
categoryPathString"Clothing > Jackets > Blazers"
colourString"Blue"
imageUrlStringMain image at 920px
imageUrlsArrayAll available views
urlStringProduct page on the chosen market
descriptionStringNET-A-PORTER's editorial copy
compositionString"71% Cotton 29% Polyester"
sizeAndFitStringFit notes and model measurements
sizeSchemaString"RTW - Italy"
productIdStringNET-A-PORTER's internal ID
partNumberStringVariant code from the product URL
storeCodeString"nap_be"
searchQueryString or nullThe query that returned this product, null in category mode
categorySlugString or nullThe category that returned this product, null in search mode
scrapedAtStringISO 8601 timestamp

Prices are converted for you

NET-A-PORTER's own API quotes money in minor units with a divisor ({"amount": 199000, "divisor": 100}). The price and originalPrice fields are already converted to major units, so 1990 means EUR 1990.00. The divisor is read from the response rather than assumed, so markets that do not use cents come out right too.

Size ladder

Each entry in sizes is one SKU:

FieldMeaning
sizeBrand size label. ONE SIZE for bags and most jewellery
schemasThe same size in other scales: IT, UK, US, FR, EU, JP, AU, DE, DK, RU, KR, SML
availableBuyable right now
soldOutCarried in this size, currently out of stock
notStockedOnlineNever carried online in this size
skuIdNET-A-PORTER's SKU id
partNumberPer-size part number
eanWhere NET-A-PORTER publishes one, which is not always

The distinction between soldOut and notStockedOnline matters if you are tracking demand. A size that sold out was stocked and sold; a size marked notStockedOnline was never offered.

Example output

{
"name": "Denim blazer",
"brand": "MCQUEEN",
"mfPartNumber": "834141QMAC44164",
"price": 1990,
"currency": "EUR",
"sizes": [
{
"size": "40",
"schemas": { "IT": "IT 40", "UK": "UK 8", "US": "US 4", "FR": "FR 36", "SML": "S" },
"available": true,
"soldOut": false,
"notStockedOnline": false,
"skuId": "3074457345629607675",
"partNumber": "0400664169370",
"ean": "813894730"
},
{
"size": "42",
"schemas": { "IT": "IT 42", "UK": "UK 10", "US": "US 6", "SML": "M" },
"available": false,
"soldOut": true,
"notStockedOnline": false,
"skuId": "3074457345629607677",
"partNumber": "0400664169387"
}
],
"inStock": true,
"stockBadges": ["LOW STOCK"],
"lowStock": true,
"category": ["Clothing", "Jackets", "Blazers"],
"categoryPath": "Clothing > Jackets > Blazers",
"colour": "Blue",
"imageUrl": "https://www.net-a-porter.com/variants/images/46376663162865360/in/w920.jpg",
"url": "https://www.net-a-porter.com/en-be/shop/product/mcqueen/clothing/blazers/denim-blazer/46376663162865360",
"composition": "98% Cotton 2% Elastane",
"sizeSchema": "RTW - Italy",
"productId": "3074457345629607670",
"partNumber": "46376663162865360",
"storeCode": "nap_be",
"searchQuery": "mcqueen denim",
"scrapedAt": "2026-07-29T09:15:22.104Z"
}

Speed and cost

The run starts with a one-off browser warm-up. It takes about 10 seconds when NET-A-PORTER accepts the first connection and 30 to 90 seconds on days it refuses most of them (see Limitations). After that, every search page and every product detail costs roughly 0.2 to 1 second.

With per-size availability on, one product is one detail request. Measured on 12 October 2026, a day with most connections refused: 10 products in 50 seconds, 50 products in 88 seconds, 60 products in 119 seconds, warm-up included.

Turning Fetch Per-Size Availability off removes one request per product and roughly halves the time, at the cost of the sizes ladder, description, composition and sizeAndFit.

You pay the start fee and the price per result, nothing else. Any proxy the actor uses to get past the protection is on us. A run's usage cost only settles after the run has SUCCEEDED.

Limitations

  • You cannot search by style code. NET-A-PORTER's index does not tokenise mfPartNumber. Search by brand and category, then filter on the code.
  • Leave the proxy off. Residential exits score worse on this site than a direct connection: measured 403 through a residential exit where direct returned 200. The setting is honoured if you turn it on, but it is an escape hatch for a burned IP range, not a default.
  • The occasional run needs a second attempt. NET-A-PORTER's protection scores the exit IP, and consecutive runs from the same range do not always get the same answer. The actor tries several connections side by side (direct, datacenter and residential) and keeps the first one that is accepted, so a refused connection normally costs you seconds, not a failed run. If none is accepted within the warm-up budget, the run fails with a status message that says so.
  • Search relevance is weak. The index ANDs tokens and does not stem, so dress finds 2,450 items but prada shoes finds none. Ask bluntly.
  • Per-size availability needs the detail fetch. With fetchProductDetails: false, sizes comes back empty and inStock falls back to the sold-out badge.
  • One colourway is one record. A shoe in three colours returns three records with three different style codes, which is correct: each colourway has its own manufacturer code.
  • NET-A-PORTER is a full-price retailer. originalPrice and discount are usually absent because most items are not reduced.
  • Data is scraped from the public website and may change without notice. Respect the website's terms of service and use responsibly.

Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple luxury sources into one feed joined on the manufacturer style code.