Vinted Scraper: New Listing & Price Drop Alerts avatar

Vinted Scraper: New Listing & Price Drop Alerts

Pricing

from $2.28 / 1,000 listing returneds

Go to Apify Store
Vinted Scraper: New Listing & Price Drop Alerts

Vinted Scraper: New Listing & Price Drop Alerts

Vinted scraper for 22 countries: up to 2,000 listings per search, past the 96-per-page cap. Monitoring returns new listings, price drops and gone ones, a Vinted sold items tracker with sell-through rate and cross country price gap in euros. Brand, size, condition, link. No login. Pay per listing.

Pricing

from $2.28 / 1,000 listing returneds

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Watch a search, get only what's new. New listings and price drops since your last run, charged per new row, free on quiet days. Schedule it hourly and send it to Discord, Slack, Google Sheets or n8n.

This actor searches Vinted the way you do in the app: type keywords (or paste a search link with your filters), pick one or more of Vinted's 22 European country sites, and get one clean row per listing with the title, price, the total a buyer pays with Vinted's buyer protection fee, a euro conversion, brand, size, condition, favourites, the main photo and the link. Turn on monitoring and each run returns only the listings that appeared, or got cheaper, since the previous run, and, if you ask, the ones that disappeared: a Vinted sold items tracker with a running sell-through rate and a cross country price gap on every row.

Who it's for

  • Resellers and vintage flippers who lose good pieces to whoever refreshes the app fastest. A watchlist on "arcteryx beta" or a pasted search with your size and price cap, run every hour, puts new listings in your Discord or Telegram without keeping a phone open.
  • Sniper-bot and alert-bot builders who are tired of maintaining their own scraper each time Vinted changes its site. You get a stable JSON row per listing across every country and keep your bot logic.
  • Price researchers and brand teams who want to know what a model really sells for on the second-hand market in France versus Poland versus the UK, in one currency.
  • Marketplace analysts and trust teams tracking business (Vinted Pro) sellers listing a brand, without collecting who those sellers are.

Why this one

  • Past Vinted's 96-per-page and 960-per-search ceiling: price-band fan-out returns up to 2,000 listings per search per country.
  • Every Vinted country in one run. One keyword line runs on vinted.fr, .de, .pl, .co.uk and the rest of the sites you pick. Rows carry the country, the local currency and priceEur at the European Central Bank's daily reference rate, so a cross-border price comparison is one sort.
  • Monitoring built in, not bolted on. deltaMode remembers what each watchlist has seen per country. New listings and price drops (item price, with your own minimum drop %) come back; everything else is removed before billing. A quiet run returns one summary row and costs only the start fee.
  • A sold signal, not just asking prices. Listings that disappear from a watched search come back as gone, flagged gonePresumedSold when they were cheap and stayed up for more than one run, and every row carries the watchlist's sell-through rate and the search's median price in euros. No extra requests: it is worked out from the listings each run already reads.
  • Seller privacy by default. You get private or business and an anonymous seller hash to group listings by seller. No usernames, no profile links, no contact details.
  • Listing details when you want them. Description (with emails and phone numbers removed), colour, upload time, reserved flag, seller rating and review count, billed separately and only when they arrive.

Countries

Keywords run once per country you list in countries. A pasted Vinted link always runs on its own site.

CodeSiteCurrencyCodeSiteCurrency
frvinted.frEURptvinted.ptEUR
devinted.deEURukvinted.co.ukGBP
itvinted.itEURievinted.ieEUR
esvinted.esEURsevinted.seSEK
nlvinted.nlEURfivinted.fiEUR
bevinted.beEURdkvinted.dkDKK
atvinted.atEURhuvinted.huHUF
plvinted.plPLNrovinted.roRON
czvinted.czCZKhrvinted.hrEUR
skvinted.skEURgrvinted.grEUR
ltvinted.ltEURluvinted.luEUR

Minimum and maximum price are applied in each site's own currency (euros on vinted.fr, zloty on vinted.pl). Brand, size and condition come back in the site's language, exactly as Vinted shows them ("Très bon état", "Bardzo dobry", "Very good").

