Vestiaire Collective Scraper - Products, Prices & Sellers
Pricing
from $1.40 / 1,000 listing or journal records
Vestiaire Collective Scraper - Products, Prices & Sellers
Scrape Vestiaire Collective, the luxury resale marketplace: listings with prices in 7 markets, full product details with seller statistics, sold-item comparables, sale campaigns and the journal news feed. Search, URL and journal modes with sorting, filters and scheduled change tracking.
Pricing
from $1.40 / 1,000 listing or journal records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Vestiaire Collective Scraper: Products, Prices & Sellers
Vestiaire Collective Scraper turns the world's leading luxury resale marketplace into a clean data API. Search keywords, walk any category, brand or sale campaign, follow a seller's closet, collect sold-item comparables, or track the journal news feed - and get structured rows with prices and original prices, condition reports, materials, measurements, buyer fees, seller statistics, full photo sets and market currencies across 7 storefronts - then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Seven markets, one actor. Australia, United States, United Kingdom, France, Germany, Italy and Spain, each with its own currency and language; category links carry their own market automatically.
- Three ways in. Keyword search, pasted links of every shape the site emits (search, category, brand, model, sale campaign, new arrivals, seller profile, product page, journal), or the journal news mode.
- Full price picture. Current price, original price, discount percentage, buyer fee and the seller's own asking price on enriched rows - sold items included as resale comparables.
- Real detail reads. The condition report, material, measurements, negotiability, seller statistics (items sold, listings, pass rate, rating badge) and the complete photo gallery on each enriched row.
- Journal included. The marketplace's editorial news feed with titles, summaries, categories and dates - no other Vestiaire Collective scraper ships the news.
- Built for schedules. Incremental mode returns only new and changed records on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
Use Cases
- Who: luxury resellers and arbitrage hunters - track asking prices across markets, compare sold prices, and watch seller closets for fresh consignment.
- Who: market researchers - measure brand and category inventory, discount depth and condition mix on a schedule.
- Who: pricing analysts - build sold-item comparables with the Sold listings only toggle.
Data You Get
Sample shape: one row per product, from a live record.
| Field | Example |
|---|---|
title | Grand shopping leather tote |
brand | Chanel |
model | Grand shopping |
price | 2100.0 |
wasPrice | 2415.0 |
discountPercent | 13 |
currency | AUD |
conditionDescription | Very good condition |
material | Leather |
measurements | [{"name": "Width", "value": "33"}, {"name": "Height", "value": "25"}] |
buyerFee | 28.0 |
sellerName | Mina |
sellerRatingBadge | Common |
sold | false |
url | (the listing page on Vestiaire Collective) |
changeType | NEW |
How to Use
- Pick a mode: keyword search (default), paste links, or journal for the news feed.
- In URL mode, paste any mix of search, category, brand, model, sale, new arrivals, seller, product and journal links (search links honour
?page=and?sortBy=). Leave the field untouched and the run walks one example link of each shape, sharing Max items evenly between them. In search mode, add keywords and narrow with condition, department, price range or curator picks. - Set Max items for the run cap (20 by default) and keep Fetch product details on for the condition report, seller statistics and galleries.
- Run the actor and export the dataset, or select an MCP connector to send records into your apps.
Search keywords:
{"mode": "search", "searchTerms": ["chanel bag"], "market": "AU", "maxItems": 20}
Sold-item comparables:
{"mode": "search", "searchTerms": ["hermes birkin"], "soldOnly": true, "sort": "price-desc", "maxItems": 50}
Walk a category and the sale campaign:
{"mode": "urls", "urls": ["https://www.vestiairecollective.com/women-bags/handbags/chanel/", "https://www.vestiairecollective.com/c/flash-price-drops-10474/"], "maxItems": 40}
Collect the journal news feed:
{"mode": "journal", "journalCategories": ["fashion-stories"], "maxItems": 20}
Run it from your code
Run it from Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("abotapi/vestiaire-collective-scraper").call(run_input={"mode": "search","searchTerms": ["chanel bag"],"maxItems": 20,"fetchDetails": True,})items = client.dataset(run["defaultDatasetId"]).list_items().items
Run it from JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('abotapi/vestiaire-collective-scraper').call({mode: 'search',searchTerms: ['chanel bag'],maxItems: 20,fetchDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Supported link shapes
| Shape | Example path |
|---|---|
| Search | /search/?q=chanel%20bag (&page=2, &sortBy=price-asc honoured; sort values: relevance, price-asc, price-desc, recency) |
| Category | /women-bags/handbags/ |
| Brand and category | /women-bags/handbags/chanel/ |
| Brand | /chanel/ |
| Model | /women-bags/handbags/chanel/grand-shopping/ |
| Sale campaign | /c/flash-price-drops-10474/ |
| New arrivals | /new-items/ |
| Seller profile | /profile/32743220 |
| Product | /women-bags/handbags/chanel/<slug>-72479772.shtml |
| Journal index, category or article | /journal/ |
URL mode with the field untouched walks the example links above in turn and shares Max items evenly between them, so every shape returns rows once Max items is at least the number of links.
Tips
- A product link always reads its product record: the read is that record's only data source, so the detail fee applies even with the listing-row toggle off.
- The catalog serves the first ~1,020 listings per scope (the feed's own depth limit); sort by price to reach deeper slices of an expensive category.
- Price ranges and price sort follow the selected market's currency; category and brand links keep their own market and currency.
- Journal records include full article text (
content), HTML (contentHtml), ordered content blocks, images and article links. Narrow the feed with Journal categories (for example fashion-stories, promotions, sustainability), or paste a specific article URL.contentStatusreportscompleteorunavailablewhen only the summary could be read. - Keep Fetch details enabled for the full product gallery (
pictureUrlsandimageCount), sizes and seller attributes. Turning it off returns listing cards, usually with one preview photo;detailStatusmakes this explicit.productDetailspreserves category-specific source attributes. Null sizes on bags or absent original prices are source omissions, not invented values.
Send results into your apps (MCP connectors)
Optionally send records into the apps you already use through MCP connectors: set MCP connectors (for example a Notion database) and cap the export with Max items to export per connector. The export is a gated side channel: it never changes the dataset.
| Field | What it does |
|---|---|
mcpConnectors | Connector ids to export to (empty = no export). |
notionParentPageUrl | URL or id of the Notion parent page (required for the Notion connector). |
maxNotifyListings | Cap on records written to each connector per run. |
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | How to start the scrape: keyword search, pasted links, or the journal feed. |
searchTerms | array | - | Keywords for search mode, for example 'chanel bag', 'hermes birkin'. |
urls | array | eleven example links | One example of each link shape (table above). Search, category, brand, model, sale, new arrivals, seller, product or journal links, any mix. |
journalCategories | array | - | Narrow the journal feed to categories like fashion-stories or promotions. |
market | string | AU | Storefront: AU, US, GB, FR, DE, IT or ES. Prices follow the market's currency. |
sort | string | relevance | Listing order: relevance, price low to high, price high to low, or most recent. |
soldOnly | boolean | false | Walk only sold listings (resale comparables). |
conditions | array | - | Condition filter: never worn (with or without tag), very good, good or fair. |
universes | array | - | Department filter: women, men or kids. |
priceRanges | array | - | Price buckets in the market's currency: 0-100, 100-500, 500+. |
editorPicks | array | - | Curator labels: We love, Vintage, Exceptional Pieces. |
fetchDetails | boolean | true | Read each product's full record: condition, material, measurements, fees, seller statistics, gallery. |
maxItems | integer | 20 | The single cap on the run: stop after this many records. |
proxy | object | shared datacenter | Leave the default for the cheapest run. Residential access is used automatically as a backup when your plan includes it; you can also pick it here or supply your own proxy URLs. |
resumeFromRunId | string | - | Paste a previous run ID or dataset ID to continue a large crawl without returning or charging for records already collected there. |
incrementalMode | boolean | false | Track changes across scheduled runs; suppress and never bill unchanged records. |
stateKey | string | - | Optional name for the incremental baseline. |
emitUnchanged | boolean | false | Also return unchanged records, marked and billed. |
emitExpired | boolean | false | Also return disappeared records, marked and billed. |
ignoreFieldsForChanges | array | - | Extra top-level fields excluded from change detection (the likes counter is always ignored). |
mcpConnectors | array | - | Connector ids to export to (empty = no export). |
notionParentPageUrl | string | - | URL or id of the Notion parent page (required for the Notion connector). |
maxNotifyListings | integer | 50 | Cap on records written to each connector per run. |
Output Example
Sample shape: one row per product, from a live record.
Live record: Grand shopping leather tote
{"productId": "72479772","title": "Grand shopping leather tote","brand": "Chanel","model": "Grand shopping","price": 2100.0,"wasPrice": 2415.0,"discountPercent": 13,"currency": "AUD","conditionDescription": "Very good condition","material": "Leather","measurementFormatted": "Width 33 cm, Height 25 cm, Depth 13 cm","buyerFee": 28.0,"sellerName": "Mina","sellerRatingBadge": "Common","sold": false,"imageCount": 15}
Plan Requirement
The catalog and product data load through the default shared connection, which keeps costs low. The site's own pages sit behind a challenge that datacenter and residential connections alike cannot pass, so the actor reads the marketplace's data feeds instead. If the selected connection is refused, the actor continues on a backup connection and logs: "The selected connection is unavailable to this run. Apify free plans do not include residential proxies." Some pages may then stay unavailable. If no page can be read at all, the run fails with a clear message ("Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search.") instead of returning an empty dataset. A paid Apify plan, or your own proxy URLs, gives the most reliable access.
FAQ
How much does it cost?
The actor is pay per event: a start fee per run, a per-record fee for every record returned, and a detail surcharge when a product's full record is read (on by default). Exact prices are on the actor's Pricing tab. Max items is the cost lever: a run's record count is bounded by it.
Is it legal to scrape Vestiaire Collective?
The actor reads the public marketplace surfaces: search, category, product and journal data. It does not access accounts, wishlists or checkout. You are responsible for using the data in line with the site's terms of use, privacy law such as GDPR or CCPA, and applicable regulations; personal data of identifiable individuals requires a lawful basis.
Does it include product reviews?
Vestiaire Collective does not publish buyer reviews or star ratings on listings. What the marketplace does publish is the seller's track record - items sold, listings, pass rate and a rating badge - and every enriched row carries it.
Can I get only new or changed items on a schedule?
Yes. Turn on Incremental mode and schedule the actor. The first run returns everything matching as NEW; later runs return only NEW and UPDATED records. Price moves, sell-outs and restocks all count as changes; the likes counter does not. Use State key to keep a monitoring campaign stable, and Emit unchanged or Emit expired only if you also want those rows (they return and bill extra rows).
Why did a run return fewer results than the site shows?
The feed serves the first ~1,020 listings per scope, and the run stops at Max items (20 by default). Raise the cap, sort by price to slice deeper, or narrow the scope.
Why did my run fail instead of returning an empty dataset?
A run that never got a single readable answer fails loudly with a connection message instead of reporting an empty catalog. On a scheduled incremental run with no changes, the run reports "Nothing changed since the last run" instead of an empty-catalog message. A run that reads some pages but is refused others still succeeds and names the refused count with a Partial results status.
What does the run summary contain?
Each run stores a summary under the key-value store key OUTPUT: records returned, records scanned, detail reads charged and failed, scopes and scopes with errors, pages served and refused, and flags for cap reached, cut by deadline, incremental mode and resumed run. Dataset rows follow a declared fields contract, so every row has the same typed columns; fields the source omits are null.
Can I use it with AI agents or MCP?
Yes. Every record is plain JSON over the dataset API, and the MCP connector export sends rows straight into tools like Notion. Point an agent at the dataset items endpoint with the input above.
π More scrapers you might like
Pair this actor with these related scrapers from the same team:
| π·οΈ Poshmark Scraper Scrape Poshmark fashion-resale listings: keyword search, brand and category browse, sold... | π MUJI Scraper Scrape MUJI products from the United States, Canada and Australia storefronts. Search by... |
| π·οΈ Curtsy Fashion Resale Scraper Scrape Curtsy, the US secondhand fashion marketplace: listings with brand, size, list vs... | π The RealReal Scraper Scrape luxury consignment listings from therealreal.com. Browse by designer, category or... |
| π° Veepee Scraper Scrape Veepee flash sales: live campaigns with brands, dates and discounts plus per-sale... | π§© Grailed Scraper Scrape Grailed by keyword, category, designer, condition, size or URL. Extract prices and... |
π Browse all abotapi scrapers
π¬ Support
- π Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- π οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
- β Enjoying it? A quick review on the actor page helps other users find it.