# Vinted Scraper — US, UK & EU Listings, Prices, No Login (`yugenox/vinted-scraper`) Actor

Scrape listings from 23 Vinted sites (US, UK, France and more) by search term, category or URL: title, price, buyer-protection fee and total, brand, size, condition, favourites, photos. Optional description, colours, material, upload time. Seller names and profiles never collected. No login.

- **URL**: https://apify.com/yugenox/vinted-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Vinted Scraper: US, UK and EU listings, prices and photos

Scrape **Vinted**, the second-hand fashion marketplace, by **search term, category or URL** on **vinted.com (US), vinted.co.uk, vinted.fr and 20 more Vinted country sites**. Every listing comes with the **title, price, Buyer Protection fee and total price, brand, size, condition, favourites, promotion flag, private or business seller, and photos**. Turn on **item details** to add the **description, every photo, the category path, colours, material, upload time, availability and reserved status**. No login, no cookies, no Vinted account.

### What you get

| | |
|---|---|
| **Listing** | Item ID, URL, title, Vinted site and currency |
| **Price** | Item price, Buyer Protection fee, total price as Vinted shows it, discounted price |
| **Item** | Brand, size, condition (as shown and as a code: new-with-tags, new-without-tags, very-good, good, satisfactory) |
| **Popularity** | Favourites, promoted ("bumped") flag |
| **Media** | Main photo (800 px), 310×430 thumbnail, dominant colour |
| **Seller** | Only whether it is a private seller or a business (Vinted Pro) |
| **Item details** (optional) | Description, all photos, category, category ID and full category path, colours, material, upload time, in stock or sold, reserved, hidden, buy-now flags, brand ID |
| **Search** | The search term, category, result URL and position that found the item |

**Sellers stay anonymous.** The scraper never collects a seller's name, username, user ID, profile photo, profile link, ratings or contact details, and never opens seller pages. Phone numbers, e-mail addresses, @handles and social-media links that sellers write into titles and descriptions are removed.

### How to use it

1. Enter one or more **search terms**, e.g. `denim jacket`, `levis 501`, `barbour`.
2. Pick the **Vinted site** (United States is the default; UK, France, Germany, Italy, Spain and 17 more are in the list).
3. Optionally add a **category** (`Women > Jackets`, `Men > Denim jackets`, a category ID such as `1079`, or a Vinted category URL), **condition**, **minimum / maximum price** and **sort order** (relevance, newest first, price low to high, price high to low).
4. Set **Max listings** and run. Turn on **Include item details** when you need descriptions, category paths or upload times.

**Max listings** is the total for the run, shared fairly between your searches. You can also paste Vinted search, category, brand or item URLs from any Vinted site, with any filters you set on the site (brand, size, colour, material…).

#### Input examples

New-with-tags denim jackets on vinted.com under $50, newest first:

```json
{
  "searchTerms": ["denim jacket"],
  "category": "Women > Outerwear",
  "condition": ["new-with-tags"],
  "priceMax": 50,
  "sortBy": "newest",
  "maxItems": 200
}
```

Barbour jackets on Vinted UK with full item details (good for a daily price-monitoring schedule):

```json
{
  "country": "uk",
  "searchTerms": ["barbour", "barbour wax jacket"],
  "category": "Men > Jackets",
  "includeDetails": true,
  "maxItems": 300
}
```

Pasted URLs from different Vinted sites — a filtered search, a brand page and an item:

```json
{
  "startUrls": [
    { "url": "https://www.vinted.com/catalog?search_text=levis%20501&status_ids[]=2&order=price_low_to_high" },
    { "url": "https://www.vinted.com/brand/173188-woolrich" },
    { "url": "https://www.vinted.fr/catalog?search_text=veste%20en%20jean&order=newest_first" },
    { "url": "https://www.vinted.co.uk/items/10194328383-hand-painted-lotus-moon-denim-jacket" }
  ],
  "maxItems": 100
}
```

### Output example