What you get

By default each listing is its own row. Every row also repeats the search it came from.

FieldWhat it is
listingId, url, titleVinted's listing ID, the listing link and its title
price, currencyThe seller's price in the site's currency
totalPriceWhat a buyer pays including Vinted's buyer protection fee (shipping not included)
priceEurprice in euros at the ECB daily reference rate (same number on euro sites)
brand, size, conditionAs shown on Vinted; size is empty for items without one, such as bags (about 4% of a clothing search)
favouriteCount, isPromotedFavourites so far, and whether the listing is a paid promotion
sellerType, sellerHashprivate or business, and an anonymous 16-character seller hash
imageUrlLink to the main photo (links only, nothing is downloaded)
countryWhich Vinted site the listing is on
isNew, changeType, firstSeenAtMonitoring: new, price-drop, gone or seen, and when this watchlist first saw it
lastSeenAt, daysListedMonitoring: the last run that saw the listing, and the days between first and last sighting
previousPrice, priceDropPctMonitoring: the price last seen and the drop in %, on price-drop rows
lastPrice, gonePresumedSoldMonitoring, on gone rows only: the last price seen, and the presumed-sold flag (see below)
medianPriceEur, countryMedianPriceEurMonitoring: median euro price of everything the run read for this search, across all countries and in this row's country
priceGapPctMonitoring, 2+ countries: this row's euro price against the cross-country median, in % (negative = cheaper)
sellThroughRateMonitoring: listings that went gone / listings ever tracked by this watchlist, 0 to 1
searchQuery, searchCountries, listingCount, totalAvailable, truncatedThe search summary
newCount, priceDropCount, goneCount, monitorStatusMonitoring summary: NEW_ROWS, NO_NEW_ROWS or SEEDED
description, color, postedText, postedAt, sellerRating, sellerReviewCount, isReservedOnly with "Fetch listing details" on

Three dataset views are ready in the Console: Overview, Monitoring (the change type, previous price and drop % next to each listing) and Sold signals (gone listings, presumed-sold flag, days listed, sell-through rate and price gap).

Not available anywhere on Vinted's public pages, so not in this actor: the seller's city, an exact upload timestamp (Vinted only says "2 hours ago", which postedAt converts approximately for English, French, German, Italian, Spanish, Dutch, Portuguese and Polish), and confirmed sales or sold prices. The sold signal below is inferred, never confirmed.

Monitoring: new listings and price drops

The recipe most buyers use:

  1. Put your search in searches (keywords, or paste the link of a Vinted search with your brand, size and price filters), pick countries, and turn on Only return listings that are new, or cheaper, since the last run (deltaMode).
  2. Optionally turn on Seed silently so the first run remembers today's listings without sending them all to your webhook.
  3. Save it as a Task and add an hourly Schedule in Apify.
  4. Add a webhook or integration on the Task for Run succeeded: Discord or Slack webhook, Telegram bot via n8n or Make, a Google Sheets append, or an HTTP call to your own bot. Each run's dataset holds only the new and price-drop rows.
{
"searches": ["carhartt detroit jacket"],
"countries": ["fr", "de", "nl"],
"maxPrice": 120,
"deltaMode": true,
"skipFirstRun": true,
"alertOnNew": true,
"alertOnPriceDrop": true,
"minPriceDropPct": 10
}

How it decides:

  • New means this watchlist has never returned that listing ID before, on that country site.
  • Price drop means the item price (not the total with fee) is at least minPriceDropPct below the price last seen. The remembered price updates every run, so a second cut is measured from the latest price.
  • Unchanged listings are removed before you are billed. A run with nothing new returns one summary row with monitorStatus: NO_NEW_ROWS, listingCount: 0, and costs only the start fee.
  • Gone (only with "Alert on gone listings" on) means a listing seen on the previous run has disappeared from the part of the search this run covered. See "Sold signal and sell-through".
  • Each watchlist remembers up to 5,000 listings per country and search, oldest forgotten first, and forgets any listing it has not seen for 30 days.
  • The watchlist name is derived from your price, seller and keyword filters, so two schedules with different filters never share a memory. Set deltaName to choose your own.

