MR PORTER Scraper — Menswear Prices, Stock & Style Codes avatar

MR PORTER Scraper — Menswear Prices, Stock & Style Codes

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
MR PORTER Scraper — Menswear Prices, Stock & Style Codes

MR PORTER Scraper — Menswear Prices, Stock & Style Codes

Scrape MR PORTER for designer menswear: clothing, shoes and accessories with live prices, real warehouse stock counts, 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

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

MR PORTER Scraper

Browse MR PORTER by category or designer and get back structured menswear product data: designer, price, live warehouse stock count, 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 has a different internal ID at every shop. There is nothing to join on.

MR PORTER publishes the manufacturer's code. Example: RV19T0P55.02KK02KK on a CELINE bomber jacket. That is CELINE's own style code, the one printed on the hangtag, not a MR PORTER-internal number.

How to scrape MR PORTER data

  1. Put one or more category or designer paths in Categories: /clothing, /shoes, /accessories, /designer/gucci, /designer/tom-ford.
  2. Pick a Market. mrp_be is Belgium in EUR; there are 21 markets and each has its own prices and stock.
  3. Set Max Items and run it.

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

Input

FieldTypeRequiredDescription
categoriesArrayNoOne or more category/designer paths. Default ["/clothing"]
categoryStringNoSingle-path alternative to categories
storeCodeStringNoMarket to read, default mrp_be. See the market list below
maxItemsIntegerNoStop after this many products across all categories. Default 50
pageSizeIntegerNoProducts per category request, default 60. 200 is the verified ceiling
proxyConfigurationObjectNoIgnored on purpose, see Limitations

Markets

mrp_be (Belgium), mrp_nl, mrp_fr, mrp_de, mrp_it, mrp_es, mrp_at, mrp_ie, mrp_dk, mrp_se, mrp_ch, mrp_pl, mrp_cz, mrp_gb (GBP), mrp_us (USD), mrp_ca, mrp_au, mrp_hk, mrp_jp, mrp_kr, mrp_ae.

Category and designer paths

Top-level categories: /clothing, /shoes, /accessories, /sport, /home-and-tech, /grooming, /luxury-watches, /fine-jewelry, /kidswear, /sale. Designer pages follow /designer/<brand-slug>, e.g. /designer/gucci, /designer/tom-ford, /designer/the-row. Sub-categories work too, e.g. /clothing/blazers, /shoes/sneakers.

Output

FieldTypeExample
nameString"Shell Bomber Jacket"
brandString"CELINE"
mfPartNumberString"RV19T0P55.02KK02KK"
priceNumber2500
currencyString"EUR"
originalPriceNumberOnly when the item is actually reduced
discountString"-30%", only when reduced
sizesArrayThe brand's size scale for this colourway (schema, not per-size stock — see Limitations)
inStockBoolean or nulltrue/false from a live stock count, null when unreadable
stockLevelNumberLive unit count, when the listing carries one
stockBadgesArray["Sold out"] when inStock is false, empty otherwise
categoryArray["Clothing", "Coats and Jackets", "Bomber jackets"]
categoryPathString"Clothing > Coats and Jackets > Bomber jackets"
colourString"Green"
imageUrlStringMain image at 1000px
imageUrlsArrayAll available views
urlStringProduct page on the chosen market
productIdStringMR PORTER's internal ID
partNumberStringVariant code from the product URL
storeCodeString"mrp_be"
categorySlugStringThe requested path that returned this product
scrapedAtStringISO 8601 timestamp

Prices are converted for you

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

Stock is a live count, not a per-size ladder

MR PORTER's listing API always reports buyable: false on every row regardless of real availability — that flag only means something on a detail record, and the detail endpoint is blocked (see Limitations). What the listing DOES carry, reliably, is a live warehouse inventory field. inStock and stockLevel are read from that field: true/a number when a count exists, null when the row carries no readable count (never coerced to false — an unknown is reported as unknown, not as sold out).

Example output

{
"name": "Shell Bomber Jacket",
"brand": "CELINE",
"mfPartNumber": "RV19T0P55.02KK02KK",
"price": 2500,
"currency": "EUR",
"sizes": [
{ "size": "40" },
{ "size": "42" },
{ "size": "44" },
{ "size": "46" }
],
"inStock": true,
"stockLevel": 5,
"stockBadges": [],
"category": ["Clothing", "Coats and Jackets", "Bomber jackets"],
"categoryPath": "Clothing > Coats and Jackets > Bomber jackets",
"colour": "Green",
"imageUrl": "https://www.mrporter.com/variants/images/46376663163121003/in/w1000.jpg",
"imageUrls": [
"https://www.mrporter.com/variants/images/46376663163121003/in/w1000.jpg",
"https://www.mrporter.com/variants/images/46376663163121003/ou/w1000.jpg"
],
"url": "https://www.mrporter.com/en-be/mens/celine/clothing/bomber-jackets/shell-bomber-jacket/46376663163121003",
"productId": "3074457345626529346",
"partNumber": "46376663163121003",
"storeCode": "mrp_be",
"categorySlug": "/clothing",
"scrapedAt": "2026-09-08T19:44:48.637Z"
}

Speed and cost

The run starts with a one-off browser warm-up of about 7-10 seconds. After that, one category page is one request regardless of how many products it returns (up to 200 per request), so a run is fast: a measured 12 products in 10.6 seconds including warm-up, and a 200-item single-category run is one API call plus warm-up.

No proxy is used, so there is no proxy cost. Cost per result on the Store is charged per item written to the dataset (see the actor's pricing tab for the current rate) — a maxItems: 50 run costs roughly 50x one result, plus one flat per-run start fee. Usage cost only settles once a run reports SUCCEEDED; reading the dataset mid-run will undercount what the run will end up costing.

Limitations

  • No free-text search. MR PORTER's search API path is blocked at the network edge (measured HTTP 403 "Access Denied" with a fully warmed cookie jar and valid client credentials — this is a WAF rule, not a missing cookie). Browse by category or designer path instead of a search term.
  • No per-size stock ladder. The detail endpoint that would carry per-size availability is blocked the same way. sizes lists the brand's size scale (every size the item is cut in), not which sizes are actually in stock. Use inStock/stockLevel for real availability at the product level.
  • Leave the proxy off. A direct connection is what gets past this site's Akamai protection. 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. MR PORTER's protection scores the exit IP, and consecutive runs from the same range do not always get the same answer. The actor retries the browser warm-up up to four times with a fresh fingerprint each time, so this normally costs you 10 to 20 seconds rather than a failed run.
  • One colourway is one record. A jacket in three colours returns three records with three different style codes, which is correct: each colourway has its own manufacturer code.
  • MR PORTER is largely a full-price retailer. originalPrice and discount are usually absent outside sale periods.
  • 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.