# Vinted Universal Scraper (`scrapifier/vinted-universal-scraper`) Actor

⚡ Scrape Vinted by filters or just by pasting a URL! Search any keyword; filter by brand, category, size, colour, condition, price & currency on any Vinted country. Enrich items with the seller's profile, beat the 960-per-search cap with deep scrape, export clean data with photos — CSV/JSON/Excel.

- **URL**: https://apify.com/scrapifier/vinted-universal-scraper.md
- **Developed by:** [Scrapifier](https://apify.com/scrapifier) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.02 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🕸️ Vinted Scraper

Extract Vinted listings by keyword, brand, category or URL — and export them as structured JSON, CSV or Excel. No code required.

[![Apify Actor](https://apify.com/actor-badge?actor=scrapifier/vinted-universal-scraper)](https://apify.com/scrapifier/vinted-universal-scraper)

### 📋 Contents

- [Overview](#-overview)
- [How to use](#-how-to-use)
- [Input](#-input)
- [Output](#-output)
- [Pricing](#-pricing)
- [Proxy and performance](#-proxy-and-performance)
- [Integrations](#-integrations)
- [Related Actors](#-related-actors)
- [FAQ](#-faq)
- [Support](#-support)

### 📖 Overview

Search Vinted the easy way — by filters or by URL — and collect every matching item. For each listing you get the title, price (plus total price with Buyer Protection), brand, size, condition, favourites, views, all photos, the seller, and a direct link.

- Works on **any Vinted country** (fr, com, de, it, es, co.uk, and 17 more).
- Search by keyword, brand, category, size, colour, condition, price and currency — or just paste a Vinted URL.
- Optionally enrich every item with the **seller's full profile** (feedback, location, sales, followers).
- Exports to JSON, CSV, Excel, or the Apify dataset API.
- Pay per result — no subscription.

### 🚀 How to use

1. Choose how to search: type one or more **keywords**, pick a **brand** by name, choose colour/condition, set a price range and country — **or** paste a Vinted search/brand/category URL into **Vinted URLs**.
2. Set **Max results** (how many items to collect), and turn on **Deep scrape** to go beyond a single search's limit.
3. Start the run.
4. Download your data from the **Storage** tab, or fetch it from the API.

> 💡 Easiest of all: filter however you like on Vinted, copy the address bar, and paste that URL — every filter is kept.

### 📥 Input

| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| Vinted URLs | `urls` | array of strings | — | Catalog/search, brand or category URLs. Empty = use the filters below. |
| Keywords | `search_text` | array of strings | `["nike"]` | One or more keywords — each searched separately (one per line). |
| Vinted country | `country` | select | `fr` | Which marketplace (sets domain + default currency). |
| Brands | `brands` | array of strings | — | Brand names (e.g. Nike, Zara) — matched automatically. |
| Condition | `conditions` | select (multi) | — | New with tags / New without tags / Very good / Good / Satisfactory / Not fully functional. |
| Colour | `colors` | select (multi) | — | 29 colours. Empty = any. |
| Min / Max price | `price_from` / `price_to` | integer | — | Price range, in the country's currency. |
| Sort by | `order` | select | `newest_first` | Newest · Relevance · Price low→high · Price high→low. |
| Swap-only items | `only_swappable` | boolean | `false` | Only items open to swapping. |
| Max results | `max_results` | integer | `100` | Items to collect per keyword / per URL. `0` = as many as possible. |
| Deep scrape | `deep_scrape` | boolean | `false` | Collect far more than a single search's ~960-item limit. |
| Include seller details | `include_seller_details` | boolean | `false` | Add each seller's feedback, location, items, followers. |
| Flat columns | `flatten` | boolean | `false` | Add flat `seller_login` / `seller_id` / `photo_url` columns for CSV/Excel. |
| Category / Brand / Size / Material IDs | `catalog_ids` / `brand_ids` / `sizes` / `material_ids` | array of strings | — | Advanced numeric IDs (easiest via a pasted URL). |
| Proxy configuration | `proxyConfiguration` | object | Apify Proxy | Proxy settings (recommended for large runs). |

<details>
<summary>Example input</summary>

```json
{
  "search_text": ["nike"],
  "country": "fr",
  "brands": ["Nike"],
  "conditions": ["6"],
  "price_from": 10,
  "price_to": 60,
  "order": "newest_first",
  "max_results": 200,
  "include_seller_details": true
}
```

</details>

### 📤 Output

Each item is stored as one dataset item. Export it as JSON, CSV or Excel, or read it from the API.

| Field | Description |
|---|---|
| `id` | Vinted item ID |
| `url` | Direct link to the item |
| `title` | Listing title |
| `price` | Item price (seller's asking price) |
| `currency` | Currency code |
| `total_price` | Total price incl. Buyer Protection |
| `service_fee` | Buyer Protection fee |
| `brand` | Brand name |
| `size` | Size label |
| `condition` | Item condition |
| `is_new_with_tags` | Whether the item is brand new with tags |
| `favourites` | Number of favourites (likes) |
| `views` | View count |
| `is_for_swap` | Whether the seller is open to swap |
| `photo` / `photos[]` | Main photo + all photo URLs (full size) |
| `dominant_color` | Main photo dominant colour |
| `seller{}` | `login`, `profile_url`, `is_business` (+ feedback, city, country, items, followers with **Include seller details**) |
| `scraped_at` | Extraction timestamp |
| `search_url` | The search this item came from |

<details>
<summary>Example output</summary>

```json
{
  "id": 9453626155,
  "url": "https://www.vinted.fr/items/9453626155-nike-w-ld1000",
  "title": "Nike W LD_1000",
  "price": 45.0,
  "currency": "EUR",
  "total_price": 46.85,
  "service_fee": 1.85,
  "brand": "Nike",
  "size": "39",
  "condition": "New with tags",
  "is_new_with_tags": true,
  "favourites": 3,
  "views": 41,
  "is_for_swap": false,
  "photo": "https://images1.vinted.net/.../f800/....jpeg",
  "photos": ["https://images1.vinted.net/...", "..."],
  "dominant_color": "#1467B7",
  "seller": {
    "login": "jornas59",
    "profile_url": "https://www.vinted.fr/member/26154389-jornas59",
    "is_business": false,
    "city": "Napoli",
    "country": "Italia",
    "feedback_count": 23,
    "feedback_reputation": 1.0,
    "item_count": 60,
    "followers_count": 12
  },
  "scraped_at": "2026-07-21 14:58:00"
}
```

</details>

### 💰 Pricing

From **$1.50 per 1,000 items**, with automatic volume discounts down to **$1.02** at higher tiers. No subscription — you pay only for the results you extract. New Apify users can try the Actor with their free monthly platform credits.

### 🛡️ Proxy and performance

- A proxy is recommended for large or frequent runs — Apify Residential works best and lets you pick the country.
- Each search returns up to ~960 items; turn on **Deep scrape** to collect far more from the same query.
- Start with a small **Max results** to validate your filters, then increase it.
- Give one or more **keywords** (bulk, one per line) to cover several searches in a single run.

### 🔌 Integrations

Run the Actor from the [Apify API](https://docs.apify.com/api/v2), the [JavaScript](https://docs.apify.com/sdk/js) or [Python](https://docs.apify.com/sdk/python) clients, or connect it to Make, Zapier, n8n, Google Sheets and Slack through Apify integrations. Each run's data is available as JSON or CSV via the dataset API.

### 🔗 Related Actors

- [Leboncoin Universal Scraper](https://apify.com/scrapifier/leboncoin-universal-scraper) — listings from Leboncoin.fr.
- [SeLoger Universal Scraper](https://apify.com/scrapifier/seloger-universal-scraper) — French real-estate listings.

Need another marketplace? Open an issue.

### ❓ FAQ

**How do I search a specific country?**

Set **Vinted country** (e.g. `com` for international/USD, `de` for Germany). Pasted URLs keep their own domain.

**Can I collect a whole category?**

Yes. Leave the keywords empty, paste a category URL (or pick filters), and turn on **Deep scrape** for large pulls.

**How fresh is the data?**

It is collected live at runtime.

### 💬 Support

Questions or issues? Post them in the **Issues** tab and I will respond quickly. If the Actor is useful to you, a review is appreciated.

# Actor input Schema

## `urls` (type: `array`):

Paste one or more Vinted URLs — a catalog/search URL (all its filters are kept), a brand URL (e.g. /brand/53-nike) or a category URL (e.g. /catalog/1904-women). Leave empty to build a search with the filters below instead.

## `search_text` (type: `array`):

One or more keywords — each is searched separately (bulk), one keyword per line (e.g. "nike air", "robe zara", "vintage jacket"). Do NOT put several keywords on one line. Empty = the whole category.

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

Which Vinted marketplace to search. Sets the domain and default currency.

## `brands` (type: `array`):

Filter by brand name (e.g. Nike, Zara, Levi's) — resolved automatically to Vinted brand IDs. For exact control, use 'Brand IDs' below.

## `conditions` (type: `array`):

Item condition. Empty = any.

## `colors` (type: `array`):

One or more colours. Empty = any.

## `price_from` (type: `integer`):

Lowest price to include (in the selected country's currency).

## `price_to` (type: `integer`):

Highest price to include.

## `order` (type: `string`):

Result ordering.

## `only_swappable` (type: `boolean`):

Only items the seller is open to swapping.

## `catalog_ids` (type: `array`):

Vinted category IDs (e.g. 1904 = Women, 5 = Men). Easiest to get by pasting a category URL above. Empty = all categories.

## `brand_ids` (type: `array`):

Exact Vinted brand IDs (e.g. 53 = Nike, 2703 = Jordan). Combined with 'Brands' above.

## `sizes` (type: `array`):

Vinted size IDs (size IDs depend on the category — get them from a filtered catalog URL).

## `material_ids` (type: `array`):

Vinted material IDs (e.g. cotton, leather) — get them from a filtered catalog URL.

## `currency` (type: `string`):

ISO currency code (e.g. EUR, GBP). Defaults to the selected country's currency.

## `max_results` (type: `integer`):

How many items to collect per keyword / per URL (0 = as many as possible). A single search reaches up to 960; turn on 'Deep scrape' to go further.

## `deep_scrape` (type: `boolean`):

A single search returns at most ~960 items. Turn this on to collect far more from the same query.

## `include_seller_details` (type: `boolean`):

Add each seller's profile to every item: feedback score & count, city, country, number of items, followers, last seen. (Slightly slower.)

## `flatten` (type: `boolean`):

Add flat seller\_login / seller\_id / photo\_url columns for CSV/Excel exports.

## `emit_input_status` (type: `boolean`):

Add an input\_status report to the run's OUTPUT record.

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

Recommended for large runs — a proxy (Apify Residential works best) keeps big jobs reliable and lets you pick the country.

## Actor input object example

```json
{
  "search_text": [
    "nike"
  ],
  "country": "fr",
  "order": "newest_first",
  "only_swappable": false,
  "max_results": 100,
  "deep_scrape": false,
  "include_seller_details": false,
  "flatten": false,
  "emit_input_status": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `items` (type: `string`):

All Vinted items extracted by this run.

# 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 = {
    "search_text": [
        "nike"
    ],
    "max_results": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapifier/vinted-universal-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 = {
    "search_text": ["nike"],
    "max_results": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "search_text": [
    "nike"
  ],
  "max_results": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapifier/vinted-universal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapifier/vinted-universal-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/gUQvzcaGCNDSM8Zk8/builds/d0qL9gimyxO0Uaea8/openapi.json