```json
{
  "site": "vinted.com",
  "country": "us",
  "itemId": 10207255549,
  "title": "Woolrich Sherpa Lined Black Wash Denim Jacket, Sz XS, NWT",
  "url": "https://www.vinted.com/items/10207255549-woolrich-sherpa-lined-black-wash-denim-jacket-sz-xs-nwt",
  "price": 38,
  "currency": "USD",
  "serviceFee": 2.6,
  "totalPrice": 40.6,
  "discountedPrice": null,
  "brand": "Woolrich",
  "brandId": 173188,
  "size": "XS / US 2",
  "condition": "New with tags",
  "conditionCode": "new-with-tags",
  "favouriteCount": 39,
  "isPromoted": false,
  "sellerType": "private",
  "photoUrl": "https://images1.vinted.net/t/02_00411_huWdMRJdWB6uq7Fpqxm5UvGG/f800/90acae2f.webp?s=150fcc4066f081fc081e0f0ef97be7ff61d5d9c1",
  "thumbnailUrl": "https://images1.vinted.net/t/02_00411_huWdMRJdWB6uq7Fpqxm5UvGG/310x430/90acae2f.webp?s=cd6abf7010655888c216d22b5fee2a20c8cf5644",
  "photoUrls": ["https://images1.vinted.net/t/02_00411_huWdMRJdWB6uq7Fpqxm5UvGG/f800/90acae2f.webp?s=150fcc4066f081fc081e0f0ef97be7ff61d5d9c1", "…"],
  "photoCount": 10,
  "dominantColor": "#BDBEC0",
  "description": "Brand new with tags. \n\nWomen’s size XS, measuring approximately;\n19” pit to pit\n22” length\n24” sleeve\n16” shoulder to shoulder\n\nThis Woolrich jacket combines du…",
  "category": "Denim jackets",
  "categoryId": 1079,
  "categoryPath": ["Women", "Clothing", "Outerwear", "Jackets", "Denim jackets"],
  "colors": ["Black", "Brown"],
  "material": "Cotton, Denim, Faux fur",
  "uploadedAgo": "5 hours ago",
  "uploadedAt": "2026-10-01T18:40:00.000Z",
  "availability": "in-stock",
  "isReserved": false,
  "isHidden": false,
  "canBuy": true,
  "instantBuy": true,
  "searchQuery": "denim jacket",
  "searchCategory": "Women > Clothing > Outerwear",
  "searchUrl": "https://www.vinted.com/catalog?search_text=denim%20jacket&catalog[]=1037&status_ids[]=6&price_from=10&price_to=50&currency=USD&order=newest_first",
  "position": 106,
  "detailsFetched": true,
  "scrapedAt": "2026-10-01T23:40:00.000Z"
}
```

Every row has the same 42 columns (see the Output tab); a value Vinted doesn't publish is `null`. `description`, `category`, `categoryId`, `categoryPath`, `colors`, `material`, `uploadedAgo`, `uploadedAt`, `availability`, `isReserved`, `isHidden`, `canBuy`, `instantBuy` and `brandId` are filled when **Include item details** is on (or for pasted item URLs). Condition and category names are in the language of the Vinted site; `conditionCode` is the same on every site.

### Use cases

- **Resale price research**: what second-hand jeans, jackets, sneakers or bags actually sell for, by brand, size and condition.
- **Price monitoring**: track new listings and asking prices for a brand or category with **Newest first** and a daily schedule.
- **Reselling and sourcing**: find underpriced items across Vinted's US, UK and EU sites; compare prices between countries.
- **Trend analysis**: which brands and categories get the most favourites; supply by size and condition.
- **Market research**: share of new-with-tags vs used items, private vs business sellers, promoted listings.

### FAQ

**Do I need a Vinted account, cookies or a login?** No. The scraper reads the same public pages any visitor sees. It never logs in and needs nothing from you except a search term, a category or a URL.

**Which Vinted sites are supported?** vinted.com (United States), vinted.co.uk, vinted.fr, vinted.de, vinted.it, vinted.es, vinted.nl, vinted.be, vinted.at, vinted.lu, vinted.ie, vinted.pt, vinted.pl, vinted.cz, vinted.sk, vinted.lt, vinted.hu, vinted.ro, vinted.se, vinted.dk, vinted.fi, vinted.gr and vinted.hr. They all run the same Vinted platform. Prices come in each site's currency.

**How many listings can I get?** Vinted shows at most 960 listings (10 pages of 96) per search. When you ask for more, the scraper splits the search into its subcategories using Vinted's own counts, and a category without subcategories into its five conditions, so a broad search can return thousands of listings. Set **Max listings** to 0 for as many as possible. When even that can't reach everything, the status message says how many were left and suggests a narrower category or filter.

**How fast is it?** 96 listings per page and about 2–3 seconds per page, so 1,000 listings take under a minute. **Include item details** opens each item page, which adds about a second per listing.

**How do I pick a category?** Type its English name or path: `Women > Jackets`, `Men > Denim jackets`, `Kids > Girls clothing`, `Sneakers`. A name that exists in several places (such as "Denim jackets" under Women, Men, Girls and Boys) uses the top-most one and the run log lists the others with their IDs. Category IDs (`1079`) and Vinted category URLs always work, and they are the same on every Vinted site.

