Vinted Scraper | From $0.75/1k ๐
Pricing
from $0.75 / 1,000 products
Vinted Scraper | From $0.75/1k ๐
Monitor and extract product listings, prices, photos & seller data from Vinted search results and catalogs. Fast, reliable API for market research, price monitoring & inventory tracking. AI agent friendly.
Pricing
from $0.75 / 1,000 products
Rating
4.8
(5)
Developer
Epic Scrapers
Maintained by CommunityActor stats
8
Bookmarked
728
Total users
103
Monthly active users
0.69 hours
Issues response
a day ago
Last modified
Categories
Share
Vinted Scraper: search listings in 26 countries, compare prices and get alerts for new listings and price drops
Vinted Scraper turns any Vinted keyword or filtered catalog search into a spreadsheet of active listings: title, asking price, brand, size, condition, photos, favourites, views and seller. Search one country or the same keyword in several countries at once, and see where an item is cheapest. Schedule it, and each run saves only the listings that are new or cheaper since the last one.
- 26 Vinted countries. Search vinted.it, vinted.fr, vinted.de, vinted.pl, vinted.co.uk, vinted.com and 20 more, each through a local connection, so you see what shoppers in that country see.
- Cross-country price comparison. Run one keyword in several countries and get a summary of median prices converted to EUR, with the cheapest and most expensive country.
- New listings and price drops. The actor remembers listings between runs. Set Save only and you get just the new listings, the price drops, or both: a deal alert without writing any code.
- Every Vinted filter. Filter on Vinted by brand, size, condition, category or sort order, then paste the URL. The actor keeps all of its filters.
- AI filtering. Describe what you want in plain language, such as "only ThinkPads with 16 GB RAM that aren't broken", and only matching listings are saved.
- Pay per listing, no subscription. No Vinted account, cookies or proxy setup. Export to JSON, CSV, Excel or Google Sheets.
Scope: This actor collects active listings from search and catalog pages. To track which listings sold and for how much, use Vinted Sold Listings Tracker.
What can you do with Vinted Scraper?
| Goal | How |
|---|---|
| Get alerts for new deals | Schedule a search hourly with Save only set to new listings and price drops, and connect a webhook. |
| Find the cheapest country | Add countries to Also search in and read the COUNTRY_PRICE_SUMMARY record. |
| Price an item before reselling | Search the brand and model, filter by condition with a Vinted URL, and compare asking prices. |
| Source stock for a resale shop | Run your brands across several countries and filter with an AI rule, such as "only real leather, no damage". |
| Watch a brand or category | Paste a filtered catalog URL sorted by newest, and schedule it. |
| Build a market dataset | Collect thousands of listings per category for analysis, dashboards or product matching. |
Quick start
- Click Try for free and sign in to Apify.
- Add a keyword to Keywords, for example
nike air max, and pick a Main country. Or paste a Vinted search URL into Vinted URLs. - For a first run, keep Products per search at
20. - Click Start. When the run finishes, open the Output tab and export the data.
{"keywords": ["nike air max"],"country": "it","maxProducts": 20}
What data can you extract?
Every row is one active listing, as returned by Vinted's catalog:
| Group | Fields |
|---|---|
| Listing | id, title, url, brand_title, size_title, status (condition, such as Very good) |
| Price | price (amount, currency_code), service_fee, total_item_price |
| Interest | favourite_count, view_count |
| Media | photo, photos (image URLs; files are not downloaded) |
| Seller | user (ID, login, profile URL, photo, business flag) |
| Search | vinted_country (the country the listing was found in) |
With price tracking on, each row also has:
| Field | Meaning |
|---|---|
is_new_listing | First time this search has seen the listing. |
first_seen_at | When the listing was first seen by this search. |
previous_price | The price in the previous run. |
price_change | Difference from the previous price, in the listing's currency. |
price_change_percent | The same difference as a percentage. |
price_dropped | true when the price is lower than in the previous run. |
With AI filtering on, each row also has ai_filter, with the match result and its probability.
Example output
Selected fields from one listing (illustrative, not a live listing):
{"id": 1234567890,"title": "Vintage denim jacket","url": "https://www.vinted.it/items/1234567890-vintage-denim-jacket","price": { "amount": "25.00", "currency_code": "EUR" },"brand_title": "Levi's","size_title": "M","status": "Very good","user": {"id": 123456,"login": "example_seller","profile_url": "https://www.vinted.it/member/123456-example-seller","business": false},"favourite_count": 12,"view_count": 48,"vinted_country": "it"}
Get deal alerts with scheduled runs
Most of the value comes from running the same search again. Apify can run the actor for you on a schedule and send the results wherever you need them.
1. Save your input as a task
Set your keywords or URLs, set Save only to New listings and price drops, then click Save as a new task. A task is a saved input you can run again with one click or on a schedule.
{"keywords": ["carhartt jacket"],"country": "de","maxProducts": 50,"saveOnly": "newOrPriceDrops"}
2. Schedule the task
In Apify Console, go to Schedules, click Create new, choose how often to run, and add your task. See Schedules and How to create a schedule.
Watch how to schedule an Actor:
Or schedule a saved task:
Common schedules:
| Use case | Frequency | Cron expression |
|---|---|---|
| Deal alerts for popular items | Every hour | 0 * * * * |
| New listings from a brand | Every 6 hours | 0 */6 * * * |
| Price tracking for a watchlist | Daily | 0 8 * * * |
| Cross-country price comparison | Weekly (Monday) | 0 8 * * 1 |
3. Get notified or send results to a spreadsheet
In the task's Integrations tab, connect email, Slack, a webhook, Make, Zapier or n8n to get each run's new listings and price drops. Connect Google to save every run to Google Sheets or Google Drive:
How tracking works
- The first run for a search saves all current listings as a baseline. Nothing is marked new or dropped yet.
- Later runs compare each listing with the previous run of the same search and save only what Save only asks for.
- History is kept per search URL in a key-value store named
vinted-price-historyin your Apify account. - Only listings within Products per search are compared. Raise the limit to watch more listings.
- Open the Price tracking view in the Output tab to see previous prices and changes side by side.
Compare prices across countries
{"keywords": ["nike air max 90"],"country": "it","compareCountries": ["pl", "fr"],"maxPrice": 80,"maxProducts": 20}
This runs the keyword on vinted.it, vinted.pl and vinted.fr. minPrice and maxPrice are in the main country's currency (EUR here) and are converted for other currencies (PLN for Poland) with European Central Bank rates. Every listing has vinted_country.
The run also saves a COUNTRY_PRICE_SUMMARY record in the key-value store, with the count, minimum, median, average and maximum price per country, in local currency and EUR:
[{"search": "nike air max 90","countries": [{ "country": "pl", "currency": "PLN", "count": 10, "median": 119.5, "median_eur": 27.33 },{ "country": "it", "currency": "EUR", "count": 10, "median": 38.5, "median_eur": 38.5 },{ "country": "fr", "currency": "EUR", "count": 10, "median": 40, "median_eur": 40 }],"cheapest_country": "pl","most_expensive_country": "fr","median_spread_eur": 12.67,"median_spread_percent": 46.36}]
The summary compares asking prices without buyer fees or shipping, so a difference between countries isn't a guaranteed profit.
Input reference
Supply at least one URL or one keyword.
| Field | Type | Default | Effect |
|---|---|---|---|
startUrls | Array of objects | Empty | Vinted search or catalog URLs, such as [{"url": "https://www.vinted.fr/catalog?search_text=levis"}]. Each URL is one search and keeps its own filters. |
keywords | Array of strings | Empty | Search terms. Each keyword is a separate search. |
country | String | "it" | Main country for keyword searches. Price filters use its currency. Doesn't change URLs. |
compareCountries | Array of strings | Empty | More countries to run every keyword in. Adds the COUNTRY_PRICE_SUMMARY record. |
minPrice/maxPrice | Number | Empty | Price range for keyword searches, in the main country's currency. |
maxProducts | Integer | 20 | Maximum listings per URL, keyword and country, from 1 to 960 (Vinted's own limit). |
trackPriceChanges | Boolean | false | Compare listings with earlier runs of the same search and add the price-change fields. |
saveOnly | String | "all" | "all", "new", "priceDrops" or "newOrPriceDrops". Anything other than "all" turns on price tracking. |
aiFilteringEnabled | Boolean | false | Save only listings that match aiFilterPrompt. |
aiFilterPrompt | String | Empty | The listings to keep, in plain language. Required with AI filtering. |
aiMatchThreshold | String | "0.5" | Minimum match probability, from "0.1" (broad) to "0.9" (strict). Listings at the threshold are kept. |
For brand, size, condition, category and sort filters, set them on Vinted and copy the URL. Category paths such as /catalog/5491-skorts_women work too. Single item (/items/...) and member (/member/...) URLs aren't supported.
Country codes: at Austria, be Belgium, hr Croatia, cz Czechia, dk Denmark, ee Estonia, fi Finland, fr France, de Germany, gr Greece, hu Hungary, ie Ireland, it Italy, lv Latvia, lt Lithuania, lu Luxembourg, nl Netherlands, pl Poland, pt Portugal, ro Romania, sk Slovakia, si Slovenia, es Spain, se Sweden, gb United Kingdom (vinted.co.uk), us United States (vinted.com).
Ready-to-run examples
Newest listings from a filtered search
{"startUrls": [{ "url": "https://www.vinted.fr/catalog?search_text=vintage%20jacket&price_to=40&order=newest_first" }],"maxProducts": 50}
Set filters on Vinted, sort by newest, and copy the URL. Schedule it to see new stock as it's listed.
Keep only underpriced items with AI
{"keywords": ["thinkpad"],"country": "it","maxProducts": 50,"aiFilteringEnabled": true,"aiFilterPrompt": "Include only underpriced ThinkPads. Exclude broken devices and models older than 2010. Use a base value of 100 EUR, add 30 EUR for 16 GB RAM, and add 40 EUR for 512 GB storage.","aiMatchThreshold": "0.7"}
The AI reads each listing's text and fields, not its photos. If a listing doesn't give enough information to match the rule, it's left out.
Find where a brand is cheapest
{"keywords": ["arc'teryx jacket"],"country": "de","compareCountries": ["fr", "it", "pl", "es", "nl"],"maxProducts": 100}
Open COUNTRY_PRICE_SUMMARY in the key-value store for the median price per country in EUR.
Several searches in one run
{"startUrls": [{ "url": "https://www.vinted.fr/catalog?search_text=levis&price_to=35" }],"keywords": ["nike", "adidas"],"country": "it","minPrice": 10,"maxPrice": 50,"maxProducts": 20}
This returns up to 60 listings: 20 from the French URL and 20 for each Italian keyword. Country and price options apply only to keywords, never to URLs.
Analyze the results with ChatGPT or Claude
Export the dataset as CSV and attach it to a chat with ChatGPT, Claude or another AI assistant. Some prompts to start with:
Price an item. "This is Vinted listing data for one search. Group the listings by status (condition) and show the median price.amount for each. Suggest an asking price for my [item] in [condition]."
Spot the deals. "Find listings priced at least 30% below the median for the same brand_title and size_title. List them with title, price and url."
Compare countries. "Using vinted_country and price, compare median prices per country for this item and tell me where it's cheapest once I add about [shipping cost] for shipping."
The dataset is also available through the Apify API and the Apify MCP server, so AI agents can run the actor (epicscrapers/vinted-search-scraper) and read its results directly.
Run it from the API
curl --fail-with-body --request POST \"https://api.apify.com/v2/acts/epicscrapers~vinted-search-scraper/run-sync-get-dataset-items?format=json" \--header "Authorization: Bearer ${APIFY_TOKEN}" \--header "Content-Type: application/json" \--data '{"keywords":["nike"],"country":"it","maxProducts":20}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('epicscrapers/vinted-search-scraper').call({keywords: ['nike'],country: 'it',maxProducts: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Output
Results go to the run's default dataset. Use the Overview or Price tracking view, or export everything as JSON, CSV, Excel, XML or HTML. JSON keeps the nested price, user and photo objects; CSV and Excel flatten them into columns.
price.amountis a string in the listing's currency,price.currency_code. Convert before calculating, and don't average across currencies without converting.- Duplicate listings within one search are removed. Overlapping searches in one run can return the same listing twice; match them by
id. - Missing values are
nullor left out. The catalog doesn't include full descriptions, seller ratings or shipping costs.
FAQ
Why did I get fewer results than I asked for?
The search may have fewer matching listings, Vinted stops every search at 960 results, or AI filtering left listings out. With Save only, later runs save only what changed, so a run with nothing new saves nothing. Check the log for details.
How many results can I get?
Up to 960 per URL, keyword and country, Vinted's own limit. To collect more, split a search into several narrower ones, for example by price range, size or category.
Why did the first tracking run save everything?
The first run for a search has nothing to compare with, so it saves all current listings as a baseline. From the second run on, only new listings and price drops are saved.
Do I need a Vinted account, cookies or proxies?
No. The actor handles Vinted access and uses a residential connection in each country itself. It doesn't log in or use your Vinted account.
Can I filter by brand, size, condition or category?
Yes. Set the filters on Vinted, copy the URL from your browser and paste it into Vinted URLs. Keyword searches support country and price filters only.
Can I get sold listings or sold prices?
Not with this actor. A listing that disappears may have been sold, hidden or deleted. Use Vinted Sold Listings Tracker for sold listings.
Can I scrape a seller's wardrobe or a single item page?
No. This actor reads search and catalog results only.
Why did my run stop early?
If the log says the charge limit was reached, the run hit its maximum cost or your account's spending limit. Everything collected before that is saved. Raise the limit in the run options to collect more.
Is it legal to scrape Vinted?
The actor collects publicly visible listing data. It doesn't buy items, contact sellers or read private messages. Public data can still be personal data, so you are responsible for how you use it, including Vinted's terms and laws such as GDPR.
Cost
This actor uses pay-per-event pricing. You pay for what you use, with no subscription:
| Event | Charged when |
|---|---|
| Actor start | Once per run. |
| Listing | A listing is saved to the dataset. |
| Tracked search | Once per URL or keyword search with price tracking on, even when nothing new is found. |
| AI-filtered listing | A listing is checked by AI filtering, whether it matches or not. Matches saved to the dataset are also charged as listings. |
Start with a small Products per search to check results, and remember it applies to every URL, keyword and country. With price tracking or AI filtering, a lower limit also lowers what each search checks. Set a maximum cost per run; the actor stops cleanly when it's reached. The Pricing tab always shows the current prices.
Support
Report problems or request features in the Issues tab, email jwlben11@gmail.com, or use the feedback form. Include the run ID, the input and what you expected. We read every issue.
This actor is not affiliated with or endorsed by Vinted. "Vinted" is a trademark of Vinted UAB.