Vinted Scraper — Second-Hand Fashion Listings, Prices & Sellers
Pricing
from $3.00 / 1,000 listings
Vinted Scraper — Second-Hand Fashion Listings, Prices & Sellers
Scrape Vinted listings from catalog search pages — title, brand, size, condition, price, buyer-protection total, favourites, seller and photos. Paste any Vinted catalog, member/closet, or item URL, or search by keyword + filters across any country domain. JSON/CSV out.
Pricing
from $3.00 / 1,000 listings
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
2
Monthly active users
15 hours ago
Last modified
Categories
Share
Vinted Scraper
Turn any Vinted URL or keyword into a structured stream of second-hand fashion listings. Scrape title, brand, size, condition, price, buyer-protection total, favourites, seller, and photos from any catalog search, member closet, or item page — across every Vinted country domain.

Why Use This Scraper?
- ✅ Multiple Vinted entry points — paste any catalog, member/closet, or item URL
- ✅ Keyword search mode with brand, category, size, condition, and price filters
- ✅ Every country domain — vinted.com, vinted.co.uk, vinted.fr, vinted.de, and 18 more
- ✅ Real prices including the buyer-protection total and service fee, not just the sticker price
- ✅ Seller, favourites, and photo data on every row
- ✅ Flat one-row-per-listing output ready for CSV and spreadsheets
Overview
The Vinted Scraper is built for resellers, price analysts, and market researchers who need structured listing data from Vinted's second-hand fashion marketplace.
The output is always listing-shaped rows. Whether you start from a catalog search URL, a member's closet, or a single item URL, the resulting dataset is a flat stream of listing rows — one per item — not separate seller or search rows.
Vinted partitions its catalog by country domain: an item on vinted.com does not exist on vinted.fr. The scraper handles this automatically — every seed carries its own domain, and the domain field controls keyword searches.
Supported Inputs
URL types
| URL type | Pattern | Example |
|---|---|---|
| Catalog / search | /catalog?search_text=...&brand_ids[]=... | https://www.vinted.com/catalog?search_text=nike&order=newest_first |
| Member / closet | /member/{id}-{login} | https://www.vinted.com/member/3158054083-magicthriftbus |
| Single item | /items/{id}-slug | https://www.vinted.com/items/9439503568-nike-pullover-hoodie-blue |
Copy-pasteable startUrls
{"startUrls": ["https://www.vinted.com/catalog?search_text=nike&order=newest_first","https://www.vinted.co.uk/catalog?search_text=carhartt","https://www.vinted.com/member/3158054083-magicthriftbus"]}
Keyword / search mode
The actor also runs from a keyword plus filters, without any URL:
{"searchText": "levis 501","domain": "vinted.fr","priceFrom": 10,"priceTo": 60,"order": "newest_first"}
Unsupported inputs
- ❌ Content behind a Vinted login (private messages, favourites lists, buyer-only fields)
- ❌ More than 960 listings from one search: Vinted shows at most 10 pages of 96 per search. Split a broad search by price range, category, size, or brand to cover more
- ❌ Full item descriptions and measurements
- ❌ Hosts outside
*.vinted.*
Use Cases
| Audience | Use case |
|---|---|
| Resellers | Track sold-through, benchmark asking prices, and spot underpriced listings to flip |
| Price analysts | Build price distributions by brand, size, and condition across country domains |
| Brand / market teams | Monitor how a brand trades second-hand and how buyer-protection fees affect final price |
| Sourcing agents | Watch specific closets for new drops and reserved-vs-available status |
| Researchers | Bulk-export second-hand fashion supply for circular-economy and resale studies |
| Agencies | Deliver client-ready Vinted datasets without maintaining a scraper |
How It Works