**Can I filter by brand, size or colour?** Set the filter on Vinted's website and paste the URL under **Vinted URLs** — every filter in the URL is kept. Brand pages (`vinted.com/brand/…`) work too.

**Why is `uploadedAt` approximate?** Vinted shows upload times only as "5 hours ago" or "3 weeks ago". `uploadedAgo` keeps that text and `uploadedAt` converts it, so it is as precise as the unit Vinted gives.

**What about sellers?** Vinted sellers are mostly private individuals, so the scraper collects item data only. It never collects a seller's name, username, user ID, profile photo, profile link, ratings, location or contact details and never opens seller pages (it skips seller-profile URLs you paste). It removes phone numbers, e-mail addresses, @handles and social-media links from titles and descriptions. `sellerType` only says whether the seller is private or a business.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If Vinted refuses datacenter IPs for a while, the run switches to residential proxies when your account has them — as long as that stays within the run's price — and otherwise stops with a plain message and what it saved.

**What does a run cost?** You pay a small fee per run, per search, per listing saved and per listing whose item page was read. See the Pricing tab.

**Is it legal to scrape Vinted?** This Actor only collects publicly available data: listings that anyone can see on Vinted without an account, such as titles, prices, brands, sizes, conditions and photos. Collecting publicly available data is generally legal, but you're responsible for how you use it. Listings are published by private individuals; the scraper leaves out their names, profiles and contact details and removes phone numbers, e-mails and handles from their texts. You must follow privacy laws such as GDPR, UK GDPR and CCPA, as well as Vinted's terms. Vinted's robots.txt also reserves its content against use for AI training, so don't use the data to train AI models. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from pages Vinted shows to any visitor without logging in. It never uses a login, never contacts sellers, never buys or favourites anything, and follows Vinted's robots.txt (which keeps it away from member, inbox and checkout pages).

*This Actor is not affiliated with, endorsed by or sponsored by Vinted. Vinted is a trademark of Vinted UAB.*

# Actor input Schema

## `searchTerms` (type: `array`):

What to search for, as you would type it on Vinted, e.g. "denim jacket", "levis 501", "barbour". Each term is a separate search. Leave empty to browse a whole category.

## `country` (type: `string`):

Which Vinted country site to search. Prices come in that site's currency. Pasted URLs always use their own site.

## `category` (type: `string`):

Optional: limit the search to one Vinted category, or browse it without search terms. Type its English name or path ("Women > Jackets", "Men > Denim jackets", "Sneakers"), its id ("1079") or paste a Vinted category URL. Category ids are the same on every Vinted site.

## `maxItems` (type: `integer`):

Maximum number of listings for the whole run, shared fairly between your searches. 0 = as many as possible. Vinted shows up to 960 listings per search; bigger searches are split into subcategories automatically.

## `includeDetails` (type: `boolean`):

Also open each item page for the description, every photo, the category path, colours, material, upload time, availability and reserved status. One extra page per listing, charged as "Listing details".

## `startUrls` (type: `array`):

Optional: Vinted search, category or brand URLs (vinted.com/catalog?search_text=…, /catalog/1079-denim-jackets, /brand/…, with any filters you set on the site) or item URLs (vinted.co.uk/items/…). Any Vinted country site works. Seller profile pages are never scraped.

## `condition` (type: `array`):

Only items in these conditions. Leave empty for any.

## `priceMin` (type: `integer`):

Lowest item price, in the site's currency (USD on vinted.com, GBP on vinted.co.uk, EUR on most EU sites).

## `priceMax` (type: `integer`):

Highest item price, in the site's currency.

## `sortBy` (type: `string`):

Order of the results, as on Vinted. Newest first is the one to use for monitoring new listings.

## `includePromoted` (type: `boolean`):

Vinted mixes promoted ("bumped") listings into the results. Turn off to leave them out; they are not charged.

## `proxyConfiguration` (type: `object`):

Apify Proxy (datacenter) is the default and comes with every Apify plan. If Vinted refuses datacenter IPs for a while, the run switches to residential proxies when your account has them (within the run's price).

## `maxConcurrency` (type: `integer`):

How many item pages to read at the same time with "Include item details" (1–4). Requests to Vinted are spaced to about one per second either way.

## Actor input object example

```json
{
  "searchTerms": [
    "denim jacket"
  ],
  "country": "us",
  "maxItems": 50,
  "includeDetails": false,
  "sortBy": "relevance",
  "includePromoted": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 2
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped listings.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, counts, requests and proxy use.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "denim jacket"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/vinted-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["denim jacket"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/vinted-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "denim jacket"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/vinted-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/vinted-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1hxw3XWOER6MalLFa/builds/Ft7KejcktekAT7nKu/openapi.json
