Vinted Scraper & API - Listings, Prices, Brands, 23 Countries avatar

Vinted Scraper & API - Listings, Prices, Brands, 23 Countries

Pricing

$0.70 / 1,000 results

Go to Apify Store
Vinted Scraper & API - Listings, Prices, Brands, 23 Countries

Vinted Scraper & API - Listings, Prices, Brands, 23 Countries

Vinted scraper and API: search Vinted listings on 23 country sites by keyword, brand, size, condition, colour, category and price, or paste Vinted URLs. One result = one listing: title, brand, size, condition, price, total with fee, photos, favourites, URL. No start fee. $0.70 per 1,000.

Pricing

$0.70 / 1,000 results

Rating

0.0

(0)

Developer

Giovanni Rich

Giovanni Rich

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Vinted scraper and unofficial Vinted API: search Vinted listings by keyword, brand, size, condition, colour, category and price on 23 Vinted country sites (vinted.fr, .de, .co.uk, .com, .it, .es, .nl, .pl, .be, .at, .lt, .cz, .se, .pt and more) and export them to JSON, CSV or Excel. Use it as a Vinted price tracker, for second-hand fashion prices, resale research and deal alerts.

  • What goes in: search keywords, country sites, filters (price, brand, size, condition, colour, category, sort) or Vinted URLs.
  • What comes out: one row per listing: title, brand, size, condition (local name + plain English code), price, buyer-protection fee and total price, currency, photo URLs, favourites, seller id, country and URL. Optional: description, category path, colour, material, upload time, all photos and seller rating.
  • Typical cost: $0.70 per 1,000 listings, details included, no start fee. A 20-listing check costs 1.4 cents.
  • When to use it: pricing a resale item, tracking a brand's or model's price on Vinted, finding new listings every hour, comparing prices between countries, feeding resale data to an AI agent.

It reads the same JSON search data the Vinted website loads, over plain HTTP with no headless browser and no login, 96 listings per request. In our tests one search for "sac longchamp" on vinted.fr returned 109,392 of the 118,105 listings Vinted counts. Unofficial: not affiliated with or endorsed by Vinted.

Sample output

Real rows from a run of the prefilled input (nike on vinted.fr, 20 listings, 28 Oct 2026):

titlebrandsizeconditionCodepricetotalPrice
Veste NikeNikeSgood10 EUR11.20 EUR
Scarpe da Calcio con tacchetti Nike numero 38Nike38new_without_tags25 EUR26.95 EUR
tn en très bon état taille 42Nike42new_without_tags130 EUR137.20 EUR
Nike x NOCTA Northstar Nylon Track JacketNikeLnew_without_tags40 EUR42.70 EUR
Nike Retro Vintage Y2K Fullzip TrackJacket Special Old Money Flow Japan Classic 90'sNikeXLvery_good30 EUR32.20 EUR

totalPrice is the price plus Vinted's buyer-protection fee. Every row also has photo links, favourites, the seller's numeric id, country and the listing URL.

Use cases

  • Resale pricing: see what a brand, model or size really goes for before you list or buy.
  • Price tracker and deal alerts: hourly newest_first runs with a price ceiling, deduplicated on id.
  • Cross-country arbitrage: run the same search on several Vinted sites and compare prices in each currency.
  • Brand and trend research: supply and asking prices by brand, category, size and condition.
  • Second-hand shops: benchmark your stock against live Vinted asking prices.
  • AI agents: "Levi's 501 in W32 under 20 EUR on vinted.de" maps straight onto the input fields.

Pricing

$0.70 per 1,000 listings (pay per result; you pay only for listings saved to the dataset). Item details are included at the same price. The most-used Vinted scrapers on the Store charge $1.00-$2.50 per 1,000, two of them plus a start fee per run.

You scrapeYou pay
100 listings$0.07
1,000 listings$0.70
10,000 listings$7.00
100,000 listings$70.00

No start fee. The Apify free plan's $5 monthly credit covers about 7,100 listings. The prefilled input (nike on vinted.fr, 20 listings) costs $0.014 and took about 4 seconds in a test. You're never charged for failed or blocked requests, retries, duplicates, or items that no longer exist. If you set a maximum cost per run, the scraper stops cleanly when it reaches it.