- Input — provide Vinted URLs and/or a keyword plus filters on a chosen country domain
- Classify — each URL is auto-routed to the catalog page, the seller's wardrobe (closet), or the item page
- Read — searches come from Vinted's own catalog page, with every filter from your URL kept; closets come from Vinted's wardrobe listing, using a per-domain access token taken from the homepage; item URLs come from the item page plus Vinted's pricing service
- Collect & paginate — it walks pages up to Vinted's last page or your
maxItems, and never loads a page oncemaxItemsrows are in - Output — one flat listing row per item, exportable as JSON or CSV
Input Configuration
Input fields
| Field | Type | Required | Notes |
|---|---|---|---|
startUrls | array<string> | yes (or searchText) | Vinted catalog, member, or item URLs; auto-classified |
searchText | string | optional | Keyword used when no URLs are given |
domain | string enum | optional | Country domain; default vinted.com |
brandIds | array<string> | optional | Numeric Vinted brand IDs (keyword search only) |
catalogIds | array<string> | optional | Numeric category IDs (keyword search only) |
sizeIds | array<string> | optional | Numeric size IDs (keyword search only) |
statusIds | array<string> | optional | Numeric condition IDs (keyword search only) |
priceFrom | integer | optional | Minimum price (keyword search only) |
priceTo | integer | optional | Maximum price (keyword search only) |
order | string enum | optional | relevance | newest_first | price_low_to_high | price_high_to_low |
maxItems | integer | optional | Hard cap on listings; default 1000 |
maxConcurrency | integer | optional | Pages in parallel; default 10 |
proxy | object | optional | Residential recommended; built-in route by default |
Common scenarios
1. Keyword search on a specific domain
{"searchText": "nike","domain": "vinted.com","order": "newest_first","maxItems": 500}
2. Mixed start URLs
{"startUrls": ["https://www.vinted.com/catalog?search_text=nike","https://www.vinted.com/member/3158054083-magicthriftbus"],"maxItems": 200}
3. Filtered keyword search
{"searchText": "jacket","domain": "vinted.co.uk","brandIds": ["53"],"priceFrom": 15,"priceTo": 80}
Output Overview
Each dataset item is one listing row containing:
- Core fields — id, title, url, brand, size, condition, domain
- Pricing — price, currency, service fee, and total including buyer protection
- Engagement — favourites and views
- Seller — id, login, profile url, and business flag
- Media — the main photo url and photo count
Different start types (catalog / closet / item) all resolve to the same flat listing shape, but each Vinted page carries a different amount of data, so some fields stay empty depending on where a row came from:
| Field | Search / catalog | Member / closet | Single item |
|---|---|---|---|
sellerLogin | empty | ✅ | ✅ |
sellerUrl | /member/{id} (no username; the link still works) | ✅ | ✅ |
photoCount | empty (the catalog shows only the main photo) | ✅ | ✅ |
views | empty | ✅ (Vinted often reports 0) | empty |
isReserved | empty | ✅ | ✅ |
On search rows, brand, size, and condition are the text Vinted prints on the listing card, in the domain's language (e.g. Très bon état on vinted.fr). favourites is commonly 0 for brand-new listings.
Output Samples
Catalog search start (filtered catalog URL, vinted.co.uk)
{"id": 10054862926,"title": "Nike University of North Carolina Hoodie White & Light Blue mark on sleeve, Size Medium","url": "https://www.vinted.co.uk/items/10054862926-nike-university-of-north-carolina-hoodie-white-light-blue-mark-on-sleeve-size-medium","brand": "Nike","size": "M / UK 12-14","condition": "Good","price": 1,"currency": "GBP","totalPriceWithBuyerProtection": 1.75,"serviceFee": 0.75,"favourites": 0,"views": null,"isPromoted": false,"isReserved": null,"sellerId": 107211146,"sellerLogin": null,"sellerUrl": "https://www.vinted.co.uk/member/107211146","sellerIsBusiness": true,"photoUrl": "https://images1.vinted.net/t/02_0120c_.../f800/04605ca5.webp","photoCount": null,"domain": "vinted.co.uk","scrapedAt": "2026-09-19T13:17:25.926Z"}
Member / closet start (same flat shape, isReserved populated)
{"id": 9439107296,"title": "2001 Mattel Harry Potter \"Gryffindor Friends\" plush doll","url": "https://www.vinted.com/items/9439107296-...","brand": "Harry Potter","size": "One size","condition": "Good","price": 5,"currency": "USD","totalPriceWithBuyerProtection": 5.7,"serviceFee": 0.7,"isReserved": false,"sellerLogin": "magicthriftbus","photoCount": 5,"domain": "vinted.com"/* ...same fields as above... */}
Key Output Fields
Listing Core
id,title,url,brand,size,condition,domain
Pricing
price,currencyserviceFee,totalPriceWithBuyerProtection
Engagement
favourites,views,isPromoted,isReserved
Seller
sellerId,sellerLogin,sellerUrl,sellerIsBusiness
Media
photoUrl,photoCount
FAQ
Which Vinted URLs are supported?
Catalog/search URLs (/catalog?... and category pages like /catalog/1904-women-shoes), member/closet URLs (/member/{id}-{login}), and single item URLs (/items/{id}-slug). Each is auto-classified. A catalog URL's query string (search_text, catalog[], brand_ids[], size_ids[], status_ids[], color_ids[], price_from, price_to, order, and any other filter the site put there) is kept as it is; only the page number is set by the actor.
Do you return listing rows or seller rows?
Always listing rows. A member/closet URL is expanded into one row per item in that seller's wardrobe — you never get a single "seller" row.
How do I filter by brand or category?
Filter on the Vinted site, then copy the numeric IDs out of the resulting catalog URL — brand_ids[], catalog[], size_ids[], status_ids[] — and pass them in the matching input fields (keyword-search mode). Or just paste the whole filtered catalog URL into startUrls.
Why is totalPriceWithBuyerProtection higher than price?
price is the seller's asking price. Vinted adds a Buyer Protection fee (serviceFee) on top; totalPriceWithBuyerProtection is what a buyer actually pays.
Why are some fields null or zero?
Each Vinted page carries different data. Search rows come from the catalog page, which has no seller username, view count, reserved flag, or photo count, so sellerLogin, views, isReserved, and photoCount are empty there (see the table under Output Overview). Closet and item URLs fill most of them. favourites is frequently 0 on freshly listed items.
Why does a big search stop at 960 listings?
Vinted itself shows at most 10 pages of 96 listings for any search. To collect more, split the search: narrower price ranges, a category, sizes, or brands, each as its own URL.
Which countries can I scrape?
Any Vinted domain — vinted.com, .co.uk, .fr, .de, .es, .it, .nl, .be, .pl, .cz, .sk, .at, .lt, .lu, .pt, .se, .ro, .hu, .gr, .fi, .dk, .ie. Pick one with the domain field, or paste URLs from any of them.
Can I scrape private profiles or content behind login?
No. The actor only reads publicly available listing data. Anything behind the Vinted login wall is out of scope.
What about rate limits?
Vinted's pages show low anti-bot friction. The actor rotates the proxy and retries on any 401/403/429 or block page, and loads one page at a time. Residential proxy is recommended for large runs.
Support
Found a bug or have a feature request? Open an issue on the actor's Issues tab.
Additional Services
Need full item descriptions, measurements, sold-listing history, or scheduled closet monitoring? Custom work is available on request — open an issue with what you need.
Explore More Scrapers
If you found this useful, you might also like:
- North Data Scraper — European company data, officers, and financials
- Other marketplace and directory scrapers on apify.com/memo23
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/apify-vinted-scraper).
Purpose: scrape Vinted second-hand fashion listings from catalog searches, member closets, or item URLs across any Vinted country domain.
Minimal input:
{ "searchText": "nike", "domain": "vinted.com", "maxItems": 20 }
Output: one dataset row per listing — id, title, url, brand, size, condition, price, currency, serviceFee, totalPriceWithBuyerProtection, favourites, views, isPromoted, isReserved, sellerId, sellerLogin, sellerUrl, sellerIsBusiness, photoUrl, photoCount, domain, scrapedAt.
Behaviors an agent should know:
- Always set
maxItems. A search returns at most 960 listings (Vinted's cap of 10 pages of 96); split broad searches by filters to go further. startUrlstake priority oversearchText/filter fields; the discrete filters apply to keyword search only.domainselects the country catalog AND the token bootstrap domain; a seed URL's own domain overrides it.- Search rows leave
sellerLogin,views,isReserved, andphotoCountempty; closet rows fill all four, item rows all butviews. - Item URLs are read from the item page; a sold or removed item gives no row.
- Billing is per dataset row plus a one-off actor-start event; a search with no results pushes no rows.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Vinted UAB, Vinted, Inc., or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available Vinted listing pages — no authenticated endpoints, buyer-only features, or content behind the Vinted login wall. Users are responsible for ensuring their use complies with Vinted's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.
SEO Keywords
vinted scraper, scrape vinted, vinted api, vinted.com scraper, Apify vinted, vinted listings scraper, vinted closet scraper, second hand fashion data, vinted price monitoring, resale price data, vinted brand data, vinted seller scraper, used clothing scraper, secondhand marketplace scraper, vinted catalog scraper, vinted uk scraper, vinted fr scraper, fashion resale intelligence, circular economy data, vinted product data.