Vinted Scraper — EU Second-Hand Products & Prices
Pricing
from $1.50 / 1,000 results
Vinted Scraper — EU Second-Hand Products & Prices
Scrape Vinted, Europe largest second-hand fashion marketplace. Extract products with price, brand, size, condition, seller info and images. Search by keyword across all EU markets. Pure HTTP, no proxy required.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
0
Monthly active users
a day ago
Last modified
Categories
Features
Share
Vinted Scraper — EU & US Second-Hand Fashion Products, Prices, Brands & Sellers
Scrape Vinted, Europe's largest second-hand fashion marketplace, and turn any keyword or catalog URL into clean, structured e-commerce data. Extract product title, price, buyer-protection price, currency, brand, size, condition, favourites count, images, and seller reputation across 23 Vinted country marketplaces — with no login and no coding.
Export to JSON, CSV, Excel, or API for resale arbitrage, price benchmarking, circular-fashion analytics, and catalog intelligence.
Built for resellers and vintage flippers hunting underpriced inventory, fashion brands and pricing analysts tracking circular-economy resale values, e-commerce intelligence teams benchmarking second-hand supply, and market researchers studying European recommerce trends.
⚡ At a glance
| Feature | Details |
|---|---|
| Supported Marketplaces | 23 Vinted domains: .com (US/Intl), .de, .fr, .co.uk, .es, .it, .nl, .be, .pl, .cz, .at, .lt, .pt, .sk, .lu, .ro, .se, .fi, .dk, .hu, .gr, .ie, .hr |
| Search Modes | Keyword search (query), country marketplace (domain), or filtered catalog URLs (startUrls) |
| Page Density & Scale | ~96 listings per catalog page — automatic pagination (maxPages: 0) scales cleanly to 1,000+ products per run |
| Fast Catalog Mode | Default includeDetails: false extracts 100 listings in ~15–25s (400+ listings in <60s) |
| Deep Detail Mode | Optional includeDetails: true adds full description, up to 20 high-res gallery photos, seller username, rating, review count, and pro-seller flag |
| De-duplication | Automatic productId de-duplication across all pages and search terms (0 duplicates) |
| Empty-Run Behavior | Automatically samples 10 popular fashion categories/brands when run with an empty query |
| Export Formats | JSON, CSV, Excel (XLSX), HTML, XML, RSS, and Apify API |
🔎 Why scrape Vinted?
Vinted is the dominant second-hand fashion and lifestyle marketplace across Europe and a rapidly growing platform in the US and UK, hosting over 100 million active listings across 23 regional domains. Every listing carries granular structured metadata — brand, size, condition tier, item price, buyer-protection total price, favourite count, and photos — making Vinted the richest live dataset for circular fashion, resale pricing, and brand demand.
However, Vinted offers no public API, inventory turns over by the minute, and prices vary substantially between countries (e.g., vinted.fr vs. vinted.de vs. vinted.pl). Manually browsing pages or copying listings into spreadsheets cannot keep pace. This Vinted scraper automates session initialization, steps through ~96-item catalog pages automatically, de-duplicates every listing by productId, and outputs analysis-ready records in seconds.
Common reasons teams use this Vinted data extractor:
- 💸 Resale arbitrage & deal sourcing — spot underpriced Nike, Zara, Levi's, Arc'teryx, Carhartt, and luxury vintage pieces as soon as they hit the catalog (
newest_first). - 📊 Brand & resale price benchmarking — calculate median asking prices by brand, condition (
New with tagsvs.Very goodvs.Good), and size across 23 countries. - 🌍 Cross-border marketplace comparison — compare supply and pricing for the same brand across France, Germany, Spain, Italy, Poland, the UK, and the US.
- 🧑💼 Professional seller & competitor intelligence — enable detail enrichment to identify high-volume sellers, professional business accounts (
sellerBusiness), and review counts. - 📈 Trend & demand forecasting — track
favouriteCountvelocity and listing volume across styles, seasons, and categories. - ♻️ Circular-fashion & sustainability research — quantify second-hand market depth, brand resale retention, and clothing lifecycle metrics.
✨ What this Vinted scraper does
- ✅ Keyword search (
query) — search any brand, garment type, or style (nike,zara,levis 501,linen dress,leather handbag,vintage jacket). - ✅ 23-country marketplace selector (
domain) — switch betweenvinted.com,vinted.de,vinted.fr,vinted.co.uk,vinted.es,vinted.it,vinted.nl,vinted.pl, and 15 more local domains with automatic currency detection (EUR,USD,GBP,PLN,CZK,HUF,RON,SEK). - ✅ Advanced Start URLs (
startUrls) — paste any filtered Vinted catalog URL (pre-filtered on Vinted by brand ID, size, color, condition, or price range) and the scraper preserves every URL filter while paginating. - ✅ Unlocked 1,000+ deep pagination — with
maxPages: 0(default), pagination automatically advances through catalog pages (~96 listings per page) until yourmaxItemslimit is reached or the catalog ends. - ✅ Complete catalog card extraction — captures
productId,title,url,price,priceFormatted,currency,originalPrice(total with buyer-protection fee),brand,size,condition,favouriteCount, andimageUrlstraight from the catalog without slow per-item requests. - ✅ Optional item-page enrichment (
includeDetails) — visits each product page in parallel batches (maxConcurrency) to extract the fulldescription, up to 20 deduplicated full-sizeimages,sellerName,sellerUrl,sellerRating,sellerReviews, andsellerBusiness. - ✅ Built-in multi-category sample on empty runs — running with
{}automatically samples 10 popular fashion queries (nike,zara,adidas,levis,dress,sneakers,handbag,jacket,vintage,north face) so you get a balanced dataset immediately.
🎯 Use cases & B2B workflows
1. Vintage Resellers & Arbitrage Automation
Schedule frequent runs ordered by newest_first (the default catalog sort) for target brands or filtered startUrls. Pipe the output to a webhook, Telegram/Slack bot, or Google Sheet to alert your sourcing team whenever high-margin items appear below your target price threshold.
2. Fashion Brands & Dynamic Pricing Engines
Resale platforms, consignment stores, and apparel brands need accurate second-hand price curves. Pull 1,000+ listings per brand to compute average and percentile prices segmented by condition (New with tags, Very good, Good) and size.
3. European Recommerce Market Research
Compare listing density and price dispersion across 23 European and international Vinted domains. Because the scraper normalizes price (numeric string), priceFormatted, and ISO currency, cross-country price comparisons require zero manual cleanup.
4. Pro-Seller & Consignment Lead Generation
Enable includeDetails: true to surface professional vintage boutiques and registered business sellers (sellerBusiness: "true"), complete with their sellerName, sellerUrl, sellerRating, and sellerReviews volume.
🌍 Supported Vinted marketplaces & currencies (23 domains)
| Country / Region | domain Value | Base Hostname | Local Currency |
|---|---|---|---|
| United States / International | com | www.vinted.com | USD ($) |
| Germany | de | www.vinted.de | EUR (€) |
| France | fr | www.vinted.fr | EUR (€) |
| United Kingdom | co.uk | www.vinted.co.uk | GBP (£) |
| Spain | es | www.vinted.es | EUR (€) |
| Italy | it | www.vinted.it | EUR (€) |
| Netherlands | nl | www.vinted.nl | EUR (€) |
| Belgium | be | www.vinted.be | EUR (€) |
| Poland | pl | www.vinted.pl | PLN (zł) |
| Czechia | cz | www.vinted.cz | CZK (Kč) |
| Austria | at | www.vinted.at | EUR (€) |
| Portugal | pt | www.vinted.pt | EUR (€) |
| Lithuania | lt | www.vinted.lt | EUR (€) |
| Sweden | se | www.vinted.se | SEK (kr) |
| Denmark / Finland / Slovakia / Luxembourg / Romania / Hungary / Greece / Ireland / Croatia | dk, fi, sk, lu, ro, hu, gr, ie, hr | www.vinted.<domain> | Local (EUR, HUF, RON, DKK) |
📥 Input configuration
All fields are optional (required: []). Use query + domain for quick searches, or startUrls for complex multi-filter catalog sweeps.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
query | string | Prefill: "nike" | Search keyword (e.g., nike, zara, levis, dress, sneakers). Leave empty to collect a mixed sample across 10 popular fashion terms. |
domain | string | "com" | Vinted country marketplace to search (com, de, fr, co.uk, es, it, nl, be, pl, cz, at, lt, pt, sk, lu, ro, se, fi, dk, hu, gr, ie, hr). Ignored when startUrls are set. |
startUrls | array | [] | Optional Vinted catalog/search URLs (e.g., filtered by brand, size, or price ceiling). Takes priority over query and domain. |
includeDetails | boolean | false | Open each listing page to extract description, full images gallery, and seller profile/rating metrics. Keep false for fast catalog sweeps. |
maxItems | integer | 100 | Maximum number of products to collect (0 = unlimited). Raise to 1000+ for deep catalog harvesting. |
maxPages | integer | 0 | Maximum catalog pages to read per search (~96 listings per page). 0 = automatic pagination governed by maxItems. |
requestDelay | integer | 500 | Pause in milliseconds between detail-page requests when includeDetails: true (0–5000). |
maxConcurrency | integer | 6 | Number of parallel detail-page requests (1–12) when includeDetails: true. |
proxyConfiguration | object | Apify Residential | Proxy settings. Apify Residential proxy is enabled by default for reliable session handling. |
Example 1 — Fast 1,000+ listing brand sweep (list mode)
{"query": "nike","domain": "fr","includeDetails": false,"maxItems": 1000,"maxPages": 0,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Example 2 — Filtered catalog URLs with price cap & brand filter
{"startUrls": [{ "url": "https://www.vinted.de/catalog?search_text=levis&brand_ids[]=7&price_to=40&order=newest_first" },{ "url": "https://www.vinted.de/catalog?search_text=carhartt&price_to=60&order=newest_first" }],"includeDetails": false,"maxItems": 500,"maxPages": 0}
Example 3 — Deep product & seller enrichment (includeDetails: true)
{"query": "arcteryx jacket","domain": "co.uk","includeDetails": true,"maxItems": 50,"maxConcurrency": 6,"requestDelay": 400}
📤 Output schema & field reference
Every Vinted listing is saved as a flat, normalized JSON object. Below is a real record from a fast catalog run (includeDetails: false):
{"productId": "10629921633","title": "Nike sports bra","url": "https://www.vinted.com/items/10629921633-nike-sports-bra","price": "3.00","priceFormatted": "$3.00","currency": "USD","originalPrice": "3.85","brand": "Nike","size": "XL","condition": "Good","favouriteCount": "1","viewCount": null,"sellerName": null,"sellerUrl": null,"sellerBusiness": null,"sellerRating": null,"sellerReviews": null,"imageUrl": "https://images1.vinted.net/t/06_01d8d_mpjEgR2GCrmQr4MR9FG8UbuP/310x430/b86a2645.webp","images": null,"description": null,"searchQuery": "nike","scrapedAt": "2026-11-10T02:50:00.000Z"}
When includeDetails: true is enabled, the enrichment fields are populated:
{"sellerName": "fashion_finds_us","sellerUrl": "https://www.vinted.com/member/3183294676","sellerBusiness": "false","sellerRating": "5.00","sellerReviews": "27","images": "[\"https://images1.vinted.net/.../photo1.webp\",\"https://images1.vinted.net/.../photo2.webp\"]","description": "Worn a few times, still in great condition. No stains or tears."}
🏷️ Product Identity & Pricing
| Field | Type | Coverage | Description |
|---|---|---|---|
productId | string | 🟢 High (100%) | Unique Vinted item ID used for de-duplication across pages and searches. |
title | string | 🟢 High (100%) | Listing title as written by the seller. |
url | string | 🟢 High (100%) | Canonical URL to the product page on the target Vinted domain. |
price | string | 🟢 High (100%) | Numeric item price (dot-decimal string, e.g., "25.00"). |
priceFormatted | string | 🟢 High (100%) | Display price with local currency symbol (e.g., "$25.00", "25,00 €", "£18.00"). |
currency | string | 🟢 High (100%) | ISO 4217 currency code (EUR, USD, GBP, PLN, CZK, HUF, RON, SEK). |
originalPrice | string|null | 🟢 High (~98%) | Total buyer-protection price displayed alongside the base item price. |
👕 Attributes, Engagement & Media
| Field | Type | Coverage | Description |
|---|---|---|---|
brand | string|null | 🟢 High (~98%) | Brand label declared on the listing (e.g., Nike, Zara, Levi's). |
size | string|null | 🟢 High (~95%) | Size label (S, M, L, EU 38, W32). null on sizeless items like bags or accessories. |
condition | string|null | 🟢 High (100%) | Condition tier (New with tags, New without tags, Very good, Good, Satisfactory). |
favouriteCount | string|null | 🟡 Conditional | Number of user likes/favourites when displayed on the listing tile. |
imageUrl | string|null | 🟢 High (100%) | Primary product thumbnail/image URL. |
images | string|null | 🟡 Detail Mode | JSON-encoded array of up to 20 deduplicated full-resolution photo URLs (includeDetails: true). |
description | string|null | 🟡 Detail Mode | Full seller description up to 3,000 characters (includeDetails: true). |
🧑💼 Seller Profile & Run Metadata
| Field | Type | Coverage | Description |
|---|---|---|---|
sellerName | string|null | 🟡 Detail Mode | Seller username (includeDetails: true). |
sellerUrl | string|null | 🟡 Detail Mode | Direct URL to the seller's Vinted member profile (includeDetails: true). |
sellerBusiness | string|null | 🟡 Detail Mode | "true" if the seller is a registered Pro/business account, else "false" (includeDetails: true). |
sellerRating | string|null | 🟡 Detail Mode | Seller star rating normalized to a 0.00–5.00 scale (includeDetails: true). |
sellerReviews | string|null | 🟡 Detail Mode | Total number of seller feedback reviews (includeDetails: true). |
viewCount | string|null | 🟡 Conditional | Item view count when exposed by the page. |
searchQuery | string|null | 🟢 High (100%) | Search keyword or tag that produced this listing. |
scrapedAt | string | 🟢 High (100%) | ISO 8601 UTC timestamp of extraction. |
🔁 Pagination, scale & 1,000+ listing sweeps
Each Vinted catalog page renders up to 96 listings. With maxPages: 0 (the default), the scraper automatically calculates and follows pagination links (?page=2, ?page=3, …) until it collects your exact maxItems target or reaches the end of the catalog:
- Quick 100-item prefill: Reads ~2 catalog pages and finishes in ~15–25 seconds.
- 1,000+ listing harvest: Setting
maxItems: 1000(withmaxPages: 0andincludeDetails: false) paginates through ~11 catalog pages and extracts 1,000 unique products in ~1.5–2 minutes. - Strict de-duplication: Because new items are constantly added to Vinted (
newest_first), listings can shift between page N and page N+1. The scraper tracks everyproductIdin an in-memorySetso shifted items are never pushed twice.
⚙️ How to use
- Open the Actor in the Apify Console.
- Choose your search: enter a
query(e.g.,nike) and select adomain(e.g.,de,fr,com), or paste filtered catalog URLs intostartUrls. - Configure volume & depth: set
maxItems(e.g.,100,500,1000+) and leavemaxPages: 0for automatic pagination. ToggleincludeDetails: trueonly when you need seller ratings and full descriptions. - Click Start and watch products populate the dataset.
- Export or automate: download as JSON, CSV, or Excel, or connect the run to Google Sheets, Make, Zapier, n8n, or your pricing database via the Apify API.
API Example (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/vinted-scraper").call(run_input={"query": "nike","domain": "de","includeDetails": False,"maxItems": 1000,"maxPages": 0,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['title']} | {item['priceFormatted']} | {item['brand']} | {item['size']} | {item['condition']}")
API Example (Node.js)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/vinted-scraper').call({query: 'zara dress',domain: 'fr',includeDetails: false,maxItems: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Extracted ${items.length} Vinted listings`);
API Example (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~vinted-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"query": "levis 501","domain": "de","includeDetails": false,"maxItems": 500,"maxPages": 0}'
🔄 Automation & integration workflows
- Google Sheets / Excel Price Dashboards: Export
title,brand,size,condition,price,originalPrice, andcurrencydirectly to a spreadsheet to calculate resale price benchmarks. - Make.com / Zapier / n8n Deal Alerts: Schedule the actor every 15–60 minutes on your filtered
startUrlsand push newproductIditems to Slack, Discord, Telegram, or email. - BigQuery / PostgreSQL / Snowflake: Stream thousands of European second-hand fashion records into your warehouse to track brand supply and recommerce velocity over time.
💡 Pro tips for best results
- Use list mode (
includeDetails: false) for high-volume price monitoring: Catalog cards already carrytitle,price,originalPrice,currency,brand,size,condition,favouriteCount, andimageUrl— so you get 90% of analytics fields at ~20× the speed and a fraction of the proxy transfer cost. - Filter on Vinted first, then paste into
startUrls: Need a specific brand ID, size ID, color, and price ceiling? Apply those filters in your browser on Vinted, copy the URL from the address bar, and paste it intostartUrls. - Match
startUrlsdomain automatically: When you provide avinted.frorvinted.plURL instartUrls, the scraper automatically detects the hostname and warms cookies on that specific country domain.
⚠️ Honest limitations
- Detail mode speed: Enabling
includeDetails: truefetches each product's HTML page individually. KeepmaxItemsmoderate (e.g., 50–250) when enrichment is enabled so runs finish quickly and residential proxy bandwidth stays low. - Sizeless items: Accessories, bags, books, and homeware on Vinted often omit a size tag; for those items
sizeis accurately returned asnull. - Residential proxy required: Vinted blocks datacenter IP ranges; keep the default Apify Residential proxy enabled.
❓ FAQ
Does Vinted have an official public API?
No. Vinted does not provide a public API for searching listings or pricing data. This actor turns any Vinted search or catalog URL into a clean JSON/CSV API.
Do I need a Vinted account or login cookies?
No. The actor warms an anonymous browsing session automatically — you never need to supply credentials or personal cookies.
How many products can I scrape in one run?
With maxPages: 0 (auto), pagination scales to 1,000+ products per run governed by your maxItems setting. You can also combine multiple startUrls to harvest several thousand listings across categories or brands.
Which Vinted countries and currencies are supported?
All 23 Vinted domains: com (USD), co.uk (GBP), pl (PLN), cz (CZK), hu (HUF), ro (RON), se (SEK), dk, and eurozone markets (de, fr, es, it, nl, be, at, lt, pt, sk, lu, fi, gr, ie, hr — EUR).
Why are sellerName and description null by default?
Vinted only serves seller usernames, ratings, full descriptions, and secondary gallery photos on individual item pages. Enable includeDetails: true in the input whenever you need those fields.
🔗 Related scrapers
Explore other e-commerce and marketplace scrapers by haketa:
- OfferUp Scraper — US local resale marketplace listings, prices, and seller profiles.
- Mercari Scraper — Second-hand marketplace products, brands, and pricing data.
- Woolworths Scraper — Retail product catalog, pricing, and promotion monitoring.
- IndiaMART Scraper — B2B wholesale product and supplier intelligence.
📋 Changelog
v1.2 (2026-11)
- Unlocked 1,000+ Automatic Pagination: Changed
maxPagesdefault to0(auto/unlimited governed bymaxItems) and fixedmaxPages: 0handling so 1,000+ product runs paginate seamlessly across 10+ catalog pages. - De-duplication & Slice Accuracy: Improved per-page candidate slicing so mixed-sample and multi-page runs preserve every unique
productIdwithout premature seen-set marking. - Documentation Upgrade: Added 23-country marketplace coverage table, field coverage indicators, and bulk API examples.
v1.1 (2026-10)
- Added sizeless item price-tail parser so bags and accessories retain
price,originalPrice, andcurrency. - Added automatic session re-warming on HTTP 401/403 responses.
v1.0 (2026-09)
- Initial release supporting 23 Vinted country domains, keyword and
startUrlscatalog scraping, and optional item-page enrichment.