Why this one

  • Cheaper than the most-used Vinted scrapers, with no start fee.
  • Details at the same price: description, category path, colour, material, upload time, all photos and seller rating.
  • 23 Vinted country sites in one run, prices in each site's currency, total with buyer-protection fee.
  • Deep search past Vinted's 960-listing limit: 109,392 of 118,105 listings for one search in a test.
  • No login, no browser, no personal data: only the seller's numeric id.

FAQ

Does it need a Vinted account or a browser? No. It reads public listing data over HTTPS, the same data the Vinted website loads for any visitor.

How do I use the filters from the Vinted website? Set the filters on vinted.fr (or any Vinted site), copy the URL from the address bar and paste it into startUrls. Search text, category, brand, size, condition, colour, material, price range and sort order are all read from the URL.

How do I track new listings for a search? Schedule the actor with sort: "newest_first" and a maxItems that covers what appears between two runs (for example 100 every hour), and keep the ids you have already seen.

How do I find a category id? Open the category on any Vinted site; the id is the number after /catalog/, e.g. 1231 in https://www.vinted.de/catalog/1231-men-shoes. Ids are the same on every site. With includeDetails, every row also has its categoryId.

Which currency are prices in? Each site's own currency (EUR on most EU sites, GBP on vinted.co.uk, USD on vinted.com, PLN, CZK, SEK, DKK, HUF, RON). priceMin / priceMax use the same currency. totalPrice is the price plus Vinted's buyer-protection fee, before shipping.

Is personal data collected? Only the seller's numeric Vinted id and, with details, their review count, rating and badges. No usernames, names, photos of people's profiles, or locations. E-mail addresses and phone numbers that sellers paste into descriptions are replaced with [email removed] / [phone removed].

Is it legal to scrape Vinted? This actor collects publicly available listing information without logging in. You're responsible for using the data in line with Vinted's terms and applicable law (including GDPR for the seller ids). This isn't legal advice; if you're unsure, check with a lawyer.

How does it avoid blocks? It sends normal browser-like requests through Apify Proxy. Each proxy session first collects Vinted's anonymous cookies from the home page, then reuses them. IPs that Vinted refuses are dropped and the request is retried on a new IP (up to 10 retries). Search requests that keep failing are retried through residential IPs in the site's country (residentialFallback). In our cloud tests more than half of the shared datacenter IPs were refused; finding a working one takes a few seconds and costs nothing per listing.

What happens if I run it with no input? It does a demo search for "nike" on vinted.fr (20 listings) instead of failing.

How to use

  1. Type one or more search keywords (nike air max, levis 501) and pick the country sites (default fr). Add filters if you need them.
  2. Or paste Vinted URLs: copy a search from your browser with its filters already set, a category or brand page, or single item URLs.
  3. Click Start. Listings are saved as they come in; download them as JSON, CSV or Excel, or read them through the Apify API.
  4. For a price tracker, schedule the actor (for example every hour with sort: "newest_first" and maxItems: 100) and deduplicate on id.

Input

All fields are optional. An empty input runs a 20-listing demo search.

