Vinted Scraper
Vinted is Europe's largest fashion resale marketplace, and pricing on it means seeing the whole shelf: every live listing for a brand and size across all...
Vinted is Europe's largest fashion resale marketplace, and pricing on it means seeing the whole shelf: every live listing for a brand and size across all 23 national sites. Rows give brand, size, condition, asking price and the buyer-protection total a buyer pays. No seller usernames collected.
$3.00 / 1,000 · 100.0% success over 30 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 | What to search for on Vinted, exactly as you would type it in the site's search box, e.g. "nike air max" or "zara dress". Leave it out when you only re-check items through listingIds. | nike |
listingIds |
array | Re-check items you already know instead of searching: one item ID per line (the number after /items/ in every Vinted address, and the itemId of every dataset item), or the item's full address. Each one is read from its own page on the national site chosen in Domain - title, brand, size, condition, colour, price, every photo, the full description, the favourite count and the site's own status (active, reserved, hidden). An item that is gone from the site (sold, deleted) is skipped, named in the log and not billed. When given, the search fields of this form are ignored and the run status says which. Up to 50. |
[] |
domain |
string | Which national Vinted site to search. Prices come in that site's currency. | fr |
priceMin |
integer | Only include items costing at least this much, in the selected site's currency. | - |
priceMax |
integer | Only include items costing at most this much, in the selected site's currency. | - |
sortBy |
string | Order of results: newest (best for monitoring), price_asc, price_desc, or relevance. | newest |
aiAnalysis |
boolean | Add AI-computed fields to every item: normalizedBrand, normalizedCategory, conditionScore (1-5) and listingQuality - directly comparable across sellers' free-form listings. Billed $0.50 per 1,000 analyzed items on top of the result price. Paid Apify plans only. | False |
scrapeDetails |
boolean | Read each item's own page for the seller's full description and the item colour, neither of which the search results carry. This makes one extra request per item, so a run is slower and costs one more page fetch each. Seller identity is never read - only the description text and colour reach the output. Leave off for a fast search-only sweep. | False |
maxItems |
integer | Stop after this many items. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 500. | 500 |
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:
{
"brand": "Nike",
"businessSeller": false,
"condition": "Neuf avec étiquette",
"currency": "EUR",
"favouriteCount": 0,
"imageUrls": [
"https://images1.vinted.net/t/03_001a3_KwDsmyZ3BGFybcicNpYScBvE/f800/c663e2c9.webp?s=5ac39d05ae95ad9514adebb2c6a344b38844bdd4"
],
"itemId": "10395995903",
"priceCents": 2500,
"promoted": false,
"serviceFeeCents": 195,
"size": "38.5",
"title": "Nike killshot 2",
"totalPriceCents": 2695,
"url": "https://www.vinted.fr/items/10395995903-nike-killshot-2",
"viewCount": 0
}
| Field | Type | Meaning |
|---|---|---|
itemId |
string | Vinted item ID. |
url |
string | Direct link to the item. |
title |
string | Item title as posted. |
brand |
['string', 'null'] | Brand shown on the item card. |
size |
['string', 'null'] | Size as displayed, e.g. "M" or "12 ans / 152 cm". |
condition |
['string', 'null'] | Condition as displayed, in the site's language. |
priceCents |
['integer', 'null'] | Item price in minor units (cents/pence) of the currency. |
currency |
['string', 'null'] | Currency of the selected site, e.g. EUR, GBP, PLN. |
serviceFeeCents |
['integer', 'null'] | Buyer protection fee in minor units. |
totalPriceCents |
['integer', 'null'] | Total buyer price including the fee, in minor units. |
businessSeller |
boolean | True when sold by a professional seller. Seller identity is never collected. |
promoted |
boolean | True for paid promoted placements. |
favouriteCount |
integer | How many users favourited the item - a demand signal. |
viewCount |
integer | View count when reported by the site. |
imageUrls |
array | Item photo URLs (up to 8). |
description |
string | The seller's free-text description. Only present when Fetch descriptions is on; read from the item's own page. Seller identity is never read. |
color |
string | The item colour as Vinted records it. Only present when Fetch descriptions is on. |
normalizedBrand |
string | AI analysis (aiAnalysis: true): canonical brand name, "unbranded" when none. Absent on standard runs. |
normalizedCategory |
string | AI analysis: one of a fixed category set (tops, shoes, bags, ...) for cross-seller comparison. Absent on standard runs. |
conditionScore |
integer | AI analysis: condition normalized to 1 (heavily worn) - 5 (new), language-independent. Absent on standard runs. |
listingQuality |
string | AI analysis: excellent, good, fair or poor - completeness and consistency of the listing. Absent on standard runs. |
status |
string | The site's own state of the item: up for sale, reserved for a buyer, or hidden by the seller. Present on items read through listingIds; the search card does not carry it (a sold or deleted item is not served at all). |
Health
100.0% success over 30 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.
The history behind this tool
This tool answers what a source shows today. Its output also feeds a series recorded every day and kept: Resale sold comps, recovered by observation. A run gives you the current market; the series is the part that cannot be reconstructed afterwards, because the source overwrites it.