Vinted Sellers Database — Brands, Sold Prices, Pro Shops
Pricing
from $2.00 / 1,000 member row (from the census)s
Vinted Sellers Database — Brands, Sold Prices, Pro Shops
Every Vinted seller in the FR/IT/ES/NL/BE/PT/LU zone, ranked — who carries your brands and how far under the market median they price, what each closet holds and sold, Pro shops with their trade-register facts. Answered from a census of 3.1M listings: instant rows, no login, no proxy, no start fee.
Pricing
from $2.00 / 1,000 member row (from the census)s
Rating
0.0
(0)
Developer
Moxlade
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Who on Vinted sells the brands you buy, how far under the market they price, and what their closet actually holds — from a census of 3.09 million listings, 12.3 million reviews and 15,215 closets, not a live page fetch. Every other Vinted tool fetches a search page and forgets it. This one remembers the market: it knows what a brand sold for across the whole corpus, so a seller's asking price arrives as a ratio (0.62 = 38% under the sold median), a listing arrives with a deal_score, and a sold listing stays after Vinted stops showing it. Ranked sellers by country, the closets most like one you already buy from, Pro shops with their trade-register facts. No Vinted login, no proxy, no start fee — pay per delivered row.
Who sells these brands under the market
Give it this:
{"brands": ["Sézane","Isabel Marant","Acne Studios"],"maxPriceRatio": 0.8,"minBrandItems": 2,"minFollowers": 300,"sortBy": "ratio","includeItems": true,"maxItems": 100}
Back comes one row per seller (kind says how it was reached) — the fields below are the ones this real row carried; every row has the same 74, and a field the source did not show arrives as null, not as a zero:
{"id": 5601010,"login": "guliette","profile_url": "https://www.vinted.com/member/5601010-guliette","country_code": "FR","city": "Le Touquet-Paris-Plage","is_business": false,"followers_count": 6129,"following_count": 137,"feedback_count": 2991,"feedback_reputation": 1,"positive_feedback_count": 2955,"neutral_feedback_count": 8,"negative_feedback_count": 28,"item_count": 131,"given_item_count": 3518,"taken_item_count": 280,"is_on_holiday": false,"last_logged_on": "2026-09-20T09:58:56Z","account_gone": false,"photo_url": "https://images1.vinted.net/t/02_02268_uf81TU1vBFyHzkn1xABxDbGY/f800/1605231905.jpeg?s=fff81cffc4a19fc4c2df2f448e5999d7a8 …","has_profile": true,"counts_at": "2026-09-20T10:15:04Z","profile_at": "2026-09-20T10:15:04Z","first_seen_at": "2026-09-18T18:39:32Z","source": "stored","items_open": 131,"items_sold_seen": 0,"top_brand": "Tartine et Chocolat","price_open_median": 15,"sales_30d": 0,"currency": "EUR","summary_at": "2026-09-21T01:49:39Z","summary": "A high-volume reseller with 131 listings open (131 on record, 0 seen sold). Mostly children's clothes. Sized for childre …","summary_source": "template","categories": [{"name": "kids", "share": 0.481}, {"name": "shoes", "share": 0.099}, {"name": "women_clothing", "share": 0.092}, {"name": "home", "share": 0.061}, "… 8 more"],"category_top": "kids","section": "kids","archetype": "power_reseller","price_index": 0.71,"brand_items_open": 3,"brand_items_sold": 0,"brand_items_gone": 0,"brand_median_open": 10,"brand_ratio_open": 0.167,"brand_ratio_sold": 0.222,"brand_fav_per_item": 27.67,"brand_last_listed_at": "2026-09-17T10:24:40Z","brand_keys": {"sezane": [3, 0]},"garments": [{"name": "set", "share": 0.076}, {"name": "sweater", "share": 0.061}, {"name": "sneakers", "share": 0.061}, {"name": "pyjama", "share": 0.053}, "… 8 more"],"materials": [{"name": "denim", "share": 0.046}, {"name": "synthetic", "share": 0.008}, {"name": "wool", "share": 0.008}],"colours": [{"name": "brown", "share": 0.183}, {"name": "gold", "share": 0.015}, {"name": "orange", "share": 0.008}, {"name": "khaki", "share": 0.008}, "… 1 more"],"signals": [{"name": "lot", "share": 0.076}, {"name": "lookalike", "share": 0.008}],"tags_coverage": {"era": 0, "colour": 0.221, "signal": 0.084, "garment": 0.603, "material": 0.061},"flags": ["power", "active", "dealer"],"kind": "user","rank": 1,"found_by": "sourcing:ratio","fetched_at": "2026-09-23T14:44:34Z","items": [{"item_id": 10031573128,"title": "Maxi Totebag Sézane","brand": "Sézane","brand_key": "sezane","size": null,"condition": "very_good","price": 15,"currency": "EUR","total_price": 16.45,"favourites": 63,"views": 0,"state": "open","closing_action": null,"sold_price": null,"promoted": false,"photo_url": "https://images1.vinted.net/t/06_020cc_ZHo68dwEnjAnoiY9XS3s65V5/f800/1789640680.jpeg?s=d3b80968cbf7e3c85c35fec7ac1cc934a3d7528d","url": "https://www.vinted.fr/items/10031573128-maxi-totebag-sezane","listed_at": "2026-09-17T10:24:40Z","days_listed": 3,"ratio_open": 0.25,"ratio_sold": 0.333,"heat": 21,"price_drop_pct": null,"deal_score": 70,"category": null,"section": null,"garment": null,"material": null,"era": null,"colours": [],"signals": [],"first_seen_at": "2026-09-19T14:37:20Z","closed_seen_at": null,"gone_at": null},"… 2 more"]}
The same actor, asked differently:
- Vinted Pro accounts by followers —
{"businessOnly": true, "country": "FR", "sortBy": "followers", "maxItems": 500} - Closets like the ones you already buy from —
{"similarTo": ["113765333"], "minFollowers": 300, "maxFollowers": 20000, "maxItems": 100} - Vintage-heavy closets, trade sellers only —
{"closetShares": ["era:vintage:0.3"], "flags": ["dealer"], "country": "FR", "sortBy": "items_open", "maxItems": 200} - Who sells a brand —
{"hasBrand": "Acne Studios", "minBrandItems": 2, "sortBy": "brand_items", "maxItems": 200} - Fastest-selling closets —
{"sortBy": "sales_30d", "minOpenItems": 10, "maxItems": 200} - Most-followed members in a country —
{"country": "FR", "sortBy": "followers", "maxItems": 1000} - A member's full record by id —
{"userIds": ["15028320"]} - Full records by profile URL, as of now —
{"profileUrls": ["https://www.vinted.fr/member/15028320-nina"], "fresh": true} - Followers of an account —
{"followersOf": ["15028320"], "maxPerUser": 500, "maxItems": 500} - What the most-followed sellers in a country sell —
{"country": "FR", "sortBy": "followers", "minOpenItems": 1, "includeItems": true, "itemsState": "open", "maxItemsPerMember": 50, "maxItems": 100}
What a row carries
Who carries the brands you buy, and how far under the market. brands: ["Sézane", "Isabel Marant"] with maxPriceRatio: 0.7 returns the sellers whose asking median for those brands sits 30% or more under what the census has seen those brands sell for — spellings, diffusion lines and collaborations follow the house (ask for Sézane, get Petit Sezane too). Every row carries brand_items_open, brand_items_sold, brand_median_open, brand_ratio_sold, brand_ratio_open, brand_fav_per_item, brand_last_listed_at and the per-key counts. sortBy: ratio puts the cheapest first; minFollowers / maxFollowers pick the band.
The arbitrage number, not a guess. The yardstick is the census's own medians per brand — asking median over at least 10 open listings, sold median over at least 5 observed sales — so brand_ratio_sold: 0.44 means the seller asks 44% of what that brand actually sold for. With includeItems every listing of those brands comes with ratio_sold, ratio_open, days_listed (from the upload instant Vinted writes into the photo URL), heat (favourites per day), price_drop_pct and a deal_score that ranks them. No other Vinted source can compute a market median: it needs the whole corpus, not a search page.
What a closet actually holds. Every listing is tagged from its title in seven languages — garment (dress, jacket, sneakers, boots…), material (leather, wool, silk, denim, lace…), era (60s…2000s, y2k, vintage, retro, archive), colours, and signals (new, tags, worn once, lot, retail reference, authentic, receipt, box, rare, limited, handmade, negotiable, social, lookalike, sample). Per seller these come back as shares — garments, materials, eras, colours, signals — each next to tags_coverage so you read a share against how many titles said anything at all. closetShares filters on them: garment:dress:0.4, era:vintage:0.3, signal:lot:0.1.
More closets like the one you already buy from. similarTo takes sellers (ids, URLs or usernames — one, or the whole list an account follows) and returns the closets most like them: half the fingerprint above, half the brand overlap, every coordinate weighted by how rare it is, so a shared Zara counts for little and a shared Anine Bing counts for a lot. Each row carries similarity, tags_similarity, brand_overlap and shared_brands, so the match is auditable.
Pick the kind of seller. flags requires all of what you pick: dealer (a business, a volume seller, trade wording in the titles, or 200+ listings open), creator (followed for the person — 2,000+ followers with sales under a twentieth of them, or the titles cite social media), gifted (PR packages and samples in the titles), plus vintage, luxury, kids, power, pro, celebrity, active. Read with archetype and traits, which say which rule fired.
Vinted Pro accounts, biggest first — with the company behind each shop. businessOnly with a country returns the registered business sellers of that market ranked by followers, reviews, sales or closet size — and the trade-register facts Vinted shows on the shop's legal notice: legal_name, legal_code (SIRET, KvK, …), vat_number, entity_type, entity_country, entity_verified. The list no marketplace page gives you.
Sold listings kept. Vinted shows a sold listing in a closet for a few months and then drops it; the census keeps every listing it has seen sold with its last price and the date, so a seller's sales history grows past what the profile page shows. includeItems attaches the closet with each listing's state: open, sold, or gone.
A follower ranking Vinted does not publish. Give it a country and maxItems and back come the most-followed sellers in order, with rank, follower count, reviews, positive share and country on every row, from a census that walked the follow graph rather than guessing usernames. Or rank by sold_price, items_open, sales_30d.
Any member's full record. userIds, profileUrls or logins return the member: followers and following, reviews split into positive, neutral and negative, items listed now, items sold and bought all time, holiday mode, last login, Vinted Pro flag, photo. Turn on fresh and every one is re-read from Vinted during the run. followersOf / followingOf list an account's followers or follows, 90 per request, each row carrying that account's own counts.
Counts with dates, gone accounts kept. counts_at says when the follower and review counts were read, profile_at when the full record was, summary_at when the closet was summarised; a member Vinted no longer serves arrives with account_gone: true and the last known numbers, never silently dropped.
Nothing to configure, nothing private. No cookies, no account, no proxy field — Vinted is read anonymously through exits we maintain, paced under its own limiter, and every row says whether it came from the census (stored) or from Vinted during the run (live). The record never carries a member's about-text, birthday, real name, e-mail, address or social ids: those are dropped before anything is stored, and a member who asks is removed from every answer.
All 74 fields of a row
Every row carries all of them. A field the source did not show arrives as null, never as a zero or an empty string, and the note says when that happens.
The member
| field | type | what it holds |
|---|---|---|
id | integer | Vinted's member id. Stable; the key for deduplication and for userIds on a later run. |
login | string | The member's username as shown on their profile. |
profile_url | string | The profile page. Vinted serves the same member on every country domain. |
country_code | string | ISO country of the account (FR, DE, IT, ES, UK, …). |
city | string | City as the member entered it, when they did. Full-record rows only. |
is_business | boolean | A Vinted Pro (business) account. |
photo_url | string | Profile photo, full size. |
account_gone | boolean | True when Vinted no longer serves this member (deleted or banned) — the last known counts are kept. |
has_profile | boolean | True when the full record (sales, purchases, listings, last login) has been read for this member; false when only the counter fields are known. |
first_seen_at | string | When this member first entered the census, ISO 8601 UTC. Null on rows read live that were never stored. |
Followers, reviews, activity
| field | type | what it holds |
|---|---|---|
followers_count | integer | Followers as Vinted counted them when this row was read (counts_at). |
following_count | integer | Accounts the member follows. Full-record rows only. |
feedback_count | integer | Reviews received, all ratings. |
feedback_reputation | number | Share of positive reviews, 0–1 (0.98 = 98% positive). |
positive_feedback_count | integer | Positive reviews. Full-record rows only. |
neutral_feedback_count | integer | Neutral reviews. Full-record rows only. |
negative_feedback_count | integer | Negative reviews. Full-record rows only. |
last_logged_on | string | Last login, ISO 8601 UTC. Full-record rows only. |
is_on_holiday | boolean | Holiday mode on (listings hidden). Full-record rows only. |
counts_at | string | When followers_count, feedback_count and feedback_reputation were last read from Vinted, ISO 8601 UTC. |
profile_at | string | When the full record was last read, ISO 8601 UTC. Null without one. |
Listed, sold, bought
| field | type | what it holds |
|---|---|---|
item_count | integer | Items listed for sale right now. Full-record rows only. |
given_item_count | integer | Items sold, all time. Full-record rows only. |
taken_item_count | integer | Items bought, all time. Full-record rows only. |
items_open | integer | Listings for sale now, as the census last read the closet. Null until the closet has been read. |
items_sold_seen | integer | Listings the census has seen sold — marked sold in the closet, or gone from it while the member's sold count rose. |
sales_30d | integer | Listings the census watched go from open to sold or gone in the last 30 days — observed sales, so 0 until a closet has been read at least twice; the reviews ledger is the other 30-day signal. |
Prices, and where the closet sits in the market
| field | type | what it holds |
|---|---|---|
price_open_median | number | Median asking price of the open listings, in currency. |
price_sold_median | number | Median last listed price of the listings seen sold. |
currency | string | Currency of the prices (EUR, GBP, PLN, …). |
price_index | number | The member's asking prices against the census median for the same brands, weighted by listing count: 1.0 = in line, 0.8 = 20% under, 1.3 = 30% over. Null when no brand has three listings and a census yardstick. |
top_brand | string | The most listed brand in the closet. |
The brand block
Filled on runs that name a brand — brands (one or many, sourcing) or hasBrand. Null on every other run.
| field | type | what it holds |
|---|---|---|
brand_items_open | integer | With hasBrand: the member's listings of that brand for sale now. Null on runs without hasBrand. |
brand_items_sold | integer | With hasBrand: the member's listings of that brand the census has seen sold. Null on runs without hasBrand. |
brand_items_gone | integer | With brands: listings of those brands that left the closet between two reads (sold or withdrawn). Null otherwise. |
brand_median_open | number | With brands: the member's median asking price for those brands, open listings. Null otherwise. |
brand_ratio_open | number | With brands: the member's asking median for the brand over the census asking median (brands with >= 10 open listings). 0.7 = 30% under what others ask. Null otherwise. |
brand_ratio_sold | number | With brands: the member's asking median for the brand over the census SOLD median (>= 5 sales seen) — the yardstick that matters to a buyer. Null when the brand has too few sales seen. |
brand_fav_per_item | number | With brands: favourites per open listing of those brands — demand at the seller's prices. |
brand_last_listed_at | string | With brands: when the member last listed one of those brands (from the photo upload instant). |
brand_last_sold_at | string | With brands: when the census last saw one of those brands sold from this closet. |
brand_keys | object | With brands: per brand key, [open, sold] counts — which of the asked brands the member actually carries. |
What the closet holds
Read from the listing titles in seven languages and from the aggregate numbers. Every share is a share of the whole closet, so read it against tags_coverage, never against the other shares.
| field | type | what it holds |
|---|---|---|
summary | string | One paragraph on what the member sells — categories, brands, prices, condition, activity. Written from the numbers and the listing titles; summary_source says by which method. Null until the closet has been read. |
summary_source | string | template — composed from the structured fields; llm — written by the language model from the titles. Null without a summary. |
summary_at | string | When the closet summary was last computed, ISO 8601 UTC. |
categories | array | What the closet holds, as shares: [{name, share}] over a fixed taxonomy (women_clothing, men_clothing, kids, shoes, bags, accessories, jewellery, beauty, home, electronics, books_media, toys, sports, other). From the title lexicon, or from the language model when it has run. |
category_top | string | The largest category share. |
section | string | Who the closet is for: women, men, kids, or mixed — from Vinted's size formats and the titles. |
archetype | string | One label from the numbers: vintage_dealer, kids_seller, luxury_reseller, power_reseller, pro_seller, celebrity_closet, active_seller, light_seller. |
garments | array | Item types across the closet, [{name, share}] by share of ALL listings (dress, jacket, sneakers, boots, sweater, …); the shares of one dimension sum to its coverage, never to 1. Null until the closet was read. |
materials | array | Materials named in the titles, [{name, share}] (leather, wool, silk, denim, cashmere, lace, knit, …). |
eras | array | Decade and vintage words in the titles, [{name, share}]: 60s|70s|80s|90s|2000s|y2k|vintage|retro|archive. |
colours | array | Colour words in the titles, [{name, share}] (black, white, beige, navy, pink, …); a listing can name several. |
signals | array | Seller-wording signals in the titles, [{name, share}]: new, tags, worn_once, lot, ref (retail reference codes), authentic, receipt, box, rare, limited, handmade, negotiable, social, lookalike, sample. A high lot + ref share reads as trade stock; worn_once + receipt as a private closet. |
tags_coverage | object | Share of the closet's listings that carry a value per dimension, {garment, material, era, colour, signal} — read every share against it. |
flags | array | The traits that fired, from the numbers and the title signals: vintage, kids, luxury, power, pro, celebrity, active, creator (followed for the person: 2,000+ followers with fewer sales than a twentieth of them, or the titles cite social media), gifted (PR packages and samples in the titles), dealer (a business or volume seller, trade wording, or 200+ open listings). Null until the closet was read. |
How like the closets you asked for
Filled on similarTo runs only.
| field | type | what it holds |
|---|---|---|
similarity | number | similarTo runs only: how like the asked closets this one is, 0-1 — half the tag fingerprint, half the brand overlap, every coordinate weighted by how rare it is across the census (a shared Zara counts for little, a shared Anine Bing for a lot). Null on every other run. |
tags_similarity | number | similarTo runs only: the fingerprint half on its own — garment, material, era, colour and wording shares plus the archetype and flags. |
brand_overlap | number | similarTo runs only: the brand half on its own — how much of the asked closets' brand mix this closet also carries, weighted by brand rarity. |
shared_brands | array | similarTo runs only: the brands behind brand_overlap, rarest-first — the reason this closet matched. |
Vinted Pro: the company behind the shop
From the shop's own legal notice on Vinted. Null for private members, and for a Pro shop that publishes no notice.
| field | type | what it holds |
|---|---|---|
legal_name | string | Vinted Pro rows: the registered name behind the shop as Vinted shows it on the shop's legal notice — the company for a legal business or organisation, the trader's registered name for a sole trader. Null for private members. |
legal_code | string | Vinted Pro rows: the company's registration number (SIRET in France, KvK in the Netherlands, …). |
vat_number | string | Vinted Pro rows: the company's VAT id, when registered. |
entity_type | string | Vinted Pro rows: legal_business, sole_trader, organization, … as Vinted classifies the entity. |
entity_country | string | Vinted Pro rows: ISO country of the company's registration. |
entity_verified | boolean | Vinted Pro rows: Vinted verified the company's identity. |
The listings and the history
| field | type | what it holds |
|---|---|---|
items | array | With includeItems: the member's listings as the census holds them — [{item_id, title, brand, brand_key, size, condition, price, currency, total_price, favourites, views, state (open|sold|gone), closing_action, sold_price, promoted, photo_url, url, listed_at, days_listed, ratio_open, ratio_sold, heat, price_drop_pct, deal_score, category, section, garment, material, era, colours, signals, first_seen_at, closed_seen_at, gone_at}]. On a brands run only the listings of those brands. ratio_sold = price / the brand's census sold median; deal_score sorts a brand's open listings (higher = better); garment…signals are the per-listing tags from the title lexicon. Billed item per element. |
history | array | With includeHistory: every version of the member's record — [{seq, fetched_at, changed: {field: [old, new]}}] — and the count observations, newest first. |
How the row was reached
The same fields on every row, so a mixed run stays auditable: what kind of row it is, where it came from, and when.
| field | type | what it holds |
|---|---|---|
kind | string | user for a ranked member, profile for a member read by id/URL/login, follower or following for a list row. |
rank | integer | Position in the ranking for user rows (1 = most), or in the list for list rows. Null on profile rows. |
of_user_id | integer | List rows: the member whose followers or followed accounts this row belongs to. |
found_by | string | How the row was reached: ranking:<sort>[:<country>], id:<id>, login:<login>, url, followers_of:<id>, following_of:<id>. |
source | string | stored — answered from the census; live — read from Vinted during this run. |
fetched_at | string | When this row was produced, ISO 8601 UTC. |
Ways to run it
Source a brand under the market. Set brands (one or many, as Vinted spells them), maxPriceRatio (0.7 = 30% under the census sold median), the follower band with minFollowers / maxFollowers, a country if the seller must be in one, sortBy: ratio, and includeItems to get the listings of those brands with a deal_score on each. Rows are sellers with the brand block. Ready-made: Who sells these brands under the market.
Find closets like the ones you already buy from. Put the sellers in similarTo — ids, profile URLs or usernames, one or hundreds (the whole list an account follows works). Back come the closets most like them, with similarity, tags_similarity, brand_overlap and shared_brands on every row. Narrow with minFollowers / maxFollowers, country, flags or closetShares; the targets themselves are never returned. Ready-made: Closets like the ones you already buy from.
Filter by what the closet holds. closetShares takes dimension:value:min — garment:dress:0.4 (at least 40% dresses), era:vintage:0.3, material:leather:0.2, signal:lot:0.1 (trade wording) — and several are combined with AND. flags requires all of what you pick: dealer, creator, gifted, vintage, luxury, kids, power, pro, celebrity, active. Both work on their own, with brands, or with similarTo. Ready-made: Vintage-heavy closets, trade sellers only.
Find who carries a brand. Set hasBrand to the brand as Vinted spells it (case does not matter), minBrandItems to skip one-off listings, sortBy: brand_items to rank by how many they hold; add businessOnly: false to keep private closets only. Each row carries brand_items_open and brand_items_sold. Ready-made: Who sells a brand.
See what a seller sells. Add includeItems to any run: each row gets items — up to maxItemsPerMember listings, itemsState open / sold / gone / all — and the summary fields fill in for every seller whose closet has been read. Ready-made: What the most-followed sellers in a country sell.
List the Pro sellers of a market. Set businessOnly, a country, sortBy (followers, feedback, items_open, sales_30d) and maxItems. Rows come ranked from 1, up to 10,000 per run. Ready-made: Vinted Pro accounts by followers.
Rank sellers by followers, sales or closet. Leave the member and list fields empty, set country (or none for every country), sortBy, minFollowers and maxItems. Ready-made: Most-followed members in a country and Fastest-selling closets.
Read members by id, URL or username. Put ids in userIds, profile links in profileUrls, usernames in logins — mix them freely. A member the census holds answers at once as a user row; one it has never seen is read from Vinted now and returned as a profile row (up to 50 live reads per 50 members). fresh re-reads every member from Vinted in this run. Ready-made: Full records by profile URL.
List an account's followers or the accounts it follows. Set followersOf or followingOf (ids, usernames or URLs) and maxPerUser. Lists are read 90 rows at a time in Vinted's own order and every row carries the listed account's follower count, reviews and country. Ready-made: Followers of an account.
Watch it move. Save a ranking run as a task and schedule it: each run is the census as of that day, counts_at on every row. For exact as-of-now numbers on a fixed set of members, schedule a userIds run with fresh on.
Everything you can ask for
Pick the sellers
Leave the member fields below empty and these rank the census: who comes back, in what order, how many.
| input | accepts | default | what it changes |
|---|---|---|---|
country | string | — | Ranking mode: two-letter ISO country of the seller's account. The census covers the FR/IT/ES/NL/BE/PT/LU shipping zone today (FR, IT, ES, NL, BE, PT, LU). Empty = every country. |
sortBy | followers / feedback / sold / following / sold_price / items_open / sales_30d / brand_items / ratio | "followers" | Ranking mode: the order of the user rows. sold and following rank members whose full record has been read; sold_price, items_open and sales_30d rank members whose closet has been read; brand_items ranks the members who carry hasBrand by how many listings of it they have. ratio orders a brands run by brand_ratio_sold, cheapest first. |
minFollowers | integer | 0 | Ranking mode: skip members below this many followers. |
maxFollowers | integer | — | Ranking and sourcing modes: skip members above this many followers — the band where the small creators live (e.g. 300–50,000). |
minOpenItems | integer | — | Ranking mode: skip members with fewer listings for sale right now (needs the closet to have been read). |
businessOnly | boolean | false | Ranking mode: keep only business (Vinted Pro) accounts. |
archetype | "" / vintage_dealer / kids_seller / luxury_reseller / power_reseller / pro_seller / celebrity_closet / active_seller / light_seller | "" | Ranking mode: keep members of one type, as the census labels them from the numbers (needs the closet to have been read). |
section | "" / women / men / kids / mixed | "" | Ranking mode: keep closets whose listings are mostly for women, men or children. |
category | "" / women_clothing / men_clothing / kids / shoes / bags / accessories / jewellery / beauty / home / electronics / books_media / toys / sports / other | "" | Ranking mode: keep members whose closet summary puts at least a quarter of the listings in this category. |
Brands, and the price against the market
The reselling and arbitrage half: who carries a brand, and how their asking median compares with what the census has seen that brand sell for.
| input | accepts | default | what it changes |
|---|---|---|---|
brands | array | — | Sourcing mode: who carries any of these brands — open or seen sold — with the brand block on every row: brand_items_open, brand_items_sold, brand_median_open (the seller's asking median for them), brand_ratio_sold (that median over the census SOLD median: 0.7 = 30% under what the brand fetches), brand_ratio_open, brand_fav_per_item, brand_last_listed_at, brand_keys. Names as written on Vinted; spellings, lines and collaborations follow (Sézane also finds Petit Sezane). Combine with maxPriceRatio, minBrandItems, minFollowers/maxFollowers, country; sortBy = ratio (cheapest first), brand_items or followers. With includeItems, the items array holds only the listings of these brands, each with ratio_sold and deal_score. |
maxPriceRatio | number | — | With brands: keep sellers whose asking median for the brands is at most this many times the census SOLD median — 0.7 keeps sellers 30% or more under what the brands actually fetch. Sellers of brands with fewer than 5 sales seen have no ratio and are left out. |
hasBrand | string | — | Ranking mode: keep sellers whose closet holds this brand — open now or seen sold — however small a share of their closet it is (case-insensitive, e.g. Acne Studios). Adds brand_items_open and brand_items_sold to each row. brand is the other filter: the seller's single most-listed brand. |
brand | string | — | Ranking mode: keep members whose most listed brand is this one (case-insensitive, e.g. Zara). |
minBrandItems | integer | 1 | With hasBrand: skip sellers with fewer listings of the brand (open + seen sold). |
What the closet holds, and who the seller is
Filters over the tags read from every listing title and the traits computed from the numbers, plus lookalike search.
| input | accepts | default | what it changes |
|---|---|---|---|
closetShares | array | — | Share floors on what the closet holds, as dimension:value:min — garment:dress:0.4 (at least 40% dresses), era:vintage:0.3, material:leather:0.2, colour:black:0.3, signal:lot:0.1 (trade wording), category:kids:0.5. Several are combined with AND. Read them against tags_coverage on the row: shares are over the whole closet, so a dimension the titles rarely name has a low ceiling. |
flags | array | — | Every flag you pick must be present. creator — followed for the person (2,000+ followers with sales under a twentieth of them, or the titles cite social media). dealer — a business, a volume seller, trade wording (lots, retail reference codes), or 200+ listings open. gifted — PR packages and samples in the titles. vintage, luxury, kids, power, pro, celebrity, active — the closet's own shape. |
similarTo | array | — | Sellers whose closet you want matched — ids, profile URLs or usernames. Back come the members whose closets are most like theirs: half the fingerprint (what they sell, in what material, which era, which colours, which wording), half the brand overlap. Each row carries similarity, tags_similarity, brand_overlap and shared_brands. The targets themselves are never returned. |
Read members you name
Give ids, profile links or usernames and the run answers for those members instead of ranking the census.
| input | accepts | default | what it changes |
|---|---|---|---|
userIds | array | — | Members to read by Vinted id (the number in a profile URL, e.g. 15028320). Stored members answer from the census; others are read from Vinted now. Billed user for stored rows, profile for live ones. |
profileUrls | array | — | Members to read by profile URL (https://www.vinted.fr/member/15028320-nina). Any Vinted country domain. |
logins | array | — | Members to read by username (exact match, case-insensitive). Resolving a username Vinted knows but the census does not costs one live request. |
followersOf | array | — | Members whose followers to list — ids, usernames or profile URLs. One follower row per follower, with the follower's own follower count, reviews and country, up to maxPerUser each. |
followingOf | array | — | Members whose followed accounts to list — ids, usernames or profile URLs. One following row per followed account, up to maxPerUser each. |
maxPerUser | integer | 1000 | Lists mode: stop each followers / following list after this many rows (read 90 at a time). |
fresh | boolean | false | Members mode: read every requested member from Vinted during this run, even when the census holds them, so counts are as of now. Every row is then billed profile. |
Attach the listings and the history
Optional blocks on each row. Listings are charged per listing delivered; the history is not.
| input | accepts | default | what it changes |
|---|---|---|---|
includeItems | boolean | false | Attach the member's listings (items, up to maxItemsPerMember) to every member row — title, brand, size, condition, price, favourites, sold/open/gone state, sold price, photo. Billed item per listing. |
itemsState | all / open / sold / gone | "all" | With includeItems: which listings to attach. |
maxItemsPerMember | integer | 100 | With includeItems: stop each member's list after this many listings. |
includeHistory | boolean | false | Attach every version of the member's record (which fields changed, when) and the follower/review count observations (history). Not billed separately. |
Run size
The spending cap: nothing is charged for a row that is not in your dataset.
| input | accepts | default | what it changes |
|---|---|---|---|
maxItems | integer | 100 | Stop after this many rows across the whole run. With no start fee this is also your spending cap. |
Before you run it
How is this different from the other Vinted scrapers? They fetch, this remembers. Every Vinted actor on this store — 40 of them when we read the lane on 2026-09-23 — answers by loading a Vinted page while your run is going: a search, a catalogue, a closet. That gives you what Vinted is showing at that second, and nothing to compare it with. This one answers from a census of 3.09M listings, 12.3M reviews and 15,215 closets that has been kept since 2026-09-18, so it can say what a brand actually sold for, hand you a seller's asking price as a ratio to that median, rank the sellers of a market, and still show a listing Vinted stopped displaying months ago. The trade-off is the honest one: it does not search the live catalogue, and a number is as fresh as the date the row carries (counts_at, summary_at, fetched_at).
Which countries does the census cover? The FR/IT/ES/NL/BE/PT/LU shipping zone: sellers whose account is in France, Italy, Spain, the Netherlands, Belgium, Portugal or Luxembourg. Vinted shows each market only the sellers of its own zone, so the census is walked one zone at a time; other zones are added as they are walked, and the country filter tells you which are present. Members by id, URL or username and follower lists work for any market.
Does it need a Vinted account or a proxy? No. Vinted is read logged out, through exits we maintain, and nothing is stored on your side. There is no cookie or proxy field because there is nothing for you to supply.
How complete is the ranking? The census is built by sampling members' followed lists across Vinted's whole id space; an account with N followers is found in proportion to N, so the top of the ranking is complete and the long tail is a sample. Every count on a ranked row is the number Vinted served on the date in counts_at, not an estimate. Members with a full record (has_profile) also carry sales, purchases and last login; sortBy: sold and following rank those only.
Why are some rows stored and others live? stored rows come from the census and are billed as user; live rows were read from Vinted during your run and are billed as profile — a member the census had not seen, or any member when fresh is on. A list row is always read live and billed as follower. When Vinted cannot be reached for a member you asked for, the stored row is returned instead and billed as user, and the status message says so.
Which country domain does a profile URL need? Any. A member is the same record on every Vinted domain (vinted.fr, .de, .it, .es, .co.uk, .com, …); profile_url on a row uses vinted.com. Usernames are matched exactly, case-insensitive.
Where do the listings and the summary come from? From the seller's public closet as the census reads it — open listings and the ones Vinted still shows as sold — in passes that start from the most-followed sellers; summary_at on the row says when the closet was last summarised, and a seller whose closet has not been read yet has these fields null. The summary paragraph and the categories are written from the listing titles and the aggregate numbers, never from who the person is.
How is a sale detected? Three ways, cross-checked: Vinted marks the listing sold in the closet; the listing leaves the closet while the member's all-time sold count rose by the same number; a review lands. A listing seen sold keeps its last listed price as sold_price and the date it was first seen sold. Listings that vanished without a matching sale are gone, not sold.
Is this legal, and what about personal data? Everything here is read from what Vinted serves anyone, logged out: no account, no cookie, nothing behind a login, and the reading is paced under Vinted's own limiter. What is kept is what a marketplace listing is — the shop, its listings and prices, the counts, the reviews — plus, for a Vinted Pro shop, the trade-register facts the shop itself publishes in its legal notice. A member's about-text, birthday, real name, e-mail, address and social ids are dropped before anything is stored: they are not in the census and cannot be returned by any input. What you may do with a public marketplace record depends on your purpose and your jurisdiction, and that part is yours, not ours.
Can a member be removed from the data? Yes. A request to the support address removes the member from every answer this actor and the census give, and drops the stored record.
How do I get the rows out? They land in the run's dataset: download them as JSON, CSV, Excel or XML from the run page, or read the same rows over the Apify API (the API tab has the call for this Actor). Save a run as a task, schedule it, and point the store's integrations at it — webhooks, Zapier, Make, Slack, Google Drive — or let an agent call the Actor over MCP. Every row carries a stable id and profile_url, so repeated runs deduplicate against your own table.
Who makes this, and what else is there? Moxlade — corpora your agent can ask. Its other actors are the Upwork freelancer census and the Reddit scraper; its MCP endpoint for Upwork buyer intelligence is buyer.moxlade.com.
What it costs
Charged per row, and only once the row is in your dataset, so maxItems, maxPerUser and maxItemsPerMember together are your spending cap. No start fee, no minimum, and a run that returns nothing costs nothing. A seller the census already holds is a user row; a member read from Vinted during your run (fresh, or one the census had never seen) is a profile row; a followers or following list row is a follower row; each listing attached with includeItems is an item. The closet summary fields on a row (top brand, prices, categories, the paragraph), the brand counts and includeHistory cost nothing extra. A worked example: 500 sellers with 50 listings each is 500 x $0.002 + 25,000 x $0.001 = $26.00; the same 500 sellers without their listings is $1.00; 1,000 follower-list rows is $1.00.
| event | what one event is | per 1,000 |
|---|---|---|
user | One member row answered from the census — a ranked member, or a member you asked for that the census already holds. Charged only after the row is in your dataset. | $2.00 |
profile | One member's full record read from Vinted during your run — a member the census had not seen, or any member with fresh on. | $6.00 |
follower | One row of a followers or following list (followersOf / followingOf), with that account's own follower count, reviews and country. | $1.00 |
item | One listing attached to a member row (includeItems) — title, brand, size, condition, price, state, sold price, photo. Charged per listing delivered. | $1.00 |
Who asks this
Resellers who buy to resell — the sellers who carry your brands with their asking price as a ratio to what those brands sold for, the listings of those brands scored, and the closets most like the suppliers you already buy from.
Arbitrage and price-watching — a market median per brand from 3.09M listings, so a listing arrives as ratio_sold, days_listed, heat and a deal_score instead of a price you have to judge alone; re-run it on a schedule and the numbers move with the market.
Companies that sell to Vinted Pro sellers — the registered business accounts of a market as a typed list, biggest first — followers, reviews, listings open, sales in 30 days, what they sell, legal name and VAT — to size and rank a prospect list.
Brand and marketplace teams — who lists a brand at volume and at what price against the market, the most-followed sellers in a country, and the follower distribution across the top of the marketplace.
Data pipelines and AI agents — one call, JSON rows with a stable id, profile_url and dated counts, no browser and no login to keep alive.
Questions
Every figure on this page was measured on our own runs or read from our own tables, on the date given next to it.