Vinted Deal Monitor
Sweeps one Vinted search each run, computes the query's live median price, and delivers the listings priced far below it - each deal with the median and...
Sweeps one Vinted search each run, computes the query's live median price, and delivers the listings priced far below it - each deal with the median and discount percent attached. Scheduled hourly it is an underpriced-listing alert feed. Finds, never auto-buys. No seller data.
$3.99 / 1,000 · 100.0% success over 29 public runs in the last 30 days.
Run it on Apify → Free to try - runs bill per result on your own account.
What you give it
Every field is optional unless marked; sensible defaults do the rest.
| Field | Type | What it does | Default |
|---|---|---|---|
searchQuery |
string | The market slice to hunt deals in, exactly as you would type it in Vinted's search box, e.g. "nike air max 90". Narrower queries give sharper medians. | nike air max 90 |
domain |
string | Which national Vinted site to watch. | fr |
priceMin |
integer | Watch only listings at or above this price (site currency) - the standard way to narrow a broad query. | - |
priceMax |
integer | Watch only listings at or below this price (site currency). | - |
stateStoreName |
string | Named store remembering which listings were already evaluated, so scheduled runs alert each deal once. Use a different name per watched query. | vinted-deal-monitor-state |
resetState |
boolean | Forget the tracked listings and re-seed the baseline on this run. | False |
maxItems |
integer | Upper bound on deals delivered per run. | 100 |
discountThresholdPct |
integer | A listing must be at least this far below the query's current median to count as a deal. 30 catches real bargains without noise. | 30 |
priceDropAlerts |
boolean | Also alert when a listing this profile has seen before reappears cheaper. Vinted shows no price history - the monitor's memory is how you get the old price. | True |
minDropPct |
integer | Ignore price drops smaller than this - keeps tiny cuts from flooding the alerts. | 10 |
samplePages |
integer | Catalog pages swept per run (1-10). Page 1 carries the new listings; extra pages steady the median. | 3 |
reportFailures |
boolean | When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. | True |
What you get back
One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.
A real result row from a recent run:
{
"alertType": "deal",
"brand": "adidas",
"businessSeller": false,
"condition": "Neuf avec étiquette",
"currency": "EUR",
"discountPct": 29,
"favouriteCount": 0,
"imageUrls": [
"https://images1.vinted.net/t/06_00270_7XSHCUStPSgwgoigebiyXbFi/f800/d7ed0afb.webp?s=fee7be3ae27cb21faea62ca834adab73f7a85ca9"
],
"itemId": "10407371853",
"priceCents": 2500,
"promoted": false,
"queryMedianCents": 3500,
"serviceFeeCents": 195,
"size": "17",
"title": "Adidas samba",
"totalPriceCents": 2695,
"url": "https://www.vinted.fr/items/10407371853-adidas-samba",
"viewCount": 0
}
| Field | Type | Meaning |
|---|---|---|
itemId |
string | Vinted item ID. |
url |
string | Direct link - speed matters, deals go fast. |
title |
string | Listing title as posted. |
brand |
['string', 'null'] | Brand line from the card. |
size |
['string', 'null'] | Size as displayed. |
condition |
['string', 'null'] | Condition as displayed, site language. |
priceCents |
['integer', 'null'] | Asking price in minor units. |
currency |
['string', 'null'] | Site currency. |
serviceFeeCents |
['integer', 'null'] | Buyer protection fee. |
totalPriceCents |
['integer', 'null'] | Total buyer price incl. fee. |
businessSeller |
boolean | Professional seller flag. Identity never collected. |
promoted |
boolean | Paid placement flag. |
favouriteCount |
integer | Demand signal. |
viewCount |
integer | View count when reported. |
imageUrls |
array | Photos (up to 8). |
queryMedianCents |
integer | The query's current median asking price the deal was scored against. |
discountPct |
integer | How far below the median this listing is priced, percent. |
alertType |
string | 'deal' (below the query median) or 'price-drop' (a watched listing got cheaper). |
previousPriceCents |
number | The price this listing had when previously seen - price-drop rows only. |
priceDropPct |
number | How much cheaper than the previous sighting, in percent. |
Health
100.0% success over 29 public runs in the last 30 days. Live record, failures included: status page.
Full documentation, examples and the AI-assistant prompt live on the store page.