Vinted Scraper — EU Second-Hand Products & Prices avatar

Vinted Scraper — EU Second-Hand Products & Prices

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Vinted Scraper — EU Second-Hand Products & Prices

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

0

Monthly active users

a day ago

Last modified

Features

Limited permissions

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.

Apify Actor

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

FeatureDetails
Supported Marketplaces23 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 ModesKeyword 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 ModeDefault includeDetails: false extracts 100 listings in ~15–25s (400+ listings in <60s)
Deep Detail ModeOptional includeDetails: true adds full description, up to 20 high-res gallery photos, seller username, rating, review count, and pro-seller flag
De-duplicationAutomatic productId de-duplication across all pages and search terms (0 duplicates)
Empty-Run BehaviorAutomatically samples 10 popular fashion categories/brands when run with an empty query
Export FormatsJSON, 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 tags vs. Very good vs. 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 favouriteCount velocity 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 between vinted.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 your maxItems limit 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, and imageUrl straight from the catalog without slow per-item requests.
  • ✅ Optional item-page enrichment (includeDetails) — visits each product page in parallel batches (maxConcurrency) to extract the full description, up to 20 deduplicated full-size images, sellerName, sellerUrl, sellerRating, sellerReviews, and sellerBusiness.
  • ✅ 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 / Regiondomain ValueBase HostnameLocal Currency
United States / Internationalcomwww.vinted.comUSD ($)
Germanydewww.vinted.deEUR (€)
Francefrwww.vinted.frEUR (€)
United Kingdomco.ukwww.vinted.co.ukGBP (£)
Spaineswww.vinted.esEUR (€)
Italyitwww.vinted.itEUR (€)
Netherlandsnlwww.vinted.nlEUR (€)
Belgiumbewww.vinted.beEUR (€)
Polandplwww.vinted.plPLN (zł)
Czechiaczwww.vinted.czCZK (Kč)
Austriaatwww.vinted.atEUR (€)
Portugalptwww.vinted.ptEUR (€)
Lithuanialtwww.vinted.ltEUR (€)
Swedensewww.vinted.seSEK (kr)
Denmark / Finland / Slovakia / Luxembourg / Romania / Hungary / Greece / Ireland / Croatiadk, fi, sk, lu, ro, hu, gr, ie, hrwww.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.

ParameterTypeDefault / PrefillDescription
querystringPrefill: "nike"Search keyword (e.g., nike, zara, levis, dress, sneakers). Leave empty to collect a mixed sample across 10 popular fashion terms.
domainstring"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.
startUrlsarray[]Optional Vinted catalog/search URLs (e.g., filtered by brand, size, or price ceiling). Takes priority over query and domain.
includeDetailsbooleanfalseOpen each listing page to extract description, full images gallery, and seller profile/rating metrics. Keep false for fast catalog sweeps.
maxItemsinteger100Maximum number of products to collect (0 = unlimited). Raise to 1000+ for deep catalog harvesting.
maxPagesinteger0Maximum catalog pages to read per search (~96 listings per page). 0 = automatic pagination governed by maxItems.
requestDelayinteger500Pause in milliseconds between detail-page requests when includeDetails: true (0–5000).
maxConcurrencyinteger6Number of parallel detail-page requests (1–12) when includeDetails: true.
proxyConfigurationobjectApify ResidentialProxy 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

FieldTypeCoverageDescription
productIdstring🟢 High (100%)Unique Vinted item ID used for de-duplication across pages and searches.
titlestring🟢 High (100%)Listing title as written by the seller.
urlstring🟢 High (100%)Canonical URL to the product page on the target Vinted domain.
pricestring🟢 High (100%)Numeric item price (dot-decimal string, e.g., "25.00").
priceFormattedstring🟢 High (100%)Display price with local currency symbol (e.g., "$25.00", "25,00 €", "£18.00").
currencystring🟢 High (100%)ISO 4217 currency code (EUR, USD, GBP, PLN, CZK, HUF, RON, SEK).
originalPricestring|null🟢 High (~98%)Total buyer-protection price displayed alongside the base item price.

👕 Attributes, Engagement & Media

FieldTypeCoverageDescription
brandstring|null🟢 High (~98%)Brand label declared on the listing (e.g., Nike, Zara, Levi's).
sizestring|null🟢 High (~95%)Size label (S, M, L, EU 38, W32). null on sizeless items like bags or accessories.
conditionstring|null🟢 High (100%)Condition tier (New with tags, New without tags, Very good, Good, Satisfactory).
favouriteCountstring|null🟡 ConditionalNumber of user likes/favourites when displayed on the listing tile.
imageUrlstring|null🟢 High (100%)Primary product thumbnail/image URL.
imagesstring|null🟡 Detail ModeJSON-encoded array of up to 20 deduplicated full-resolution photo URLs (includeDetails: true).
descriptionstring|null🟡 Detail ModeFull seller description up to 3,000 characters (includeDetails: true).

🧑‍💼 Seller Profile & Run Metadata

FieldTypeCoverageDescription
sellerNamestring|null🟡 Detail ModeSeller username (includeDetails: true).
sellerUrlstring|null🟡 Detail ModeDirect URL to the seller's Vinted member profile (includeDetails: true).
sellerBusinessstring|null🟡 Detail Mode"true" if the seller is a registered Pro/business account, else "false" (includeDetails: true).
sellerRatingstring|null🟡 Detail ModeSeller star rating normalized to a 0.00–5.00 scale (includeDetails: true).
sellerReviewsstring|null🟡 Detail ModeTotal number of seller feedback reviews (includeDetails: true).
viewCountstring|null🟡 ConditionalItem view count when exposed by the page.
searchQuerystring|null🟢 High (100%)Search keyword or tag that produced this listing.
scrapedAtstring🟢 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 (with maxPages: 0 and includeDetails: 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 every productId in an in-memory Set so shifted items are never pushed twice.

⚙️ How to use

  1. Open the Actor in the Apify Console.
  2. Choose your search: enter a query (e.g., nike) and select a domain (e.g., de, fr, com), or paste filtered catalog URLs into startUrls.
  3. Configure volume & depth: set maxItems (e.g., 100, 500, 1000+) and leave maxPages: 0 for automatic pagination. Toggle includeDetails: true only when you need seller ratings and full descriptions.
  4. Click Start and watch products populate the dataset.
  5. 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 ApifyClient
client = 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, and currency directly to a spreadsheet to calculate resale price benchmarks.
  • Make.com / Zapier / n8n Deal Alerts: Schedule the actor every 15–60 minutes on your filtered startUrls and push new productId items 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 carry title, price, originalPrice, currency, brand, size, condition, favouriteCount, and imageUrl — 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 into startUrls.
  • Match startUrls domain automatically: When you provide a vinted.fr or vinted.pl URL in startUrls, the scraper automatically detects the hostname and warms cookies on that specific country domain.

⚠️ Honest limitations

  • Detail mode speed: Enabling includeDetails: true fetches each product's HTML page individually. Keep maxItems moderate (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 size is accurately returned as null.
  • 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.


Explore other e-commerce and marketplace scrapers by haketa:


📋 Changelog

v1.2 (2026-11)

  • Unlocked 1,000+ Automatic Pagination: Changed maxPages default to 0 (auto/unlimited governed by maxItems) and fixed maxPages: 0 handling 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 productId without 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, and currency.
  • Added automatic session re-warming on HTTP 401/403 responses.

v1.0 (2026-09)

  • Initial release supporting 23 Vinted country domains, keyword and startUrls catalog scraping, and optional item-page enrichment.
⌂ 换网址