Vinted Universal Scraper
Pricing
from $1.02 / 1,000 results
Vinted Universal Scraper
⚡ Scrape Vinted by filters or just by pasting a URL! Search any keyword; filter by brand, category, size, colour, condition, price & currency on any Vinted country. Enrich items with the seller's profile, beat the 960-per-search cap with deep scrape, export clean data with photos — CSV/JSON/Excel.
Pricing
from $1.02 / 1,000 results
Rating
5.0
(1)
Developer
Scrapifier
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
Vinted Scraper
Scrape second-hand fashion listings from Vinted by keyword, brand, category or Vinted URL and export them as JSON, CSV or Excel, or pull them straight from the API.
⚡ For every listing you get the title, price and total price with Buyer Protection, the brand, size and condition, favourites and views, swap and promoted flags, all photos in full size, the seller's login and profile link, and optionally the seller's full profile (feedback, city, country, items, followers, last seen). Server-side filters, any Vinted country site (23 domains), no login, no cookies, and you pay per listing.
🎯 Why scrape Vinted listings?
- Price monitoring and resale: follow the asking prices of a brand or a category across countries to spot underpriced items and set your own resale prices.
- Market research: measure how many listings a brand has, in which condition and at which price points, and how favourites and views are spread.
- Sourcing for second-hand shops: pull every listing under a price cap for a keyword or a category, newest first, and review them in a spreadsheet.
- Seller analysis: with seller details on, rank sellers by feedback count, reputation, number of items or followers to find professional sellers.
- Research and data science: build datasets of second-hand prices, photos and conditions for pricing models and trend analysis.
📊 What data does Vinted Scraper extract?
| Field | Description |
|---|---|
id | Unique Vinted item id |
url | Direct link to the item on Vinted |
title | Listing title |
price, currency | Seller's asking price and ISO currency code |
total_price, service_fee | Total price including the Buyer Protection fee, and the fee itself |
brand | Brand name |
size | Size label |
condition | Item condition label |
is_new_with_tags | true when the item is brand new with tags |
favourites, views | Number of favourites (likes) and view count |
is_favourite | Favourited by the current session |
is_for_swap | Seller is open to swap |
promoted | Promoted (paid bump) listing |
photo, photos[], photo_count | Main photo URL, all photo URLs (full size) and their number |
dominant_color | Dominant colour of the main photo (hex) |
seller.id, seller.login, seller.profile_url, seller.is_business | Seller identity, always present |
seller.city, seller.country, seller.feedback_count, seller.feedback_reputation, seller.item_count, seller.given_item_count, seller.followers_count, seller.following_count, seller.last_logged_in, seller.is_verified | Seller profile (location, feedback and reputation 0 to 1, items listed and sold, followers, last seen, verified), added with include_seller_details |
scraped_at | Extraction timestamp |
search_url | Catalog URL of the Vinted domain the item was searched on |
With flatten enabled, seller_login, seller_id and photo_url columns are added (plus seller_feedback_count and seller_feedback_reputation when seller details are on) so CSV and Excel exports stay flat.
🚀 How to scrape Vinted listings
- Open the Actor and type one or more keywords in
search_text, one per line (nike air,robe zara), or paste Vinted catalog, brand or category URLs inurls. Simplest: set your filters on Vinted, copy the address bar and paste it. - Pick the Vinted country in
country(fr,com,de,it,es,co.ukand 17 more); it sets the domain and default currency. - Refine with the filters: brand names, condition, colour, price range, sort order, swap-only items, or advanced numeric ids (category, brand, size, material).
- Set Max results per keyword or URL. Turn on Deep scrape to go past the 960 items a single Vinted search returns, and Include seller details for seller profiles.
- Click Start. Items are pushed to the dataset in batches of 200 while the run is going.
- Open the Storage tab to preview the listings and export them as JSON, CSV, Excel or XML, or read them from the dataset API.
The same run can be started from the Apify API, the Python or JavaScript client, or put on a schedule for daily price tracking.
📥 Input parameters
| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| Vinted URLs | urls | array of URLs | none | Catalog/search URLs (all filters kept), brand URLs (/brand/53-nike) or category URLs (/catalog/1904-women). Empty = build a search with the filters below. |
| Keywords | search_text | array of strings | ["nike"] | One keyword per line, each searched separately (bulk). Empty = the whole category. |
| Vinted country | country | select of 23 options | fr | Marketplace to search (fr, com, de, it, es, co.uk, be, nl, pl and 14 more). Sets the domain and default currency. |
| Brands (by name) | brands | array of strings | none | Brand names (Nike, Zara, Levi's), resolved automatically to Vinted brand ids. |
| Condition | conditions | multi-select | none | 6 New with tags, 1 New without tags, 2 Very good, 3 Good, 4 Satisfactory, 7 Not fully functional. Empty = any. |
| Colour | colors | multi-select of 29 options | none | One or more Vinted colour ids (1 Black, 12 White, 9 Blue, 7 Red...). Empty = any. |
| Min price | price_from | integer | none | Lowest price to include, in the selected country's currency. |
| Max price | price_to | integer | none | Highest price to include. |
| Sort by | order | select | newest_first | newest_first, relevance, price_low_to_high or price_high_to_low. |
| Swap-only items | only_swappable | boolean | false | Only items the seller is open to swapping. |
| Category IDs (advanced) | catalog_ids | array of strings | none | Vinted category ids (1904 = Women, 5 = Men). Empty = all categories. |
| Brand IDs (advanced) | brand_ids | array of strings | none | Exact Vinted brand ids (53 = Nike, 2703 = Jordan). Combined with brands. |
| Size IDs (advanced) | sizes | array of strings | none | Vinted size ids. They depend on the category, get them from a filtered catalog URL. |
| Material IDs (advanced) | material_ids | array of strings | none | Vinted material ids (cotton, leather...), from a filtered catalog URL. |
| Currency override (advanced) | currency | string | none | ISO currency code (EUR, GBP). Defaults to the selected country's currency. |
| Max results | max_results | integer | 100 | Items to collect per keyword or per URL. 0 = as many as possible. A single search reaches up to 960. |
| Deep scrape (beyond 960) | deep_scrape | boolean | false | Split each search into price windows to collect far more than the 960-item cap. |
| Include seller details (slower) | include_seller_details | boolean | false | Add each seller's profile (feedback, city, country, items, followers, last seen) to every item. |
| Flat columns (CSV-friendly) | flatten | boolean | false | Add flat seller_login, seller_id and photo_url columns for CSV and Excel. |
| Report empty searches | emit_input_status | boolean | true | Add an input_status report to the run's OUTPUT record. |
| Proxy | proxyConfiguration | object | {"useApifyProxy": true} | Apify Proxy is on by default. Residential proxies are recommended for large runs and let you pick the country. |
Example input:
{"search_text": ["nike"],"country": "fr","brands": ["Nike"],"conditions": ["6"],"price_from": 10,"price_to": 60,"order": "newest_first","max_results": 200,"include_seller_details": true}
Pasted URLs are parsed for their query filters (keyword, category, brand, colour, size, condition, material, price, currency, order, swap) and for /brand/<id> and /catalog/<id> paths; the search itself runs on the domain selected in country, so set it to match the URL you paste. Brand names Vinted does not recognise are skipped with a warning; use brand_ids for exact control.
📤 Output example
Each listing is one dataset item, exportable as JSON, CSV, Excel or via the API.
{"id": 9453626155,"url": "https://www.vinted.fr/items/9453626155-nike-w-ld1000","title": "Nike W LD_1000","price": 45.0,"currency": "EUR","total_price": 46.85,"service_fee": 1.85,"brand": "Nike","size": "39","condition": "New with tags","is_new_with_tags": true,"favourites": 3,"views": 41,"is_for_swap": false,"photo": "https://images1.vinted.net/.../f800/....jpeg","photos": ["https://images1.vinted.net/...", "..."],"dominant_color": "#1467B7","seller": {"login": "jornas59","profile_url": "https://www.vinted.fr/member/26154389-jornas59","is_business": false,"city": "Napoli","country": "Italia","feedback_count": 23,"feedback_reputation": 1.0,"item_count": 60,"followers_count": 12},"scraped_at": "2026-07-21 14:58:00"}
The run's OUTPUT record also holds the run statistics (searches, unique items, duplicates, pages, errors, sellers enriched) and, per keyword or URL, an input_status entry (ok or empty with the item count) so you can see at a glance which search produced nothing.
💡 Ready-to-run examples
New-with-tags Nike items between 10 and 60 EUR, with seller profiles
{ "search_text": ["nike"], "country": "fr", "brands": ["Nike"], "conditions": ["6"], "price_from": 10, "price_to": 60, "order": "newest_first", "max_results": 200, "include_seller_details": true }
A whole brand page from its URL, beyond the 960 cap
{ "urls": ["https://www.vinted.fr/brand/53-nike"], "country": "fr", "deep_scrape": true, "max_results": 0 }
A whole category with no keyword
{ "country": "fr", "catalog_ids": ["1904"], "deep_scrape": true, "max_results": 0 }
Cheapest vintage jackets on the international site (USD)
{ "search_text": ["vintage jacket"], "country": "com", "order": "price_low_to_high", "max_results": 100 }
💰 Pricing: how much does it cost to scrape Vinted?
From $1.50 per 1,000 listings on the free plan, with automatic volume discounts down to $1.02 per 1,000 on higher Apify plans. You pay only for the results you receive, there is no subscription and no start fee. New Apify accounts get free monthly platform credits to try it.
Cost is driven purely by the number of listings returned: max_results caps each keyword or URL (five keywords at 100 can return up to 500 items), and price, condition, colour or brand filters narrow the set on Vinted's side before you pay for it. Seller enrichment adds runtime, not billed items.
⚙️ Performance, proxies and limits
- How it works: the Actor opens an anonymous session on the selected Vinted domain, then reads Vinted's public JSON API (
api/v2/catalog/items), 96 items per page. No login, no cookies to paste. - Proxy: Apify Proxy is on by default. For large or frequent runs, Apify Residential proxies work best and let you pick the country. On an HTTP 401, 403, 419, 429 or 5xx response the Actor opens a fresh session (rotating the proxy IP) and retries, up to 5 attempts per request.
- The 960 cap: Vinted returns at most 10 pages of 96 items per query. Deep scrape splits each search into 15 ascending price windows (0 to 5, 5 to 10, up to 500 to 1000 and above 1000, clipped to your
price_fromandprice_to), each fetching up to 960 items. - Max results per search:
max_resultsapplies to each keyword or URL separately.0collects everything reachable. - Deduplication: items are deduplicated by
idwithin a run, across keywords and price windows. Duplicates are counted in the OUTPUT stats. - Seller details: one extra API call per distinct seller (cached within the run), so enriched runs are slower.
- Streaming: items are pushed to the dataset in batches of 200, so partial results are available during the run.
- Empty searches: a keyword or URL that matches nothing yields
status: "empty"in theinput_statusreport.
🔌 Integrations and API
Run Vinted Scraper from the Apify API, the Python or JavaScript client, or on a schedule. Connect it to Make, Zapier, n8n, Google Sheets, Slack or any webhook through Apify integrations. Every run's dataset is available as JSON, CSV, Excel or XML from the dataset API.
curl -X POST "https://api.apify.com/v2/acts/scrapifier~vinted-universal-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{ "search_text": ["nike"], "country": "fr", "conditions": ["6"], "price_to": 60, "max_results": 100 }'
❓ FAQ
Is it legal to scrape Vinted?
The Actor only reads listings that Vinted shows to anyone without logging in. Seller profiles contain personal data (login, city, country), so process them in line with GDPR and other privacy laws, respect Vinted's terms of use, and stay responsible for how you use the data. This is not legal advice.
Do I need a Vinted account, login or cookies?
No. The Actor creates its own anonymous session on the Vinted domain you select. Nothing to log in to and no cookies to paste.
Can I export Vinted listings to Excel or Google Sheets?
Yes. Every run's dataset downloads as CSV, XLSX, JSON or XML from the Storage tab, and the Google Sheets integration can push new listings to a sheet. Turn on flatten for flat seller and photo columns.
How many listings can I scrape?
One Vinted search stops at 960 items. With deep_scrape the query is split into price windows, each capped at 960, so a brand or a category can return thousands of listings. Set max_results to 0 for everything reachable, or keep a cap to control cost.
Does it work for Vinted in Germany, the UK, Italy or the US?
Yes. Pick the marketplace in country: 23 domains are supported, including de, co.uk, it, es, pl and com (the international site in USD). Prices come back in that country's currency unless you override currency.
How do I find category, size or material ids?
Filter on Vinted in your browser, copy the URL from the address bar and paste it in urls: the Actor reads the category, size, material, brand, colour and condition ids from it. Category 1904 is Women and 5 is Men; brand 53 is Nike.
Do I need a proxy, and what if a run is blocked?
Apify Proxy is enabled by default. For large or frequent runs, switch to Apify Residential proxies and pick the country of the marketplace. When Vinted answers with an anti-bot or rate-limit status, the Actor renews its session and retries up to 5 times before logging an error.
How fresh is the data?
Every run queries Vinted live and scraped_at records the extraction time. Schedule the Actor with order set to newest_first for a rolling feed of new listings.
🔗 Related scrapers
- Leboncoin Scraper: listings from any Leboncoin search URL.
- Leboncoin Vehicles Scraper: cars, motorbikes and vans by filters.
- Leboncoin Real Estate Scraper: real-estate listings by filters, no URL needed.
- Trustpilot Reviews Scraper: customer reviews and TrustScores for any company.
- SeLoger Scraper: real-estate listings from SeLoger.
💬 Support
Questions, bugs or a feature request? Open an issue in the Issues tab of this Actor, I answer quickly. If Vinted Scraper saves you time, a rating on the Store helps others find it.