π₯Vinted Scraper
Pricing
from $0.80 / 1,000 product scrapeds
π₯Vinted Scraper
π Vinted Data Scraper: Fast & Robust! π₯ π Items and catalogs π₯ User profiles with stats and balances π·οΈ Brands π Seamlessly integrate with Apify for unparalleled performance & insights. Elevate your business now!π π₯ Power of direct API access for ultra-fast data extraction in a flash! β‘
Pricing
from $0.80 / 1,000 product scrapeds
Rating
2.9
(2)
Developer
Bebity
Maintained by CommunityActor stats
10
Bookmarked
511
Total users
8
Monthly active users
1.6 days
Issues response
15 days ago
Last modified
Categories
Share

Vinted Scraper extracts listings and seller profiles from Vinted across 12 marketplaces β search by keywords, paste a filtered Vinted URL, or point it at a seller's wardrobe. It returns 33 clean columns per listing, 54 with item details, and 36 per seller β pro sellers' public business contact included β at $0.001 per item: the most complete Vinted dataset on the Store, at half the market's median price.
π Version 2 β a full rebuild
This is not a patch. v2 is a ground-up rewrite of the engine, the input schema and the output contract, rebuilt around what Vinted sellers, resellers and price-monitoring teams actually asked for. It breaks Vinted's ~813-result ceiling, runs 4.7Γ faster, returns more than twice the fields of the median actor, and is priced pay-per-event so AI agents can call it directly. Everything below is measured, not claimed.
What is Vinted Scraper?
Vinted has no public API. Vinted Scraper is that missing API β a fast, structured, pay-as-you-go interface to Vinted's catalogue and seller base.
Give it keywords, a Vinted search URL you built in your own browser, or a list of seller profiles. It returns a flat, typed dataset you can export as JSON, CSV, Excel, XML or HTML, push into Google Sheets, or read straight from the Apify API.
What's new in v2
| v1 | v2 | |
|---|---|---|
| Result ceiling | silently capped at ~813 | 5,146 unique measured with Deep scan |
| Speed, 100 items | 104 s | 22 s β 4.7Γ faster |
| Bandwidth per run | ~54 MB | ~0 MB |
| Fields per listing | 12 | 33, up to 54 with item details |
| Seller data | none | 36 fields, own dataset β pro sellers' public contact included |
| Failed rows | silently dropped | visible, with a reason |
| Pricing | monthly subscription | pay-per-event, from $0.001/item |
| AI agents / MCP | not callable | callable |
Breaking change: the v1 input schema mirrored Vinted's raw API. v2's is built around tasks β search, filter, follow a seller β so you never have to look up an ID by hand again.
Why Vinted Scraper beats Vinted's 813-result wall
This is the single thing every other Vinted scraper stops at, and most never mention.
Vinted's search API refuses to paginate past page 10. Ten pages Γ 96 rows is 960 raw results β about 813 unique once the 15% page-overlap is removed. pagination.total_pages is a decoy: it always reports ceil(960 / per_page), never the real volume. Ask for page 11 and the API errors; the public site answers "Sorry, no results". Every scraper that pages naively stops there.
That cap applies per query, not to the corpus. Turn on Deep scan and the actor slices your price range into narrower bands, searches each independently, and recursively splits any band that comes back full β because a saturated band is proof there is more behind it.
| Strategy | Unique results |
|---|---|
| Plain pagination | 778 |
| Fixed price slices | 2,628 |
| Price cursor | 1,634 |
| Adaptive price partition (Deep scan) | 5,146 |
Measured 5 September 2026 on a broad query. A single band, β¬0β5, returns 749 uniques; split in half, its halves return 1,878 together β Γ2.51, and still saturated.
And when Deep scan is off while you asked for more than one search can deliver, the run says so in the log, with both numbers β instead of reporting a tidy success over truncated data.
Unmatched speed: 22 seconds for 100 items
Speed here is measured, and the measurements are public.
| Metric | Result |
|---|---|
| 100 items, end to end | 22.0 s median (was 104.4 s) |
| Throughput | 323 requests/minute (was 56) |
| Bandwidth per run | ~0 MB (was ~54 MB) |
| p99 request latency, through proxy | 8.3 s |
Where it came from: the bootstrap step used to download Vinted's 2 MB homepage ~25 times per run just to read nine Set-Cookie headers. A HEAD request returns the same nine headers and zero bytes β and gets refused less often, because a 2 MB body on a slow IP was blowing its own timeout and being logged as a block. Concurrency, session-pool sizing and autoscaler warm-up were then tuned against ~90 real runs.
You pay per event, not per second β but a faster actor still means fresher data and quicker feedback loops.
What data can Vinted Scraper extract?
Every listing lands as one flat row. Nothing is nested in a raw API blob you have to dig through.
Listing fields β 54 columns
| Group | Fields |
|---|---|
| Identity | id, url, title, brand, size, condition |
| Pricing | price, currency, totalPrice, serviceFee |
| Media | photo (main image), photos[] (up to 20, each with url, fullSizeUrl up to 1600 px, dominantColor, width, height), photoCount |
| Seller | sellerId, sellerLogin, sellerUrl, sellerPhoto, isBusinessSeller |
| Engagement | favouriteCount, viewCount, promoted |
| Availability | isReserved, isClosed, isVisible, isHidden, itemClosingAction, isHeavyBulky |
| Timing | listedAt, listedHoursAgo, scrapedAt |
| Demand signals | favsPerDay, favouriteRate β computed here, served by no one |
| Context | country |
| π Item details add-on | description, category, categoryId, brandId, sizeId, statusId, colors[], attributes{} |
| π Shipping, from item details | shippingFrom, shippingOriginalPrice, shippingDiscount, shippingLowest30d, pickupOnly |
| π Seller, from item details | sellerFeedbackRating, sellerFeedbackCount, sellerItemCount, sellerCity, sellerCountry, sellerLastSeenAt, sellerBadges[] |
| π Honesty | detailError β null when the product record arrived. Otherwise why it did not: the listing columns on that row are complete, the add-on columns are empty, and the row was not charged the detail rate |
One of those exists nowhere else on the Store:
attributes{}β the attribute map Vinted attaches per category, flattened toattributes/<key>on export.materialon furniture,author/isbn_nav/language_bookon books,battery_healthandinternal_memory_capacityon phones. Whatever Vinted attaches to that category comes through. The two actors that get closest hard-code two clothing attributes and returnnullfor everything else β which is what happens if you build the field from a single garment instead of from six categories.
Seller fields β 36 columns, in their own dataset
| Group | Fields |
|---|---|
| Identity | sellerId, sellerLogin, sellerUrl, sellerPhoto, about, isBusinessSeller |
| Reputation | feedbackReputation, feedbackCount, positiveFeedbackCount, neutralFeedbackCount, negativeFeedbackCount |
| Trust | isEmailVerified, isGoogleVerified, isFacebookVerified |
| Trade history | totalItemsCount, soldItemCount, boughtItemCount, itemCount |
| Deals | bundleDiscounts[] β the seller's bundle tiers, e.g. 10 % off from 3 items |
| Audience | followersCount, followingCount, followingBrandsCount |
| Location | city, countryCode |
| Activity | isOnline, isOnHoliday, lastSeenAt, scrapedAt |
| πΌ Pro contact | businessName, businessEmail, businessPhone, businessAddress, businessCountryCode, businessLegalCode, businessRegistrar |
| π Derived | sellThroughRate β sold Γ· listed, as a percentage |
Pro sellers' contact, exactly as Vinted shows it. For a pro seller: the business name, email, phone, registration number and β for a company β the street address their public profile displays, in a Pro sellers' contact tab. What Vinted keeps private stays empty: a sole trader's personal email or phone is never returned, and private sellers leave all seven columns empty.
sellThroughRate in a single call. No snapshots, no scheduled diffing: the numbers are already in the profile response, so one request tells you whether a seller actually moves stock. The market leader bills this as a dedicated $0.10 event.
Seller rows go to a separate sellers dataset, so one row always means one entity β maxItems: 100 returns 100 listings, not 198 mixed-shape rows.
How that compares
On the 47 fields charted, the 16 competing Vinted actors return a median of 18.5. The best of them returns 27; Vinted Scraper returns 46. No competitor returns a pro seller's business contact, registration number or bundle discounts at all. Every cell was read from each actor's live dataset schema and README, not estimated: the rows up to 2.2 on 10 September 2026, the four rows new in 2.3 on 13 September 2026.
How much does it cost to scrape Vinted?
Pay-per-event. You are billed for results, never for time, and never for a run that returns nothing.
| Event | Price | When it fires |
|---|---|---|
| Actor start | $0.005 | once per run |
| Item scraped | $0.001 | one unique listing in the dataset |
| Seller enriched | $0.002 | one seller profile, only with the add-on on |
| Item detailed | $0.002 | one listing page parsed, only with the add-on on |
$0.001 per item is half the Store's median of $0.002 β and it's the same price on every Apify plan, including the free one. Several competitors advertise a lower headline number, but only from the Gold tier upward; on the free and entry plans they charge $0.002 to $0.0035. Vinted Scraper returns nearly twice the fields, at the same price for everyone.
Build your own price with add-ons
The two add-ons are opt-in and billed only when used, so you pay for the shape of data you actually need rather than a bundled price someone else chose:
| What you need | Add-ons | Cost per 1,000 items |
|---|---|---|
| Price monitoring, catalogue snapshots | none | $1.01 |
| Lead-gen, seller vetting | Seller details (β300 unique sellers) | $1.61 |
| Full product records with descriptions | Item details | $3.01 |
| Everything | both | $3.61 |
Actors that bundle descriptions into the base price sit 25% above the market median on every row β including the rows you didn't want a description for. Keeping it as an add-on is what lets the base row stay at $0.001.
Cap what a run may cost you
Set Maximum cost per run in the run options and the actor plans its collection around that number before it sends a single request β it tells you upfront how many listings your cap covers, collects exactly that many, and stops. You are never handed rows past the cap, and never charged past it either.
The cap counts the add-ons too: with Seller details on, a listing is budgeted at the listing plus its seller, so a $1 cap yields the number of complete records it can pay for rather than a pile of listings and a truncated seller tab.
On the Apify free plan ($5 monthly credit) that's roughly 4,900 listings per month at no cost.
Built for AI agents
v2 is pay-per-event, which is what makes it callable over Apify's MCP server and usable by agents that pay per call. The v1 subscription model was excluded from that channel entirely.
Beyond billing, three design choices make the output safe to hand to a model:
- π§± A declared dataset schema. Every column has a type, and the column set is stable across both collection routes β missing values are
null, never an absent key. An agent parsing the tenth row sees the shape of the first. - π¨ No silent failures. An input that can't be extracted produces a failure row carrying its reason, in a dedicated
failed_itemsview β not a gap. An agent can count, retry or escalate. v1'scatch { break; }is exactly how the 813-item ceiling stayed hidden for months. - π’ Pre-computed signals.
favsPerDay,favouriteRate,listedHoursAgoandsellThroughRateare derived in the actor, so an agent doesn't burn tokens doing arithmetic over a dataset.
Add the Apify platform on top β scheduling, webhooks, monitoring, integrations, proxy rotation, and a REST API over every dataset β and the whole thing is one HTTP call away.
How to scrape Vinted data: step by step
- Click Try for free at the top of this page.
- Choose how to search. Type words into Search keywords, or filter on
vinted.frin your own browser and paste the resulting URL into Vinted search URLs β every filter in that URL is parsed automatically. For a specific seller, paste their profile URL into Seller profile URLs, under Advanced filters. - Pick your country β
com,fr,de,es,it,be,at,cz,pl,pt,roorco.uk. - Set Max items. Start at 100 to see the shape of the data.
- Need more than ~813 results? Turn on Deep scan.
- Need descriptions or seller profiles? Tick Include item details and Enrich with seller details.
- Click Start, then download from the Storage tab as JSON, CSV, Excel, XML or HTML β or pull it from the API.
Input
Vinted Scraper has the following input options β click the Input tab for the full schema.
{"query": "vintage track jacket","country": "fr","brands": ["Nike", "Stone Island"],"colors": ["black", "navy"],"priceMin": 10,"priceMax": 60,"sortBy": "newest_first","maxItems": 1000,"deepScan": true,"includeItemDetails": false,"includeSellerDetails": false}
Brands take names. Type Nike or Stone Island the way Vinted spells them, or a Vinted brand ID such as 53 if you have one. The actor looks each one up when the run starts, and the log lists the brands it will filter on β π·οΈ Filtering on 2 brands: Nike (53), Stone Island (73306) β before it collects anything. A name that matches no brand exactly is never guessed: it is left out, the log names the closest brands Vinted has, and the Failed items tab keeps a row for it.
The power-user path is startUrls: build the search on Vinted with every facet you want β brand, size, colour, condition, category β paste the URL, and the actor turns it into API parameters for you.
Output example
Everything below is a real row from a real run β one seller's wardrobe collected with both add-ons on, 50 of the 54 columns populated. Nothing is hand-written, and the four nulls are explained where they sit: a field that is honestly empty is worth more than a field that is always plausible.
The comments mark who pays for what:
| Marker | Add-on | Charged as |
|---|---|---|
| (none) | always included | item-scraped β $0.001 |
// + Item details | Include item details | item-detailed β $0.002 on top of the row |
| second block | Include seller details | seller-enriched β $0.002 per unique seller |
{"id": 9543696765,"url": "https://www.vinted.fr/items/9543696765-on-performance-jacket-year-of-the-horse","title": "On Performance Jacket Year of the Horse","brand": "On Running","size": "S","condition": "TrΓ¨s bon Γ©tat", // Vinted's own wording, in the marketplace's language// ββ What it actually costs a buyer ββββββββββββββββββββββββββββββββββββββ"price": 180,"currency": "EUR","serviceFee": 9.7,"totalPrice": 189.7, // price + serviceFee, precomputed"shippingFrom": 3.28, // + Item details β absent from Vinted's API entirely"shippingOriginalPrice": 3.28, // + Item details β before any seller-funded discount"shippingDiscount": 0, // + Item details β original minus final; 0 here"shippingLowest30d": 3.28, // + Item details β this seller's lowest in 30 days// ββ Images ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"photo": "https://images1.vinted.net/t/05_00dcc_β¦/f800/1785574788.jpeg?s=1e0e39e7β¦","photos": [ // up to 20, main photo first{"url": "https://images1.vinted.net/t/05_00dcc_β¦/f800/1785574788.jpeg?s=1e0e39e7β¦","fullSizeUrl": "https://images1.vinted.net/tc/05_00dcc_β¦/1785574788.jpeg?s=2f603228β¦",// the largest version Vinted keeps, up to 1600 px"dominantColor": "#C8C2B7","width": 600, // dimensions of `url` only"height": 800},{ "url": "https://images1.vinted.net/t/04_026e9_β¦/f800/1785574788.jpeg?s=4f7b715cβ¦", "fullSizeUrl": "https://images1.vinted.net/tc/04_026e9_β¦/1785574788.jpeg?s=f0df8067β¦", "dominantColor": "#CAC6BC", "width": 600, "height": 800 }// β¦3 more],"photoCount": 5,// ββ Seller, on the listing row ββββββββββββββββββββββββββββββββββββββββββ"sellerId": 29391665,"sellerLogin": "avuoyten","sellerUrl": "https://www.vinted.fr/member/29391665-avuoyten","sellerPhoto": "https://images1.vinted.net/t/01_002c9_β¦/f800/1788623824.jpeg?s=2f9435f4β¦",// the seller's avatar; null when they have none"isBusinessSeller": false,// ββ Demand signals ββββββββββββββββββββββββββββββββββββββββββββββββββββββ"favouriteCount": 20,"viewCount": 0, // real 0 β wardrobe collection counts views, and// nobody has opened this one yet"favsPerDay": 0.47, // derived: favouriteCount Γ 24 Γ· listedHoursAgo"favouriteRate": null, // null: favourites per view, needs both non-zero β// viewCount is a real 0 here"isReserved": false,"isClosed": false,"isVisible": null, // null: keyword search only β this row is from a// seller's wardrobe, not a search"isHidden": false, // wardrobe collection; item details, when on, can// refine this same field from the product record"itemClosingAction": null, // null: only a closed listing has a closing reason"promoted": false,"isHeavyBulky": false,// ββ Freshness βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"listedAt": "2026-08-01T08:59:48.000Z",// derived from the main photo's upload timestamp:// replacing that photo moves this date. Still an// ISO date where the market publishes "il y a 6 semaines"."listedHoursAgo": 1012.56,// ββ Item details add-on β the product record's own fields ββββββββββββββββ"description": "SΓ©rie limitΓ©e pour lβannΓ©e du cheval.\nTrΓ¨s peu portΓ©e.",// + Item details β the differentiator. Verbatim,// newlines included, no truncation in the dataset."category": "Hommes Vestes coupe-vent",// + Item details β the full readable path"categoryId": 2551, // + Item details β the id behind that path"colors": ["Beige"], // + Item details β every colour. The page's own// structured data carries only the first one."attributes": { // + Item details β keys vary BY CATEGORY: a book"catalog": "Vestes coupe-vent", // gives author/isbn, a phone gives battery_health,"brand": "On Running", // a sofa gives material."size": "S","status": "TrΓ¨s bon Γ©tat","color": "Beige","upload_date": "Il y a 6 semaines"},"brandId": 267947, // + Item details β Vinted's own brand id"sizeId": 515, // + Item details"statusId": 2, // + Item details β the condition, as an id"pickupOnly": false, // + Item details β hand-off only, no shipping option// ββ Item details add-on β what the same fetch learns about the seller βββ"sellerFeedbackRating": 1, // + Item details β 0-1 ratio, a byproduct of"sellerFeedbackCount": 5, // fetching the product record, not the full profile the"sellerItemCount": 5, // separate `sellers` dataset below fetches on"sellerCity": "Courbevoie", // its own opt-in"sellerCountry": "France", // + Item details"sellerLastSeenAt": "2026-09-12T13:24:46+02:00", // + Item details"sellerBadges": ["ACTIVE_LISTER", "SPEEDY_SHIPPING"], // + Item details// ββ Provenance ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"country": "fr","scrapedAt": "2026-09-12T13:33:37.732Z","detailError": null // the product record arrived; a string} // here names what stopped it instead
The seller row
With Include seller details on, each unique seller is fetched once and written to a separate sellers dataset β not mixed into the listings table, because a seller row has no id, title or price and would read as blank next to your items. Real row from a private seller, fetched on 13 September 2026 β 29 of its 36 columns populated, the seven pro-contact columns empty because this seller is not a pro:
{"sellerId": 295937518,"sellerLogin": "aliwali786","sellerUrl": "https://www.vinted.fr/member/295937518-aliwali786","sellerPhoto": "https://images1.vinted.net/t/06_00602_β¦/f800/1768570494.jpeg?s=9c99d5c1β¦","feedbackReputation": 1, // 0-1 ratio, NOT a 5-star score"feedbackCount": 24,"positiveFeedbackCount": 24, // the breakdown behind the ratio: 4.8 from 6 reviews"neutralFeedbackCount": 0, // is not 4.8 from 600, and only these three say so"negativeFeedbackCount": 0,"isEmailVerified": true, // the profile's "verified info""isGoogleVerified": true,"isFacebookVerified": false,"itemCount": 86, // listed right now"totalItemsCount": 113, // listed ever"soldItemCount": 27,"boughtItemCount": 15,"sellThroughRate": 23.89, // sold / listed ever, as a percentage"bundleDiscounts": [ // 5 % off 2 items, 10 % off 3, 30 % off 5{ "minItems": 2, "percent": 5 },{ "minItems": 3, "percent": 10 },{ "minItems": 5, "percent": 30 }],"followersCount": 3,"followingCount": 9,"followingBrandsCount": 12,"city": "Lumezzane","countryCode": "IT","isBusinessSeller": false,"isOnHoliday": false,"isOnline": false,"lastSeenAt": "2026-09-12T21:55:06+02:00", // ISO 8601, not "yesterday at 21:55""about": "Beautiful collection for your home, kitchen accessoriesβ¦","businessName": null, // pro sellers only β see the example below"businessEmail": null,"businessPhone": null,"businessAddress": null,"businessCountryCode": null,"businessLegalCode": null,"businessRegistrar": null,"scrapedAt": "2026-09-12T20:23:59.689Z"}
For a pro seller, those seven columns hold what their public Vinted profile displays. A company that shows everything reads like this (values replaced):
{"businessName": "Exemple Vintage","businessEmail": "contact@example.com","businessPhone": "+33100000000","businessAddress": "12 rue de la Gare, 75001 Paris, Ile-de-France","businessCountryCode": "FR","businessLegalCode": "12345678900012","businessRegistrar": "RCS Paris"}
A sole trader shows a city but no street address, so businessAddress stays empty β and so does businessEmail or businessPhone whenever Vinted masks it on the profile as a personal contact.
Ready-made views
The Output tab opens on Overview β product photo first, then title, brand, size, condition, price and seller. Four more tabs are set up for you, so you rarely need to export before you can read anything:
| Tab | What it is for |
|---|---|
| Overview | Photo-first browse of everything you collected |
| Product details | The Include item details columns, on their own |
| Pricing & shipping | Price, buyer fee, total and shipping-from, side by side |
| Seller & demand | Who is selling, and whether the listing is moving |
| Failed items | Anything that could not be extracted, with the reason |
The Sellers dataset has three of its own: Sellers, Reputation and Activity & reach.
FAQ
Is it legal to scrape Vinted?
Our scrapers are ethical and only collect what Vinted itself displays on a public page. They never return a private seller's email address, phone number or street address. For pro sellers, Include seller details returns the business contact shown on their public Vinted profile β the trader details the EU Digital Services Act requires marketplaces to display β and nothing Vinted keeps private: a sole trader's personal email or phone stays empty. We therefore believe that our scrapers, used for ethical purposes by Apify users, are safe. However, be aware that your results could contain personal data β seller handles, cities, profile text and a sole trader's business contact are public but still personal. Personal data is protected by the GDPR in the European Union and by other regulations worldwide. You should not scrape personal data unless you have a legitimate reason. If you're unsure whether your reason is legitimate, consult your lawyers.
Which Vinted countries are supported?
All 12 live marketplaces: vinted.com, .fr, .de, .es, .it, .be, .at, .cz, .pl, .pt, .ro and .co.uk. One country per run.
Why is viewCount empty on some rows?
Vinted only serves view counts on the seller-wardrobe route, never on catalogue search. Rather than invent a number, the column is null β and favouriteCount, which is served everywhere, drives favsPerDay instead.
Can I get more than 813 results?
Yes β that's what Deep scan is for. 5,146 unique results measured on a single broad query. See the section above.
How do I monitor prices over time?
Schedule the actor daily from the Schedule tab and let each run append to the same dataset, then diff on id + price. Webhooks can push each finished run straight into your own pipeline.
Something broke, or I need a field you don't have
Open the Issues tab on this actor β it's monitored, and feature requests genuinely shape the roadmap. We also build custom variants of this actor for specific pipelines; the Issues tab is the fastest way to start that conversation.