FieldDefaultWhat it does
searchQueries-Keywords as typed into the Vinted search box, one per line. Each keyword is one search per country site.
countries["fr"]Vinted sites by domain ending: com, co.uk, fr, de, it, es, nl, be, at, lu, pt, pl, lt, cz, sk, se, dk, fi, hu, ro, gr, hr, ie.
startUrls-Vinted search / catalog / brand / category URLs (scraped with the filters in the URL) and item URLs (looked up with details).
priceMin, priceMax-Price range in each site's own currency (EUR, GBP, USD, PLN ...).
brands-Brand names (Nike, Levi's, Zara) or Vinted brand ids. The closest Vinted brand is used and logged.
sizes-Sizes as shown on Vinted (M, 38, W32, 9.5). "M" also matches "M / 38 / 10".
conditionsallnew_with_tags, new_without_tags, very_good, good, satisfactory.
colorsallblack, white, blue, navy, red, pink, green, beige, brown, grey ... (29 Vinted colours).
categoryIds-Vinted category ids: the number in a catalog URL (1231 from /catalog/1231-men-shoes; 1904 Women, 5 Men, 1193 Kids). Same ids on every site.
sortrelevancerelevance, newest_first, price_low_to_high, price_high_to_low.
maxItems100Listings per search (keyword x country). 0 = all of them.
deepSearchtrueGoes past Vinted's 960-listing limit per search by splitting into narrower searches (condition, category, price band, colour).
includeDetailsfalseOpens each listing for description, category path, colour, material, upload time, all photos and seller rating. Same price, slower.

Example: Levi's jeans in size W32, very good or new with tags, 5-20 EUR, cheapest first, on vinted.de (this exact input returned 200 listings in 4.5 s in our test; Vinted counted 7,277 matches):

{
"countries": ["de"],
"searchQueries": ["jeans"],
"brands": ["Levis"],
"sizes": ["W32"],
"conditions": ["very_good", "new_with_tags"],
"colors": ["blue"],
"priceMin": 5,
"priceMax": 20,
"sort": "price_low_to_high",
"maxItems": 200
}

The same search on six country sites at once:

{
"countries": ["com", "co.uk", "pl", "se", "it", "lt"],
"searchQueries": ["zara dress"],
"maxItems": 150
}

Straight from URLs copied from the browser:

{
"startUrls": [
"https://www.vinted.fr/catalog?search_text=sac%20longchamp&status_ids[]=6&order=newest_first",
"https://www.vinted.de/catalog/1231-men-shoes/brand/53-nike",
"https://www.vinted.co.uk/items/10403054566-levi-501-original-stone-washed-jeans"
],
"maxItems": 120
}

Output

One dataset item per listing. This one is from a real run on 16 Oct 2026, search "levis 501" on vinted.co.uk with includeDetails: true (photo list shortened):

{
"id": "10403054566",
"url": "https://www.vinted.co.uk/items/10403054566-levi-501-original-stone-washed-jeans",
"title": "Levi 501 original stone washed jeans",
"brand": "Levi's",
"size": "W36",
"condition": "New without tags",
"conditionCode": "new_without_tags",
"price": 28,
"currency": "GBP",
"discountedPrice": null,
"buyerProtectionFee": 2.1,
"totalPrice": 30.1,
"photoUrl": "https://images1.vinted.net/t/06_020cc_17hzrgFaZMikBGp2pi9P1Xse/f800/62cba6e7.webp?s=9b419c2c2b3cdacf23278d07a8c5672989172fc6",
"photoUrls": ["https://images1.vinted.net/t/06_020cc_17hzrgFaZMikBGp2pi9P1Xse/f800/62cba6e7.webp?s=9b419c2c2b3cdacf23278d07a8c5672989172fc6", "..."],
"favouritesCount": 0,
"isPromoted": false,
"sellerId": "220727373",
"sellerIsBusiness": false,
"country": "co.uk",
"domain": "www.vinted.co.uk",
"searchQuery": "levis 501",
"position": 1,
"scrapedAt": "2026-10-16T18:09:34.944Z",
"description": "Men’s jeans brand new no tags",
"category": "Straight fit jeans",
"categoryPath": ["Men", "Clothing", "Jeans", "Straight fit jeans"],
"categoryId": "1819",
"brandId": "10",
"color": "Blue",
"material": "Denim",
"uploadedAgo": "Just now",
"uploadedAtApprox": "2026-10-16T18:09:35.699Z",
"photoCount": 4,
"isReserved": false,
"isAvailable": true,
"sellerFeedbackCount": 20,
"sellerRating": 5,
"sellerBadges": ["ACTIVE_LISTER"]
}

A search row without details (same day, "zara dress" on vinted.se). The fields from description down are only filled with includeDetails:

{ "id": "10400329672", "url": "https://www.vinted.se/items/10400329672-beige-back-knot-strap-dress-with-linnen", "title": "Beige back knot strap dress with linnen", "brand": "Zara", "size": "XS", "condition": "Mycket bra", "conditionCode": "very_good", "price": 232.64, "currency": "SEK", "buyerProtectionFee": 19.13, "totalPrice": 251.77, "favouritesCount": 1, "sellerId": "91956257", "country": "se", "searchQuery": "zara dress", "position": 44 }

The dataset has two ready-made views, Overview (with photo thumbnails) and Details. A RUN_SUMMARY record in the key-value store lists, for each search, how many listings were saved, the total Vinted counts, how many narrower searches deep search ran, why it stopped, and any warnings (a brand or size that was not found).

Field fill rates (real test runs)

Search rows (1,480 rows: 8 country sites, keywords, filters and URLs): id, url, title, brand, condition, conditionCode, price, currency, buyerProtectionFee, totalPrice, photoUrl, favouritesCount, sellerId, country 100%; size 92% (bags and some accessories have no size).

With includeDetails (100 rows, vinted.co.uk and vinted.fr): description, category, categoryPath, categoryId, brandId, colour, uploadedAgo, photoCount, sellerFeedbackCount 100%; uploadedAtApprox 100% (20-row run); sellerRating 80% (sellers with no reviews have none); material 54%.

API example

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("rel8ble/vinted-search-scraper").call(run_input={"searchQueries": ["levis 501"], "countries": ["de", "fr"], "sort": "newest_first", "maxItems": 200})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "|", item["totalPrice"], item["currency"])

