Vinted Underpriced Deals — Cheap and Wanted, in One Call
Pricing
from $20.00 / 1,000 search scanned for deals
Vinted Underpriced Deals — Cheap and Wanted, in One Call
Which Vinted listings are cheap right now? Builds the asking-price distribution for your search on one country's site, scores every listing against it, and returns those below your percentile, ranked by favourite count. Promoted listings are kept out of the basis. A mixed search is refused.
Pricing
from $20.00 / 1,000 search scanned for deals
Rating
0.0
(0)
Developer
h ichi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Every Vinted scraper on the Store will hand you a page of listings. None of them will tell you whether the listing in front of you is cheap, and none of them will tell you whether anyone else wants it. This one answers both in a single call: it builds the asking-price distribution of your search on one country's site, returns the listings below your percentile, and ranks them by demand.
Read this before you read the numbers
Vinted has no sold data. Its catalog serves live, unsold listings only — there is no sold book to scrape, buy or infer. So the basis here is the asking-price distribution of the search itself, exactly as our AutoScout24 deal finder does for cars.
That means every number in the output answers "cheap relative to what else is being asked right now" and not "cheap relative to what things sell for". discountBasis says so on the summary and on every single deal record. If you need realized sale prices, this is the wrong marketplace, not the wrong Actor.
How a deal is picked
- Page the catalog for your search term with
order=relevance, pushingpriceMin/priceMaxto Vinted so the basis and the candidates are the same sample. - Drop the promoted placements, the duplicates and the priceless rows (see below) — what is left is the basis.
dealCutoffPrice= the price at yourdealPercentileof that basis.20means "in the cheapest fifth of what is on offer".- Everything at or below the cutoff is a deal — then ranked by
favouriteCount, not by how cheap it is.
Cheap alone is worthless. The cheapest listing in a fashion search is usually the least wanted one. Measured on nike air max / vinted.fr: the five cheapest "deals" in an unbounded search were a sports bra, a sweatshirt, a pair of shorts and two pairs of shoes; the five most favourited deals were all shoes. Demand is what separates a bargain from a thing nobody wants at any price.
The ranking is auditable, not asserted: demand.favouriteCountBasis and demand.favouriteCountDeals ship with every summary, and every deal carries its own favouriteCount, favouritePercentile and demandRank.
view_countis returned by Vinted's catalog endpoint and is always 0 — measured over ~1,800 items across seven searches and two country sites. It is therefore not part of the ranking, anddemand.viewCountAvailableisfalserather than the Actor quietly ranking on a field of zeroes.
Two prices, and which one the percentile is on
Vinted quotes price (what the seller asks) and total_item_price (what the buyer pays, i.e. asking + Buyer Protection — measured affine, about 0.70 + 5%). The percentile, the cutoff and the spread guard are all computed on the asking price, which is what the search page shows and what "underpriced" means. Both are emitted on every deal, together with buyerProtectionFee, so you can see the difference before you commit.
Two guards, because a basis can lie in two ways
Too thin. minComps (default 30) refuses a search whose percentile would rest on a handful of prices.
Too many kinds of thing. maxCompSpread checks the p90 / p10 ratio of the sampled asking prices and refuses a search that is mixing product tiers rather than describing one market. p90/p10 rather than p75/p25 because a fashion keyword is a wide market by nature and the mixing shows up in the tail. Measured on vinted.fr, 2026-08-10:
| search | p90 / p10 | what it is |
|---|---|---|
levis 501 | 3.3x | one product |
nike air max, priceMin: 30 | 2.5x | one product, tier-bounded |
nike air max, unbounded | 5.3x | shoes plus tracksuits, leggings and bags |
zara robe | 5.7x | many dress tiers |
chanel | 15.0x | a keychain and a handbag in one median |
leica m6 | 204x | a lens cap and a camera in one median |
The fix is named in the refusal itself:
{ "keywords": ["nike air max"], "domain": "fr", "priceMin": 30 }
The band is pushed to Vinted, so it bounds the basis and the candidates together.
In both cases the run returns basisUsable: false with the reason, the ratio and the input that fixes it — and is not charged.
What the guards cannot fix is printed, not hidden
Every summary carries a limitations array. It will tell you, in the run's own numbers:
totalFoundsaturates at 960. Vinted stops counting and paging at 10 pages of 96 (page 11 is an HTTP 400).nike air maxreports 960 and so doeschanel, whileleica m6reports 218. 960 is a ceiling, not a count —totalFoundCapped: truemeans the real supply is unknown and larger, and your sample is the first pages by relevance rather than a random draw.- Promoted listings are excluded, and how many. Measured over all 880 distinct
nike air maxlistings on vinted.fr: promoted median EUR 40 (n=281) against organic median EUR 20 (n=599) — and 66% of the first three relevance pages were promoted, against 32% over all ten. Sampling paid placements into the basis lifts the median and manufactures discounts out of nothing, so they are dropped from both sides and counted inexcluded.promoted. The sampler pages deeper to make the shortfall up. - Duplicates, malformed rows and priceless rows, each counted separately in
excluded. A filter whose count you cannot see makes the remainder look like the whole. - A pushed price band truncates the basis, so listings sitting on the floor of the band read as the 0th percentile.
- A keyword is not a product.
sampleMixshows the brands and conditions the percentile was actually built on.
Output
One deal_summary per search term — the basis (price with p10/p25/median/p75/p90, plus totalItemPrice), the guards and their verdict, the sample and everything excluded from it, the cutoff, the deal count, the demand statistics behind the ranking, bestDeal (most wanted) and cheapestDeal (lowest price — deliberately a different field). Optionally one deal record per listing under the cutoff, ranked by demand.
Country sites: vinted.com (USD), .fr .de .es .it .nl (EUR), .co.uk (GBP), .pl (PLN). The domain decides both the market and the currency, so a basis is never built across countries. USD figures are added alongside the native currency.
Pricing
From $0.02 per search term, $0.002 per individual deal. A search with an unusable basis is never charged.
Read-only public catalog data over HTTP/JSON — no login, no browser, throttled to one page per 1.5 s. Seller identities are never emitted. Nothing is stored between runs.