The window limitation. A run only sees the newest maxListingsPerSearch listings (96 by default). A listing that drops in price after it has slid out of that window is not seen again, so its price drop is missed. For price-drop alerts keep searches narrow (brand plus model, a size, a price cap) or raise maxListingsPerSearch. New-listing alerts are not affected as long as fewer than maxListingsPerSearch listings appear between two runs; an hourly schedule on a busy keyword may need 192 or more.

Sold signal and sell-through

Turn on Alert on gone listings (alertOnGone) next to deltaMode and a watchlist also returns the listings it saw on its previous run that have since disappeared from the search.

What "gone" means, honestly. Vinted never confirms a sale on its public pages, and a sold item simply stops showing in search. So does an item the seller deleted, reserved for a buyer, hid while on holiday, or edited so it no longer matches your filters (a price raised above your maxPrice, for example). gone means delisted: most often sold, sometimes withdrawn. Treat it as a strong signal, not a receipt.

  • gonePresumedSold: true when the listing's last price was at or under the search's median price in its country and it was seen on at least 2 runs in a row. A cheap listing that stayed up and then vanished is the pattern of a sale; one that appeared once and vanished, or was priced above the market, is only gone.
  • firstSeenAt, lastSeenAt, daysListed, lastPrice tell you how long it was up (at least, since your runs only see it between those two times) and what it was asking.
  • sellThroughRate is listings gone / listings ever tracked, over the lifetime of the watchlist, summed across its countries. It is on every row (and on the summary row of a quiet run), and counts gone listings even when alertOnGone is off.
  • medianPriceEur, countryMedianPriceEur and priceGapPct are the run's price picture: medians of every listing the run read (not just the ones returned), converted to euros at the ECB rate so zloty and euro listings compare like for like, and each row's gap to the cross-country median when you search 2 or more countries. A cross country price gap of -30% is the arbitrage shortlist.

How a run decides a listing is gone, not just out of view. A run only reads the newest maxListingsPerSearch listings, and a listing pushed past that window by newer ones is still for sale. The actor remembers each listing's position in Vinted's newest-first feed, counts the new arrivals above it, and calls it gone only if it should still sit inside the window (with a margin of 2 places or 5%, whichever is larger). It does not use listing IDs for this: Vinted's feed is in publish order and old IDs regularly appear near the top. Listings near the bottom edge of the window are therefore never called gone, so give a sold-signal watchlist some headroom (for example maxListingsPerSearch 192 for a search that gets 50 new listings between runs). No gone check is made on a watchlist's first run, on a run a Vinted site refused partway, or on a run above 960 listings per search (price-band fan-out reads the catalogue out of feed order).

A gone listing is reported once. If it shows up again later (a reservation that fell through), it is quietly taken back off the sell-through count. Gone rows are billed as ordinary listing rows, at the same price, only when alertOnGone is on; no item page is ever opened for them. The watchlist forgets a listing it has not seen for 30 days.

{
"searches": ["carhartt detroit jacket", "arcteryx beta"],
"countries": ["fr", "de"],
"maxListingsPerSearch": 192,
"deltaMode": true,
"deltaName": "sell-through-outerwear",
"alertOnNew": false,
"alertOnPriceDrop": false,
"alertOnGone": true
}

Scheduled daily, that returns only the listings that went, with gonePresumedSold, daysListed and the running sellThroughRate: a Vinted sold items tracker for a brand list, in a Google Sheet.

Vinted shows 96 listings per page and stops every search at 960 (10 pages of 96); many Vinted scrapers stop at the first 96. This one pages through all 10, and past 960 returns up to 2,000 listings per search per country. totalAvailable shows 960 when there are 960 or more.

Set maxListingsPerSearch above 960 (up to 2,000, sort newest first) and the actor:

  1. reads page 1, takes the median price, and splits the search into two price bands at that point, using Vinted's own price filters (decimal bounds, no gaps between bands);
  2. repeats on every band still at the cap, up to 16 bands;
  3. reads the bands newest first, merges them by listing ID and removes duplicates.

