# 🛍️ Vinted Scraper (`scraper-engine/vinted-scraper`) Actor

🛍️ Vinted Scraper extracts listings, prices, and item details from Vinted for smarter market research. 🚀 Fast, automated data collection for dropshipping, pricing, and competitor tracking. 📊 Effortless insights at scale.

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

## Pricing

from $4.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 — Catalog & Search Extractor

Extract clean, structured product data from any **Vinted** catalog or search page — across **every Vinted country domain** (`.com`, `.co.uk`, `.de`, `.fr`, `.it`, `.es`, `.pl`, …). Just paste a search URL and get back price, brand, size, condition, seller details and image galleries — no login required.

### ✨ Why Choose This Actor?

- **🌍 Works on every Vinted domain** — paste a `.com`, `.de`, `.fr` (or any) catalog URL.
- **🧼 Clean output** — flattened, ready-to-use JSON instead of Vinted's noisy raw API objects.
- **🌐 Smart proxy ladder** — runs proxy-free by default, then auto-escalates to datacenter and residential proxies only if Vinted blocks you. Cheaper and faster than always-on proxies.
- **🛡️ Anti-bot resilient** — browser TLS fingerprinting + exponential-backoff retries with automatic session re-warming.
- **💾 Live results** — items stream into the dataset as they're found; a stopped run still keeps everything collected so far.
- **📦 Bulk-friendly** — feed it many search URLs at once.

### 🔑 Key Features

| Feature | Description |
|---|---|
| 🔗 Bulk URLs | Scrape multiple searches in one run |
| 🎯 Item cap | Limit total items, or fetch the full retrievable window |
| ⏱️ Polite delays | Configurable delay + jitter between requests |
| 🌐 Proxy fallback | direct → datacenter → residential (sticky) |
| 📊 Section views | Overview, Pricing, Seller, Engagement, Media |

### 📥 Input

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Vinted catalog / search URLs (bulk supported). **Required.** |
| `maxItems` | integer | Max products to collect (`0` = no limit). |
| `requestDelay` | number | Seconds between requests (jitter added). |
| `proxyConfiguration` | object | Apify Proxy settings powering the fallback ladder. |
| `maxPagesPerUrl` | integer | Cap pages fetched per URL (`0` = no cap). |
| `maxRequestRetries` | integer | Retries per blocked request. |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.vinted.com/catalog?search_text=nike&order=newest_first" }
  ],
  "maxItems": 100,
  "requestDelay": 1.0,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### 📤 Output

Each item is saved in this clean schema:

```json
{
  "id": 9126191763,
  "title": "Born Brown Suede Leather Peep Toe Sandal Booties",
  "price": { "amount": 38, "currency": "USD" },
  "brand": "Born",
  "url": "https://www.vinted.com/items/9126191763-born-...",
  "imageUrl": "https://images1.vinted.net/.../1780965676.jpeg",
  "thumbnails": [
    { "type": "thumb70x100", "url": "https://.../", "dimensions": "70x100" }
  ],
  "seller": {
    "id": 277625888,
    "username": "goodnightsuzie",
    "profileUrl": "https://www.vinted.com/member/277625888-goodnightsuzie"
  },
  "size": "8",
  "condition": "New without tags",
  "stats": { "favorites": 1, "views": 0 }
}
```

| Field | Description |
|---|---|
| `id` | Vinted item ID |
| `title` | Listing title |
| `price.amount` / `price.currency` | Numeric price + currency code |
| `brand` | Brand name |
| `url` | Direct listing link |
| `imageUrl` | Main photo |
| `thumbnails` | All thumbnail sizes with dimensions |
| `seller.*` | Seller ID, username, profile URL |
| `size` | Size label |
| `condition` | Item condition |
| `stats.favorites` / `stats.views` | Engagement counters |

### 🚀 How to Use (Apify Console)

1. Log in at <https://console.apify.com> → **Actors**.
2. Open **Vinted Scraper**.
3. Paste one or more Vinted search/catalog URLs into **Vinted Search / Catalog URLs**.
4. (Optional) Set **Maximum Items** and proxy settings.
5. Click **Start** and watch results stream into the log in real time.
6. Open the **Output** tab — switch between the **Overview / Pricing / Seller / Engagement / Media** views.
7. Export to JSON / CSV / XLSX.

### 🤖 Use via API

```bash
curl -X POST "https://api.apify.com/v2/acts/%3CACTOR_ID%3E/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"startUrls":[{"url":"https://www.vinted.com/catalog?search_text=nike"}],"maxItems":50}'
```

### 💡 Best Use Cases

- 📈 Resale / reselling price research and sourcing.
- 🔎 Brand & competitor monitoring on second-hand marketplaces.
- 📊 Market & trend analysis for specific categories.
- 🗂️ Building product datasets for analytics or ML.

### 💳 Pricing

This Actor uses the **pay-per-event** model. You're billed per **scraped item** plus the standard Apify platform usage. Set a **Maximum Items** value (or a run budget) to control spend — the Actor stops cleanly when your limit is reached.

### ❓ FAQ

**Do I need a Vinted account?** No. The Actor uses Vinted's public catalog data and mints an anonymous session automatically.

**Why did I get fewer items than the search shows?** Vinted caps deep pagination at roughly 360 items per search, even when it advertises more. That's the maximum retrievable window — narrow your search (brand, size, price) to surface different items.

**Which countries are supported?** All of them — paste a URL from any Vinted domain.

**Do I need a proxy?** No. The Actor runs proxy-free and only escalates to datacenter/residential proxies if Vinted blocks the request.

### 🛟 Support & Feedback

Found a bug or want a new field? Open an issue on the Actor's **Issues** tab. Data is collected only from publicly available pages; you are responsible for compliant use (GDPR, CCPA, target ToS).

# Actor input Schema

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

One or more Vinted catalog or search URLs (any domain — .com, .co.uk, .de, .fr, .it …). Example: https://www.vinted.com/catalog?search\_text=nike. Supports bulk input — paste many URLs at once.

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

Maximum number of products to collect across all URLs. Set to 0 for no limit (fetches the full retrievable result window). Note: Vinted caps deep pagination at ~360 items per search.

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

By default the scraper runs WITHOUT a proxy. If Vinted blocks the request, it automatically falls back to a datacenter proxy, and then to a residential proxy (sticking with residential for the rest of the run). Configure Apify Proxy here to power those fallbacks.

## `maxPagesPerUrl` (type: `integer`):

Safety cap on the number of catalog pages fetched per URL. 0 means no cap (stop when results are exhausted).

## `maxRequestRetries` (type: `integer`):

How many times to retry a failed / blocked request (with exponential backoff) before giving up on that page.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.vinted.com/catalog?search_text=shoe%20grandma&order=newest_first"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxPagesPerUrl": 0,
  "maxRequestRetries": 5
}
```

# 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 = {
    "startUrls": [
        "https://www.vinted.com/catalog?search_text=shoe%20grandma&order=newest_first"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraper-engine/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 = {
    "startUrls": ["https://www.vinted.com/catalog?search_text=shoe%20grandma&order=newest_first"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scraper-engine/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 '{
  "startUrls": [
    "https://www.vinted.com/catalog?search_text=shoe%20grandma&order=newest_first"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scraper-engine/vinted-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraper-engine/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/mtJ7tuSfzsqnagxB6/builds/IYNvCwsdavdHb9CCe/openapi.json
