# Vinted Price Intelligence — Listings & Market Value (`maximacion/vinted-price-intelligence`) Actor

Scrape Vinted listings in 26 countries and get the market value of any item: median, quartiles, min and max price per country. No seller data. Pay only for the listings you get.

- **URL**: https://apify.com/maximacion/vinted-price-intelligence.md
- **Developed by:** [Maxime HAAS](https://apify.com/maximacion) (community)
- **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

**Know the market price of any item on Vinted — in every country, in one run.** Type what you are looking for, pick the countries, and get every matching listing plus a clean **price report**: median, quartiles, min and max price per country, outliers removed.

### Why Vinted Price Intelligence?

- 💶 **Market value in one click.** Turn hundreds of listings into the numbers you actually need: median price, 1st and 3rd quartiles, min, max and mean, per country and in the local currency. No spreadsheet work.
- 🌍 **26 Vinted countries, one run.** France, Germany, Spain, Italy, the UK, Poland, the Netherlands and 19 more, each in its own currency (EUR, GBP, PLN, CZK, SEK…). Compare markets side by side and spot arbitrage opportunities.
- 🛡️ **Reliable, and clean by design.** Built to keep working: blocks and broken pages are detected and retried, never silently returned as "0 results". It goes beyond Vinted's 960-results limit automatically. And it **never collects seller data** — no usernames, no profiles, no ratings.

You only pay for the listings you actually get.

### What you get

Each listing is one item of the dataset:

```json
{
    "itemId": "10058154953",
    "title": "Jean Levi's 501 vintage bleu clair W33 L32",
    "brand": "Levi's",
    "size": "W33 | FR 42",
    "condition": "Très bon état",
    "price": 35,
    "currency": "EUR",
    "priceWithProtection": 37.45,
    "favourites": 12,
    "country": "fr",
    "url": "https://www.vinted.fr/items/10058154953-jean-levis-501-vintage-bleu-clair",
    "photoUrl": "https://images1.vinted.net/t/…/f800/2e9bdb5f.webp",
    "scrapedAt": "2026-09-19T15:40:53.493Z"
}
```

With **Price report** enabled, you also get one summary item per country:

```json
{
    "type": "priceReport",
    "country": "fr",
    "currency": "EUR",
    "search": "levis 501",
    "count": 200,
    "median": 20.5,
    "q1": 15,
    "q3": 30,
    "min": 4,
    "max": 169,
    "mean": 25.62,
    "outliersExcluded": 0,
    "priceBasis": "listed",
    "generatedAt": "2026-09-19T16:05:12.201Z"
}
```

Download the results as JSON, CSV, Excel or HTML, or get them through the Apify API and integrations (Make, Zapier, Google Sheets, webhooks…). The price reports are also available as a single JSON record (`PRICE_REPORT`) in the run's key-value store.

### Who is it for?

- **Resellers and vintage shops**: price your stock right, find under-priced items to source, check what a brand is worth before buying.
- **Brands**: follow the resale value of your products, country by country, and how it evolves over time.
- **Analysts and agencies**: build second-hand market studies, price indexes and dashboards on fresh data.

### Filters

| Input                        | What it does                                                                                                                                     |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Search keyword**           | What to search for, as on Vinted (`levis 501`, `nike air force 1`).                                                                              |
| **Countries**                | One or more of the 26 Vinted marketplaces. Each country is searched separately, in its own currency.                                             |
| **Max listings per country** | How many listings to collect for each country (default 100).                                                                                     |
| **Price report**             | Adds the market value summary per country.                                                                                                       |
| **Sort by**                  | Newest first, price low to high, or price high to low.                                                                                           |
| **Brand**                    | `Nike`, or several: `Nike, Adidas`. Resolved to Vinted's exact brand filter.                                                                     |
| **Category**                 | A name in English, French, German, Spanish, Italian, Dutch or Polish (`jeans`, `Robes`, `sneakers`), a path (`Women > Jeans`), or a category id. |
| **Size**                     | `M`, `38`, `W32`… (several: `M, L`).                                                                                                             |
| **Condition**                | New with tags, new without tags, very good, good, satisfactory.                                                                                  |
| **Minimum / maximum price**  | In the local currency of each country.                                                                                                           |
| **Search URLs**              | Paste any Vinted search, category or brand URL: all its filters are used (color, material, size…).                                               |

**Tip:** build your search on vinted.fr (or any Vinted site) with all the filters you want, copy the URL, paste it in *Search URLs*. To run the same search in other countries, paste the same URL with the other domain (`vinted.de`, `vinted.co.uk`…).

### How much does it cost?

This Actor uses **pay-per-event** pricing: you pay for results, not for servers.

| Event                                     | Price                        |
| ----------------------------------------- | ---------------------------- |
| Listing saved to the dataset              | **$1.50 per 1,000 listings** |
| Price report (one per country and search) | **$0.05 per report**         |

Examples: 100 listings in France cost **$0.15**. The same 200-listing search in 5 countries with the price report costs 1,000 × $0.0015 + 5 × $0.05 = **$1.75**.

Duplicates, failed pages and retries are never charged. Set a *maximum cost per run* in the run options and the Actor stops cleanly when it is reached.

### How to use it

1. Click **Try for free**.
2. Type a keyword (e.g. `levis 501`), pick one or more countries, and tick **Price report**.
3. Click **Start**. A 100-listing run usually takes well under a minute.
4. Open the **Listings** or **Price reports** tab, or download the data.

To track prices over time, save your input as a task and **schedule** it (daily, weekly): each run gives you a dated snapshot of the market.

### FAQ

#### Are these sold prices?

No. Vinted does not publish the price of sold items: search results only contain **active listings**. The price report therefore describes **asking prices** (`"priceBasis": "listed"`) — what sellers currently ask, which is the price a buyer can actually pay today. To see how prices move, schedule the same search and compare the reports over time.

#### How is the price report computed?

On the listings collected in the run, for each country and search:

1. prices below 1 € (converted to the local currency) are removed;
2. the median of the remaining prices is computed;
3. prices above **10 × that median** are removed as outliers;
4. count, median, quartiles, min, max and mean are computed on the rest.

Quartiles use the inclusive method, identical to Excel `QUARTILE.INC` and Google Sheets `QUARTILE`: you get the same numbers in a spreadsheet. For stable statistics, collect at least 200 listings per country.

#### Why not views or upload dates?

Vinted's search results do not show them, and loading every listing page to get them would multiply the cost of a run by about 40. This Actor focuses on what matters for pricing.

#### Can I get more than 960 results?

Yes. Vinted never shows more than 960 results for one search. When you ask for more, the Actor automatically splits the search into price ranges and keeps going, without duplicates (tested with 2,500 listings in one country).

#### What about seller data and GDPR?

The Actor never collects seller data: no username, no user id, no profile link, no rating. Only listing information is saved. Search URLs of member profiles are refused.

#### Is it legal to scrape Vinted?

This Actor only collects publicly available listing data and no personal data. However, you are responsible for how you use the data and for complying with applicable laws and with Vinted's terms. If in doubt, ask a lawyer about your specific use case.

#### Something doesn't work?

Open an issue in the **Issues** tab with the run link: every issue is read and answered. Need a custom version or another marketplace? Ask there too.

### Technical details

- **HTTP only, no browser.** The Actor reads the data Vinted embeds in its server-rendered search pages (the Next.js payload), which is fast and cheap to run.
- **Silent failure detection.** A response is accepted only if it contains a valid catalog payload. An anti-bot challenge, a truncated or empty page, or a page announcing results but serving none counts as a **failed** request and is retried — it is never returned as an empty result.
- **Retry policy.** Up to 5 retries with randomized exponential backoff and a fresh session: 403/401 and suspicious pages are retried, 429 waits much longer before retrying, 5xx are retried, 404 and other 4xx fail immediately. Brotli is never requested (`Accept-Encoding: gzip, deflate`).
- **Proxies.** Residential proxies by default, with each Vinted domain visited through an IP of its own country.
- **Beyond the 960-results cap.** Price-sorted searches continue from the last price reached; newest-first searches are split into price ranges that resume right after the listings already seen.
- **Monitoring.** Every run logs and stores (`RUN_STATS` record) its errors by category — proxy, rate limit, blocked, network, other — plus HTTP status codes, duplicates and suspicious responses.
- **De-duplication.** A listing is saved once per country per run. The same item can appear in several countries (Vinted's cross-border listings), each with its local price.
- **Migrations.** Progress is saved after each page: a migrated run resumes where it stopped, without duplicates.

# Actor input Schema

## `keyword` (type: `string`):

What to search for, exactly as you would type it on Vinted (e.g. <code>levis 501</code>, <code>nike air force 1</code>). Leave empty to use only search URLs, or to browse a brand or a category.

## `countries` (type: `array`):

Vinted marketplaces to search with the keyword and filters. Each country is scraped separately and keeps its own currency (EUR, GBP, PLN, CZK, SEK…). Search URLs always run on their own domain.

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

Maximum number of listings saved for each country (and for each search URL). Vinted shows at most 960 results per search: beyond that, the actor automatically splits the search by price to go further.

## `priceReport` (type: `boolean`):

Adds one summary item per country with the median, quartiles, min, max and mean asking price of the listings found, outliers excluded. Charged as a separate event.

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

Order in which Vinted returns listings. With a price sort, the collected listings are the cheapest (or most expensive) ones.

## `brand` (type: `string`):

Brand name as written on Vinted, e.g. <code>Nike</code>. Several brands: comma-separated (<code>Nike, Adidas</code>).

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

Category name in English, French, German, Spanish, Italian, Dutch or Polish (e.g. <code>jeans</code>, <code>dresses</code>, <code>sneakers</code>), a path to be precise (<code>Women > Jeans</code>), or a Vinted category id (<code>183</code>). A name matching several categories selects all of them.

## `size` (type: `string`):

Size as displayed on Vinted, e.g. <code>M</code>, <code>38</code>, <code>W32</code>. Several sizes: comma-separated. Applied as Vinted's own size filter; with a category, only that category's sizes are used (e.g. <code>M</code> in men's clothing).

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

Keep only listings in these conditions.

## `priceMin` (type: `number`):

In the local currency of each country (EUR on vinted.fr, PLN on vinted.pl, GBP on vinted.co.uk…).

## `priceMax` (type: `number`):

In the local currency of each country.

## `searchUrls` (type: `array`):

Search, category or brand pages of any Vinted domain, e.g. <code>https://www.vinted.fr/catalog?search\_text=levis%20501\&brand\_ids\[]=10</code>. Each URL runs on its own domain. Member and item pages are not supported.

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

Vinted blocks datacenter IPs: residential proxies are needed. By default each Vinted domain is visited through an IP of its own country. Keep the default unless you use your own proxies.

## Actor input object example

```json
{
  "keyword": "levis 501",
  "countries": [
    "fr"
  ],
  "maxItems": 100,
  "priceReport": false,
  "sortBy": "newest",
  "searchUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `priceReport` (type: `string`):

No description

## `runStats` (type: `string`):

No description

# 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 = {
    "keyword": "levis 501",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximacion/vinted-price-intelligence").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 = {
    "keyword": "levis 501",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("maximacion/vinted-price-intelligence").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 '{
  "keyword": "levis 501",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call maximacion/vinted-price-intelligence --silent --output-dataset

```

## MCP server setup

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

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/bAfNp3ksfWWAlUktz/builds/JGLxCaAI6UXKEvl2L/openapi.json