In testing against a simulated 50,000-listing search it returned exactly the newest 2,000 in 45 page requests. truncated becomes true only when a band that was still needed hit the 960 cap (for example thousands of listings at one identical price), or the run had to stop early.

Price

  • Listing returned: $3 per 1,000 listings
  • Listing details added: $10 per 1,000 listings

Plus a $0.00005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.

  • Listings: $3 per 1,000 listings returned, plus a $0.00005 start fee per run.
  • Listing details (optional): $10 per 1,000 listings whose details arrived.
  • Gone listings (with "Alert on gone listings" on) are ordinary listing rows at the same price. No separate event, no extra request.
  • A monitoring run with nothing new costs the start fee only. A search that returns nothing, or a country that fails, is never billed.

An hourly watchlist on one search that finds 5 new listings an hour costs about 5 × 24 × 30 = 3,600 listings, about $11 a month. The same watchlist with details on adds about $36.

How to use

  1. In the Apify Console. Open the actor page and click Start — the searches field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~vinted-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"searches":["carhartt"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Tips:

  • Paste a link from Vinted when you need filters the input doesn't list (brand, size, colour, category, material). Everything in the link is kept; monitoring only forces newest first.
  • Use sellerType: business to see only Vinted Pro sellers; the actor keeps reading pages until it has enough matching listings (within the 960 cap).
  • includeKeywords and excludeKeywords match the title and brand before billing, so "kids" or "replica" in excludeKeywords never costs you a row.

Input

{
"searches": [
"carhartt"
]
}

One search per line: plain keywords such as "carhartt jacket", or a search link copied from your browser on any Vinted country site (its own filters such as brand, size and category are kept). Keywords run once in every country you pick below; a pasted link runs on its own country site. No login required. Accepted formats: carhartt, levis 501, https://www.vinted.fr/catalog?search_text=stone%20island&order=newest_first.

Sample output

queryfoundstatussearchQuerysearchCountrieslistingCounttotalAvailabletruncatednewCountpriceDropCountmonitorStatusgoneCountsellThroughRatemedianPriceEurlistingslistingIdtitlepricetotalPricecurrencypriceEurcountryMedianPriceEurpriceGapPctbrandsizeconditioncountryfavouriteCountisPromotedsellerTypesellerHashimageUrlurlisNewchangeTypefirstSeenAtlastSeenAtdaysListeddescriptioncolorpostedTextpostedAtsellerRatingsellerReviewCountisReservedscrapedAt
carhartttrueOKcarharttfr96960false<gone since last run (delisted, most often sold)><sell-through rate, watchlist lifetime (0-1)><median price of the search, eur><all listings found (full list)>10103016508Cord Hemd4547.95EUR45<median price in this country, eur><cross-country price gap % (vs median of all countries)>CarharttMTrès bon étatfr0falseprivatee07fdc8f8fb25230https://images1.vinted.net/t/02_014f0_QzU51Lq1rYmhRu5ToEaRCGSs/f800/be0fc870.webp?s=2f16bc49cc6da33d05603c73f65b54dc5b9bfeb9https://www.vinted.fr/items/10103016508-cord-hemd<days listed (first to last seen)>2026-09-23T06:20:13.605Z

A real row from a levis 501 run on vinted.pl (2026-09-17), trimmed:

{
"searchQuery": "levis 501",
"searchCountries": "de, pl",
"listingCount": 192,
"totalAvailable": 1920,
"truncated": false,
"listingId": "10033153698",
"url": "https://www.vinted.pl/items/10033153698-levis-501",
"title": "Levis 501",
"price": 39.13,
"totalPrice": 43.99,
"currency": "PLN",
"priceEur": 9,
"brand": "Levi's",
"size": "46 | W29",
"condition": "Nowy z metką",
"favouriteCount": 0,
"isPromoted": false,
"sellerType": "private",
"sellerHash": "44a85cb9d8d5464a",
"country": "pl"
}

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~vinted-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"searches":["carhartt"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~vinted-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["carhartt"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~vinted-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"searches":["{{search}}"]}, mapping the row's search into the searches array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Vinted Scraper: New Listing and Price Drop Alerts" — the agent will find and run this actor.

Discord or Slack alerts without code. Schedule the monitoring Task hourly, then add an integration on the Task: in n8n or Make, trigger on "Apify: run succeeded", read the run's dataset, skip rows where listingCount is 0, and post title, price, currency, size and url to a Discord or Slack webhook (or a Telegram bot node). Google Sheets users can append the same rows to a sheet for a running price log.

vs. alternatives

What it costsWhat you getTrade-off
This actor$3 per 1,000 listings, details $10 per 1,000, quiet monitoring runs free22 Vinted countries in one run, euro prices, built-in new-listing, price-drop and gone (sold signal) monitoring, sell-through rate, cross country price gap, up to 2,000 listings per searchSearch results only; no seller city or exact upload time, because Vinted doesn't show them publicly
Popular Vinted scrapers on the Apify Store$0.50 to $20 per 1,000A dump of search results, usually one country per runThe most-used one is rated 2.92 stars with 3 active users last week; none does multi-country plus monitoring, so you rebuild "what's new" yourself
Paid Discord alert botsMonthly subscriptionAlerts in their server, their filtersYou don't own the data or the filters, and can't feed Sheets or your own bot
Self-hosted sniper bots (GitHub)Free, plus your server and timeFull controlBreak whenever Vinted changes its site; you maintain proxies, parsing and dedupe

Store figures as of September 2026.

Data & privacy

Data & privacy. This actor reads public search results that anyone can see without logging in. It doesn't log in, solve CAPTCHAs or reveal hidden contact details. Seller identity is off by default: you get a private/business flag and an anonymous seller hash so you can group listings by seller without names. Turning on seller info makes you responsible for having a lawful reason to process it. Not affiliated with Vinted.

Photos on Vinted often show the seller wearing the item, so only the main photo link is returned by default and nothing is ever downloaded. Descriptions have emails, phone numbers, @handles and chat links replaced with [redacted].

FAQ

Is this allowed? It collects the same public listing data your browser shows, for the searches you choose. It's built for monitoring a search, not for copying the marketplace. Check that your use fits Vinted's terms and your local law.

Why did my monitoring run return nothing? Nothing new or cheaper appeared since the last run. You get one row with

monitorStatus: NO_NEW_ROWS
and are charged only the start fee. On the very first run with "Seed silently" on, the status is SEEDED.

Why is truncated true? Either a price band the run still needed hit Vinted's 960 cap, or a country site refused the run partway (the listings collected up to then are delivered and billed; nothing else is).

Does it find sold listings? It finds listings that stopped being for sale. Vinted's search only shows listings on sale and never confirms a sale, so with monitoring and "Alert on gone listings" on, a listing that disappears from your watched search comes back as gone, with gonePresumedSold when it looks like a sale (cheap, up for 2+ runs). That is delisted, most often sold or withdrawn; see "Sold signal and sell-through" above. Sold prices are never shown by Vinted, so lastPrice is the last asking price.

Does totalPrice include shipping? No. It is the item price plus Vinted's buyer protection fee, as Vinted shows it in search. Shipping depends on the buyer's address and carrier.

Can I get the seller's name or city? No. Names are deliberately never returned, and the city isn't on Vinted's public listing pages. Turn on "Include the raw Vinted seller ID" only if you have a lawful reason to process it.

What do I need to set up? Nothing. No Vinted account, no cookies, no proxy settings. The actor runs on Apify's standard proxy; when a Vinted country site refuses a page, it retries on fresh connections and then, for that page only, on a residential connection. That fallback is included in the listing price; turn off "Retry refused pages on a residential connection" if you never want it used.

Why did one country come back empty? If a Vinted site kept refusing the run even after the retries, that country is skipped, the other countries are still delivered, and truncated is true. Nothing is billed for the skipped country.

Can an AI agent call this? Yes, through the Apify MCP server or the API call shown above. Ask for "Vinted Scraper: New Listing and Price Drop Alerts".