One HTTP call that runs the actor and returns the rows (curl):

curl -X POST "https://api.apify.com/v2/acts/rel8ble~vinted-search-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries": ["nike air max"], "countries": ["co.uk"], "maxItems": 50}'

Integrations

  • Make, Zapier and n8n: trigger runs and pass new Vinted listings into any workflow (Slack, Telegram or e-mail deal alerts).
  • Google Sheets: send each run's dataset straight into a spreadsheet to track prices over time.
  • Apify API: start runs and fetch results over REST, or with the JavaScript and Python API clients.
  • Webhooks: get notified when a run finishes, then pull the new data.
  • MCP for AI agents: the Apify MCP server (https://mcp.apify.com) lets Claude, ChatGPT, Cursor and other agents call this actor and read Vinted prices directly. Typical agent call: {"searchQueries": ["levis 501"], "countries": ["co.uk"], "maxItems": 20}, 1.4 cents.
  • Schedules: run it every hour with sort: "newest_first" to catch new listings as they appear.

Limits

  • Vinted returns at most 960 listings per search. Deep search (on by default) splits bigger searches and merges the results. Vinted's own counts include a few percent of listings it never shows (its result pages of 96 often carry 93-95), so expect roughly 92-95% of the count on very big searches.
  • One listing can appear on several EU sites. Vinted shares stock across countries; on non-euro sites (PL, CZ, SE, DK, HU, RO, UK, US) cross-border prices are shown converted into that site's currency, as Vinted shows them to buyers there. Deduplicate on id if you search several sites.
  • Search is loose. Vinted also matches similar words, so a keyword search can include unrelated items. Use brands and categoryIds for clean results.
  • Upload time is shown by Vinted only as "12 min ago" / "3 days ago"; uploadedAtApprox is computed from it and is as precise as that text.
  • Details are slower. Vinted limits how fast item pages may be opened; with details on, expect roughly 40-100 listings a minute instead of thousands.
  • Not included: sold-item history, shipping prices, seller usernames, names or locations, member profiles and closets, and anything that needs a Vinted login.

How it works (for developers)

Vinted's website is a Next.js app backed by a JSON gateway at api.vinted.<tld> (api.www.vinted.com for the US). Searches are GET requests to /svc-catalogue/items with search_text, price_from / price_to, order, page, per_page=96 and attribute_ids[<code>]=id,id for category, brand, size, condition, colour and material. The gateway answers only sessions holding the anonymous access_token_web cookie (one HEAD request to the site's home page) and picks the country from the Locale header. Counts per condition / colour / size come from /svc-filters/filters/facets and child categories from /svc-filters/faceted_categories; deep search uses them to split searches above 960. Item details are read from the Next.js flight data of the item page.

npm install
npm test # parser tests on saved real responses
APIFY_LOCAL_STORAGE_DIR=./storage node src/main.js # input in storage/key_value_stores/default/INPUT.json