THE OUTNET Scraper — Discounted Designer Fashion Prices & Stock
Pricing
from $1.20 / 1,000 result scrapeds
THE OUTNET Scraper — Discounted Designer Fashion Prices & Stock
Scrape theoutnet.com (YNAP's designer outlet) by search, category or brand: current price, original price, discount percentage, brand, sizes, stock, images and descriptions. 17 markets, no login, no proxy needed.
Pricing
from $1.20 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
THE OUTNET Scraper
Search or browse THE OUTNET (YNAP's designer fashion outlet) and get back structured product data: current price, original price, discount percentage, brand, size/colour, stock, images and descriptions.
Why use this actor
THE OUTNET is an outlet — nearly everything is marked down from a full-price list. The number that actually matters for price-monitoring, deal-alert or resale-pricing use cases is the discount, not just the price, so this actor always tries to give you both the current and the original price in the same currency, and computes the percentage for you.
If you already run our NET-A-PORTER Scraper or Mytheresa Scraper, this is the outlet-side complement: same corporate family angle (YNAP), same "designer fashion, structured output" shape, but built for a completely different backend.
How to scrape THE OUTNET data
- Put one or more terms in Search Queries — a category (
dress,bag,sneakers) or a designer name (zimmermann,valentino garavani) both work. - Pick a Market.
outnet_beis Belgium in EUR; there are 17 markets and each has its own currency. - Set Max Items and run it.
No login, no cookies, and no proxy needed — THE OUTNET's search and product
data live behind two fully public, unauthenticated JSON APIs, and a plain
request from a normal browser user agent gets a 200 on the first try, every
time (recon: docs/site-recon/theoutnet-com.md).
Category and brand mode
Set Category Values to browse a category listing directly instead of
searching, e.g. ["Dresses"], ["Bags"], ["Sneakers"]. These are
case-sensitive and must match THE OUTNET's own category label exactly.
Category Values takes priority over Search Queries when both are set.
Set Brands to filter either mode down to one or more designers, e.g.
["Zimmermann"]. This works layered on top of a search or a category browse,
so categorySlugs: ["Dresses"], brands: ["Zimmermann"] returns only
Zimmermann dresses.
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchQueries | Array | No | One or more search terms. Default ["dress"] |
searchQuery | String | No | Single-term alternative to searchQueries |
categorySlugs | Array | No | Browse a category facet directly, e.g. ["Dresses"]. Case-sensitive. Takes priority over Search Queries |
brands | Array | No | Filter by designer name, e.g. ["Zimmermann"]. Layers on top of either mode |
market | String | No | Market to read, default outnet_be. See the market list below |
maxItems | Integer | No | Stop after this many products across all queries or categories. Default 50 |
pageSize | Integer | No | Products per request, default 60. 200 is the site's verified ceiling |
fetchProductDetails | Boolean | No | Fetch brand, exact size/colour, stock and the full image set per product. Default true |
proxyConfiguration | Object | No | Default Apify proxy, on by default. Recon found no anti-bot, so this exists as a plain escape hatch, not a requirement |
Markets
outnet_be (Belgium, EUR), outnet_nl, outnet_ie, outnet_at (EUR),
outnet_ch (CHF), outnet_es, outnet_fr, outnet_de (EUR),
outnet_gb (GBP), outnet_us (USD), outnet_ca (CAD), outnet_au (AUD),
outnet_hk (HKD), outnet_kr (KRW), outnet_ae (AED), outnet_se (SEK),
outnet_dk (DKK).
Output
| Field | Type | Example |
|---|---|---|
name | String | "VALENTINO GARAVANI Corded Lace-Appliquéd Cotton-Blend Cady Mini Dress" |
brand | String | "Valentino Garavani" |
price | Number | 432.26 |
currency | String | "EUR" |
originalPrice | Number | 2878.82, present whenever the item is reduced |
discount | String | "-85%" |
ean | String | Barcode, when THE OUTNET's index publishes one |
sku | String | Retailer SKU for this exact listing |
productId | String | THE OUTNET's internal (Shopify) product ID |
inStock | Boolean or null | true/false with Fetch Product Detail on, null when off |
sizes | Array | Almost always one entry — see "One listing, one size" below |
colour | String | "Black" |
category | String | "Dresses" |
productType | String | The retailer's own product-type label |
tags | Array | ["Just-In"] |
imageUrl | String | Main image |
imageUrls | Array | All available images |
description | String | THE OUTNET's editorial copy |
url | String | Product page on the selected market |
market | String | "outnet_be" |
searchQuery | String or null | The term that returned this product, null in category mode |
categorySlug | String or null | The category that returned this product, null in search mode |
brandFilter | String or null | The brand filter applied, when set |
scrapedAt | String | ISO 8601 timestamp |
One listing, one size
Unlike NET-A-PORTER or Mytheresa, THE OUTNET does not group every size of a
garment under one product with a size ladder. A dress in size 36 and the same
dress in size 38 are two separate listings with their own URL and their own
Shopify product ID — outlet/liquidation inventory tracked unit by unit. So
sizes normally holds exactly one entry: the size, colour, availability and
SKU of that specific listing. This is a real fact about their catalogue, not a
gap in the scrape.
Prices are read in the market's own currency
THE OUTNET runs on Shopify Markets, and currency is selected by the market you
pick, not converted client-side afterwards. price always comes from a
per-market request when Fetch Product Detail is on. originalPrice can be
trickier: this shop's Shopify Markets setup does not always publish a
converted "compare at" price for every market (confirmed missing for en-be
on a product where en-us had one, for the exact same item) — when that
happens, the actor computes the discount percentage from the search index
(where the current and original price are always in the same base currency as
each other) and applies that percentage to the market-accurate current price,
so price and originalPrice are never a mix of two different currencies.
Example output
{"name": "VALENTINO GARAVANI Corded Lace-Appliquéd Cotton-Blend Cady Mini Dress","brand": "Valentino Garavani","price": 432.26,"currency": "EUR","originalPrice": 2878.82,"discount": "-85%","sku": "PB0VAHV53600NA-36","productId": "9240092442850","inStock": true,"sizes": [{"size": "36","color": "Black","available": true,"sku": "PB0VAHV53600NA-36"}],"colour": "Black","category": "Dresses","productType": "Dresses","tags": ["Just-In"],"imageUrl": "https://cdn.shopify.com/s/files/1/0791/3544/1122/files/60afeafa-4ceb-49fa-8ec0-af5fa5409359.jpg","description": "Embrace the refined elegance of Valentino Garavani with this expertly crafted mini dress...","url": "https://theoutnet.com/en-be/products/valentino-garavani-corded-lace-appliqued-cotton-blend-cady-mini-dress","market": "outnet_be","searchQuery": "dress","categorySlug": null,"brandFilter": null,"scrapedAt": "2026-09-11T09:16:04.878Z"}
Speed and cost
There is no browser warm-up and no anti-bot dance: every request is a plain JSON fetch. A measured local run: 50 products from one search query, including the per-product detail fetch, in under 10 seconds direct, and about 2 minutes through the default Apify proxy pool (worth it for the IP diversity, since a plain HTTP request is cheap either way).
Turning Fetch Product Detail off removes one request per product and
roughly halves the time and request count, at the cost of brand, sizes,
inStock, colour, productType, tags and the full imageUrls set (you
still get name, price, category, imageUrl, description and a
best-effort originalPrice/discount from the search index alone).
There is no Bright Data or other paid unblocker cost per result — every request is a plain fetch, so cost per item is just the platform's own compute and dataset pricing. As with any Apify actor, the usage cost of a run only settles once the run finishes with SUCCEEDED; a run you stop early or that fails still bills for the compute it used up to that point.
Limitations
- One listing is one size/colour, not a ladder — see above. If you need every size of one style, search or browse by that style's name and collect the resulting listings.
brandis empty with Fetch Product Detail off. THE OUTNET's search index does not carry a brand field on its own; it only comes from the per-product detail fetch.- Category and brand values are case-sensitive and must match THE
OUTNET's own labels exactly (
"Dresses", not"dresses"). An unmatched value returns 0 hits rather than an error. originalPriceis sometimes estimated from a percentage, not read directly, on markets where this shop's Shopify Markets setup does not publish a converted "compare at" price. See "Prices are read in the market's own currency" above.- Data is scraped from the public website and may change without notice. Respect the website's terms of service and use responsibly.
Related scrapers
- NET-A-PORTER Scraper — YNAP's full-price sibling. A different backend entirely (IBM WebSphere Commerce behind Akamai, versus this actor's Shopify + Constructor.io), but the same corporate group.
- Mytheresa Scraper — the other big European full-price luxury retailer.
- Vinted Scraper — Europe's largest secondhand fashion marketplace, for comparing outlet against resale.
- Vestiaire Collective Scraper — authenticated luxury resale.
- Zalando Scraper — general European fashion at a lower price point.
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.