# Vinted Smart Scraper - Cross-Country Arbitrage Scanner (`kazkn/vinted-smart-scraper`) Actor

Find profitable Vinted arbitrage across 26 markets, compare buy-low / sell-higher country price gaps, schedule deal alerts, monitor sellers, and export structured data to CSV, API, or webhooks.

- **URL**: https://apify.com/kazkn/vinted-smart-scraper.md
- **Developed by:** [KazKN](https://apify.com/kazkn) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 770 total users, 88 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 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 Smart Scraper — Cross-Country Arbitrage Scanner for 26 Vinted Markets

**Nike Air Force 1 in France: €35. Same pair in the Netherlands: €58.** That's a €23 gap per item — and it exists on thousands of products across Vinted every day.

**Vinted Smart Scraper** helps resellers find profitable Vinted arbitrage across countries. Search a niche, compare up to 5 Vinted markets, detect underpriced opportunities, then export the signal to CSV, API, webhooks, n8n, Discord, or Telegram workflows.

**Current public stats (June 4, 2026):** 456 users, 99 users in the last 30 days, 30 users in the last 7 days, 7,708 runs in the last 30 days, and a 5.0 rating from 4 reviews.

Current pricing is pay-per-event: results are priced per dataset item, with a small actor-start charge. No subscription, no waitlist, no lock-in.

### 🧭 Start With One of These 3 Workflows

| Workflow | Use this mode | What you get | Best for |
|---|---|---|---|
| 🌍 **Arbitrage Scanner** | `CROSS_COUNTRY` | `opportunityScore`, `buyCountry`, `sellCountry`, `spread`, `priceGapPercent` | Finding where to buy low and resell higher |
| ⚡ **Deal Alerts** | `SEARCH` + schedule/webhook | New cheap listings with filters and `maxItems: 100-300` | Catching deals before manual searchers |
| 👤 **Seller Watchlist** | `SELLER_PROFILE` | Seller inventory, profile stats, review/rating signals | Monitoring competitors and sourcing sellers |

Advanced modes are still available: `PRICE_TRACK` for exact listing price history, `SELL_THROUGH_TRACKER` for demand validation over time, `ITEM_DETAIL` for URL lookups, `SOLD_ITEMS` for explicit sold signals only, and `TRENDING` for engagement-ranked discovery.

### ✅ Arbitrage Workflow to Sell

Use this actor to make a buy/no-buy decision fast:

**Workflow to sell:** search opportunity -> compare countries -> detect underpriced listings -> alert/export -> buy/resell.

| 1. Search opportunity | 2. Compare countries | 3. Detect underpriced listings | 4. Alert / export | 5. Buy / resell |
|---|---|---|---|---|
| Pick a niche, brand, size, or seller | Run `CROSS_COUNTRY` across 2-5 markets | Sort by spread, price gap, and opportunity score | Send CSV/API/webhook/Telegram | Validate shipping, fees, condition, and demand before buying |

The main output to watch is the arbitrage summary row:

```json
{
  "recordType": "ARBITRAGE_SUMMARY",
  "query": "nike air force 1",
  "opportunityScore": 78,
  "buyCountry": "fr",
  "sellCountry": "nl",
  "spread": 23,
  "estimatedResellPrice": 58,
  "priceGapPercent": 65.7,
  "alertReason": "High spread: buy in fr around 35 EUR, compare resale in nl around 58 EUR."
}
```

### 👤 Who Should Run This?

- **Vinted arbitrageurs** watching price gaps across France, Germany, Italy, Spain, and the Netherlands
- **Resellers** who need a fast “is this underpriced?” signal before buying inventory
- **Deal hunters** who want scheduled alerts instead of refreshing Vinted manually
- **Pricing analysts** comparing active supply by country, brand, size, and condition
- **Agencies and automation builders** delivering Vinted opportunity feeds to clients

### 🧩 Ready-to-Use Apify Task Templates

Create an Apify Task with one of these inputs, run it once, then add a schedule or webhook. Use `maxItems: 100` for a focused scan and `300` for serious arbitrage or alert workflows. Recent debugging showed many paying users were accidentally running tiny 8-30 row jobs, which is too small for profitable market discovery.

| Template | Use it for | Default cadence | Main guardrail |
|---|---|---:|---|
| Cross-Country Arbitrage Scanner | Buy-low / sell-high country gaps | Daily or weekly | `maxItems: 300`, max 5 countries |
| Vinted Deal Alerts | New cheap listings for one niche | Every 15-60 min or daily | `maxItems: 100-300`, webhook/Telegram export |
| Seller Watchlist | Competitor seller stats and inventory signals | Daily | `SELLER_PROFILE` for stats; `PRICE_TRACK` for specific listings |

#### 1. Cross-Country Arbitrage Scanner

```json
{
  "mode": "CROSS_COUNTRY",
  "query": "nike air force 1",
  "countries": ["fr", "de", "nl", "it", "es"],
  "condition": ["very_good", "good"],
  "priceMin": 20,
  "priceMax": 90,
  "sortBy": "price_low_to_high",
  "maxItems": 300
}
```

Use this first. It answers: where is this product cheapest, where is it more expensive, and is the spread large enough to investigate?

#### 2. Vinted Deal Alerts

```json
{
  "mode": "SEARCH",
  "query": "carhartt detroit jacket",
  "countries": ["fr"],
  "condition": ["very_good", "good"],
  "priceMin": 30,
  "priceMax": 120,
  "sortBy": "newest_first",
  "maxItems": 100
}
```

Save as an Apify Task, schedule it every 15-60 minutes or daily, then send successful run results to a webhook, n8n, Discord, Telegram, Google Sheets, or your own API.

#### 3. Seller Watchlist

```json
{
  "mode": "SELLER_PROFILE",
  "sellerUrls": [
    "https://www.vinted.fr/member/49967486",
    "https://www.vinted.de/member/12345678"
  ]
}
```

Schedule this daily to watch seller rating, review count, follower count, item count, and sold item count.

For exact listings from a seller, use `PRICE_TRACK` and cap it at 100 rows:

```json
{
  "mode": "PRICE_TRACK",
  "itemUrls": [
    "https://www.vinted.fr/items/8140955190-air-force-1",
    "https://www.vinted.fr/items/8092158420-nike-air-force"
  ],
  "maxItems": 100,
  "trackingStoreName": "daily-seller-price-watchlist"
}
```

### 💸 Cost Guardrails

Free Apify accounts are best for proof runs: broad arbitrage/search/monitor workflows are transparently capped to **30 results**, Price Track URL watchlists to **10 item URLs**, and Seller Profile URL watchlists to **1 seller**. For scheduled `100` / `300` result Vinted monitors, use an Apify paid plan and save the setup as a Task.

Pricing today is `$0.002/result` + `$0.020/start` on Free, down to `$0.0015/result` + `$0.015/start` on Gold and above. Use Free-tier math as the conservative max:

| Output volume | Free plan max | Gold+ lower bound | Practical setup |
|---:|---:|---:|---|
| 300 emitted rows | ~$0.62/run | ~$0.47/run | One stable daily task |
| 1,000 emitted rows | ~$2.02 + split-run starts | ~$1.52 + split-run starts | 4 tasks of 250 rows or similar |
| 10,000 emitted rows | ~$20.02 + split-run starts | ~$15.02 + split-run starts | Only for serious market maps |
| Daily 1,000 emitted rows for 30 days | ~$60.60/month before split-run starts | ~$45.45/month before split-run starts | Cap `maxItems`; use Sell-Through deltas only when needed |

Important guardrails:

- The current runtime caps `maxItems` at **300 per run** and countries at **5 per run** for stability. Use multiple tasks if you need 1,000+ rows.
- Dataset rows are what drive the result fee. For arbitrage and deal alerts, control spend with `maxItems`; for Sell-Through Tracker, `emitActiveItems: false` can reduce daily charges after the first baseline.
- Start focused with `maxItems: 100`; use `300` for serious arbitrage scans or deal-alert tasks once the output is useful.
- For item URL watchlists, each watched URL can emit one status row per run; Sell-Through Tracker now caps watched URLs by `maxItems` for billing control.

### 📌 Advanced Sell-Through Report

| Status | What it means | What a reseller does next |
|---|---|---|
| `first_seen` | New item entered the tracker | Check if price is below your buy threshold |
| `still_active` | Item stayed visible | Watch price, favourites, or seller behavior |
| `missing` | Item disappeared once | Wait for confirmation before calling it sold |
| `likely_sold` | Item disappeared for enough scheduled runs | Treat it as demand signal |
| `reappeared` | Item came back after disappearing | Avoid counting it as a clean sale |
| `explicit_sold` | Vinted exposed it as sold | High-confidence sale signal |

Each Sell-Through Tracker run can also emit a final summary row:

```json
{
  "recordType": "SELL_THROUGH_DAILY_SUMMARY",
  "trackerId": "daily-nike-af1-fr-de-nl-it-es",
  "checkedAt": "2026-05-31T08:00:00.000Z",
  "newItems": 41,
  "activeItems": 784,
  "missingItems": 37,
  "likelySoldItems": 18,
  "explicitSoldItems": 3,
  "sellThroughRate": 0.0249,
  "avgPrice": 42.8,
  "topBrands": [
    { "brand": "Nike", "count": 171 },
    { "brand": "Adidas", "count": 88 }
  ],
  "dailySellThroughSignals": 21,
  "telegramText": "Vinted sell-through daily-nike-af1-fr-de-nl-it-es: 300 observed, 41 first seen, likely sold: 18, sold: 3, reappeared: 2."
}
```

Use this optional Sell-Through summary row after you already found a promising niche with arbitrage or deal-alert scans. It is useful for scheduled webhooks, Telegram alerts, and CSV reports. Item-level rows still include `recordType: "SELL_THROUGH_ITEM"`.

### 🎯 Who Is This For?

- 👟 **Fashion & sneaker resellers** who source in one country and sell in another
- 🔍 **Vinted buyers** hunting for the cheapest price across EU markets
- 📊 **Data analysts & developers** who need structured Vinted data for their projects
- 🏪 **Businesses** tracking competitor pricing on Vinted at scale

### ⚡ Why Use Vinted Smart Scraper?

- 💰 **Find cross-border price gaps**. Nike AF1 at €35 in FR, €58 in NL. PS5 at €167 in DE, €212 in ES. Compare up to 5 countries per run across 26 supported markets.
- 🏷️ **Price your listings right** by comparing active market prices and sell-through signals over time
- 🕵️ **Track competitor sellers** — monitor their pricing, inventory, and sell-through rates
- 📈 **Spot trends before everyone else** — see which brands and items are gaining momentum
- 🤖 **AI-ready** — optional Claude Desktop + MCP integration for natural language queries

> 🏆 **Built for Vinted arbitrage workflows:** cross-country price gaps, scheduled deal alerts, seller watchlists, and advanced sell-through validation across 26 supported Vinted markets.

### ✅ Advanced Feature: Sell-Through Tracker

Vinted often hides sold listings from public search results. That makes classic "sold item" scraping unreliable: a missing listing can mean sold, removed, relisted, moderated, or temporarily hidden.

`SELL_THROUGH_TRACKER` solves this by comparing scheduled snapshots over time. First run builds a baseline for a query or watched URLs. Later runs mark each item as `active`, `missing`, `likely_sold`, `sold`, or `reappeared`.

Use it after an arbitrage or deal-alert scan reveals a promising niche. The advanced workflow is: **find opportunity -> save tracker -> schedule daily -> validate demand -> webhook/Telegram/CSV**.

Use it when you need:

- Sell-through signals for a niche, brand, size, or country
- Demand tracking before buying inventory
- Competitor monitoring without trusting Vinted's hidden sold pages
- A repeatable daily dataset for pricing and restock decisions

### 🎬 Video Tutorial — See It in Action

[![Vinted Scraper Tutorial](https://img.youtube.com/vi/eIrGbVEvO48/maxresdefault.jpg)](https://youtu.be/eIrGbVEvO48)

**▶️ Watch the full tutorial** — from search to export in under 2 minutes.

🇬🇧 [English tutorial](https://youtu.be/eIrGbVEvO48) | 🇫🇷 [Tutoriel français](https://youtu.be/WbC-aXW62IA) | 🇩🇪 [Deutsches Tutorial](https://youtu.be/VA_uDoMmfvk)

### 📊 What Data Can You Scrape from Vinted?

📦 **Item Listings** Title, price, brand, size, condition, color, photos
👤 **Seller Profiles** Username, rating, reviews, followers, verification
💰 **Price Comparison** Avg, median, min, max prices across countries
🔥 **Trending Items** Most favorited items sorted by engagement
✅ **Sold Signals** Only items Vinted explicitly marks as sold; returns empty when Vinted hides sold results
🏪 **Seller Closet** Complete inventory from any seller
📍 **26 Markets** FR, DE, UK, IT, ES, NL, PL, PT, BE, AT, LT, CZ, SK, HU, RO, HR, FI, DK, SE, EE, GR, IE, LU, LV, SI, US
📉 **Price Tracking** Monitor price drops and days listed
✅ **Sell-Through Tracking** Detect likely sold items from scheduled snapshots

👆 *Screenshot: Apify input form — select mode, enter query, pick countries*

### 🚀 How to Scrape Vinted in 5 Steps

1. **Create a free Apify account** at [apify.com](https://apify.com) (takes 30 seconds)
2. **Open** [Vinted Smart Scraper](https://apify.com/kazkn/vinted-smart-scraper?fpr=8fp2od) and click "Try for free"
3. **Pick a workflow**: Arbitrage Scanner, Deal Alerts, or Seller Watchlist
4. **Click Start** and wait a few seconds for results
5. **Download your data** in JSON, CSV, Excel, or connect via API

That's it. No coding, no proxies to configure, no Vinted account needed.

### 🔍 8 Powerful Vinted Scraping Modes

Start with `CROSS_COUNTRY` if your goal is arbitrage. Use `SEARCH` for scheduled deal alerts and `SELLER_PROFILE` for seller watchlists. Sell-Through is an advanced validation layer once you already know which niche is worth tracking.

| Mode | Best for | Recurring value |
|---|---|---|
| `CROSS_COUNTRY` | Arbitrage and country price-gap monitoring | Highest |
| `SEARCH` | Scheduled deal alerts for one niche | High when saved as a task |
| `SELLER_PROFILE` | Seller watchlists | High |
| `PRICE_TRACK` | Specific listing price changes | Medium to high for exact watchlists |
| `SELL_THROUGH_TRACKER` | Advanced demand and sell-through validation | High after you find a niche |
| `ITEM_DETAIL` | Deep inspection of known URLs | Low |
| `SOLD_ITEMS` | Explicit sold listings only | Limited by Vinted visibility |
| `TRENDING` | Fast trend discovery | Medium |

#### 🔍 1. Search Items

Search the Vinted catalog with filters: keywords, brand, size, price range, condition, category.

**Input example:**

```json
{
  "mode": "SEARCH",
  "query": "nike air force 1",
  "countries": ["fr"],
  "priceMin": 10,
  "priceMax": 100,
  "condition": "very_good",
  "maxItems": 100
}
```

**Output example** *(real data, February 2026):*

```json
[
  {
    "id": 8162184460,
    "title": "Nike air Max Vll",
    "price": "62 EUR",
    "brand": "Nike",
    "condition": "Neuf avec étiquette",
    "size": "45",
    "favourites": 10,
    "url": "https://www.vinted.fr/items/8162184460-nike-air-max-vll",
    "seller": "tchika28"
  },
  {
    "id": 8161922766,
    "title": "Nike Air Max 270",
    "price": "30 EUR",
    "brand": "Nike",
    "condition": "Bon état",
    "size": "39",
    "favourites": 2,
    "url": "https://www.vinted.fr/items/8161922766-nike-air-max-270",
    "seller": "samuel.19"
  },
  {
    "id": 8161664820,
    "title": "Nike Air Max 95",
    "price": "40 EUR",
    "brand": "Nike",
    "condition": "Bon état",
    "size": "41",
    "favourites": 9,
    "url": "https://www.vinted.fr/items/8161664820-nike-air-max-95",
    "seller": "valentin31k"
  }
]
```

> 💡 960 total results found for "nike air max" on Vinted France alone.

#### 📦 2. Item Detail

Get complete item information including full description, all photos, seller info, views, and favorites.

**Input example:**

```json
{
  "mode": "ITEM_DETAIL",
  "itemUrls": ["https://www.vinted.fr/items/8140955190-air-force-1"]
}
```

**Output example:**

```json
{
  "id": 8140955190,
  "title": "Air Force 1",
  "description": "Air force 1 parfait état, Pointure 40",
  "price": 45,
  "currency": "EUR",
  "brand": "Nike",
  "category": "Femmes Baskets",
  "condition": "New",
  "color": "Blanc",
  "photos": ["https://images1.vinted.net/..."],
  "favouriteCount": 49,
  "viewCount": 234,
  "isSold": false,
  "seller": {
    "id": 12345,
    "username": "seller_name",
    "rating": 0.98,
    "followerCount": 1500
  }
}
```

#### 👤 3. Seller Profile

Analyze any Vinted seller. Rating, reviews, followers, sold items count, verification status.

**Input example:**

```json
{
  "mode": "SELLER_PROFILE",
  "sellerUrls": ["https://www.vinted.fr/member/49967486"]
}
```

**Output example:**

```json
{
  "id": 49967486,
  "username": "monpetitdresss",
  "rating": 0.96,
  "ratingCount": 2628,
  "itemCount": 526,
  "soldItemCount": 3180,
  "followerCount": 10283,
  "followingCount": 3146,
  "verifications": { "email": true, "phone": false },
  "lastSeenAt": "2026-02-10T01:16:28+01:00"
}
```

#### 🌍 4. Cross-Country Vinted Price Comparison

**The feature no other Vinted scraper has.** Compare prices for the same product across multiple Vinted markets. Find where to buy cheap and sell expensive. Perfect for cross-border arbitrage.

**Input example:**

```json
{
  "mode": "CROSS_COUNTRY",
  "query": "nike air force 1",
  "countries": ["fr", "de", "es", "it", "nl"]
}
```

**Output example** *(real data, February 2026):*

```json
{
  "recordType": "ARBITRAGE_SUMMARY",
  "query": "playstation 5",
  "opportunityScore": 48,
  "buyCountry": "de",
  "sellCountry": "es",
  "spread": 45.1,
  "estimatedBuyPrice": 167.4,
  "estimatedResellPrice": 212.5,
  "priceGapPercent": 26.9,
  "alertReason": "Moderate spread: buy in de around 167.4 EUR, compare resale in es around 212.5 EUR.",
  "comparisons": [
    {
      "country": "fr",
      "avgPrice": 182.85,
      "medianPrice": 170,
      "minPrice": 23,
      "maxPrice": 440,
      "itemCount": 20,
      "currency": "EUR"
    },
    {
      "country": "de",
      "avgPrice": 167.4,
      "medianPrice": 150,
      "minPrice": 28,
      "maxPrice": 400,
      "itemCount": 20,
      "currency": "EUR"
    },
    {
      "country": "es",
      "avgPrice": 212.5,
      "medianPrice": 235,
      "minPrice": 45,
      "maxPrice": 310,
      "itemCount": 20,
      "currency": "EUR"
    }
  ],
  "bestBuyCountry": "de",
  "bestSellCountry": "es",
  "arbitrageSpreadPct": 26.9
}
```

> 🔥 **26.9% arbitrage spread found.** Buy PS5 in Germany (avg €167), sell in Spain (avg €212). Real opportunity detected in seconds.

👆 *Screenshot: Dataset output — cross-country price comparison with avg/median/min/max per country*

#### 💰 5. Vinted Price Tracking

Track prices of specific items over time. Monitor price drops, calculate days listed, and get price history.

```json
{
  "mode": "PRICE_TRACK",
  "itemUrls": [
    "https://www.vinted.fr/items/8140955190-air-force-1",
    "https://www.vinted.fr/items/8092158420-nike-air-force"
  ],
  "trackingStoreName": "nike-air-force-price-history"
}
```

Keep the same `trackingStoreName` when scheduling this mode. The actor writes price history to a named Apify key-value store so later runs can output real `priceHistory` and `priceDropPct` values.

#### ✅ 6. Daily Sell-Through Tracker

Detect what likely sold by comparing scheduled snapshots. First run builds a baseline from a search query and/or item URLs. Later runs mark items as `active`, `missing`, `likely_sold`, `sold`, or `reappeared`.

```json
{
  "mode": "SELL_THROUGH_TRACKER",
  "query": "nike air max",
  "countries": ["fr"],
  "maxItems": 300,
  "trackingStoreName": "nike-air-max-fr-tracker",
  "missingRunsThreshold": 2,
  "emitRunSummary": true
}
```

Use an Apify schedule daily or every few hours. Keep the same `trackingStoreName` and `trackerId` to compare runs over time. Send successful run outputs to CSV/API, an Apify webhook, a self-hosted n8n flow, or your Telegram bot.

You can also track specific item URLs:

```json
{
  "mode": "SELL_THROUGH_TRACKER",
  "itemUrls": [
    "https://www.vinted.fr/items/8140955190-air-force-1"
  ],
  "trackingStoreName": "watched-items-fr",
  "emitRunSummary": true
}
```

#### 🏷️ 7. Sold Signals

Return only listings that Vinted explicitly marks as sold. Vinted currently removes or hides sold listings from many public search results, so this mode may return an empty dataset instead of active listings.

For market research and sell-through analysis, use `SELL_THROUGH_TRACKER` instead. It compares scheduled snapshots and detects items that disappear over time.

```json
{
  "mode": "SOLD_ITEMS",
  "query": "adidas yeezy",
  "countries": ["fr"],
  "maxItems": 100
}
```

#### 🔥 8. Trending Items

Discover trending products sorted by engagement (favorites). Find what's hot on Vinted right now.

```json
{
  "mode": "TRENDING",
  "query": "nike",
  "countries": ["fr"],
  "maxItems": 100
}
```

The output includes `trendScore`, `favsGrowthRate`, `viewsGrowthRate`, and `listedHoursAgo` so you can rank items by engagement speed, not only by raw favorites.

### 🌍 26 Supported Vinted Markets

| Region | Markets |
|---|---|
| Western Europe | FR, DE, UK, IT, ES, NL, BE, AT, IE, LU |
| Central / Eastern Europe | PL, CZ, SK, HU, RO, HR, LT, LV, SI, EE |
| Northern Europe | FI, DK, SE |
| Southern Europe | PT, GR |
| North America | US |

🇫🇷 France `vinted.fr` EUR | 🇩🇪 Germany `vinted.de` EUR | 🇬🇧 United Kingdom `vinted.co.uk` GBP
🇮🇹 Italy `vinted.it` EUR | 🇪🇸 Spain `vinted.es` EUR | 🇳🇱 Netherlands `vinted.nl` EUR
🇵🇱 Poland `vinted.pl` PLN | 🇵🇹 Portugal `vinted.pt` EUR | 🇧🇪 Belgium `vinted.be` EUR
🇦🇹 Austria `vinted.at` EUR | 🇱🇹 Lithuania `vinted.lt` EUR | 🇨🇿 Czechia `vinted.cz` CZK
🇸🇰 Slovakia `vinted.sk` EUR | 🇭🇺 Hungary `vinted.hu` HUF | 🇷🇴 Romania `vinted.ro` RON
🇭🇷 Croatia `vinted.hr` EUR | 🇫🇮 Finland `vinted.fi` EUR | 🇩🇰 Denmark `vinted.dk` DKK
🇸🇪 Sweden `vinted.se` SEK | 🇪🇪 Estonia `vinted.ee` EUR | 🇬🇷 Greece `vinted.gr` EUR
🇮🇪 Ireland `vinted.ie` EUR | 🇱🇺 Luxembourg `vinted.lu` EUR | 🇱🇻 Latvia `vinted.lv` EUR
🇸🇮 Slovenia `vinted.si` EUR | 🇺🇸 United States `vinted.com` USD

### 💡 Vinted Scraper Use Cases

#### 🏪 For Resellers & Flippers

- **Find underpriced items** across different countries
- **Cross-border research**: compare Italy (avg €31) vs Germany (avg €51) to identify a spread before checking shipping, fees, demand, and resale risk
- **Monitor competitors' prices** and adjust your listings
- **Track price drops** on items you want to buy
- **Track sell-through over time** with scheduled snapshots; use Sold Signals only when Vinted explicitly exposes sold listings

#### 📊 For Market Researchers & Analysts

- **Analyze pricing trends** across the European second-hand market
- **Study seller behavior**: top sellers' strategies, pricing patterns, inventory size
- **Monitor brand popularity** and demand by country
- **Export data** for analysis in Excel, Google Sheets, or BI tools
- **Track seasonal trends** to predict demand spikes

#### 🤖 For Developers & Automation Builders

- **Build Vinted price comparison tools** using our structured JSON output
- **Create Vinted alerts** with Apify webhooks, self-hosted n8n, or your Telegram bot endpoint
- **Feed data into ML models** for price prediction
- **Integrate via Vinted API alternative** for structured scheduled data access
- **Connect to AI assistants** via MCP protocol (see below)

### 🧠 How to Use Vinted Scraper with Claude Desktop (MCP)

Use this when you want to query Vinted data through an AI assistant instead of manually opening datasets.

With the [Vinted MCP Server](https://apify.com/kazkn/vinted-mcp-server?fpr=8fp2od), you can connect Claude Desktop (or Cursor, Windsurf, or any MCP-compatible AI) directly to Vinted data. Ask questions in plain English:

- "Find me Nike Air Force 1 under €40 in France"
- "Compare PS5 prices across Germany, Spain, and Italy"
- "Show me the top sellers for vintage Levi's in the Netherlands"

**Setup takes 2 minutes:**

```json
{
  "mcpServers": {
    "vinted": {
      "command": "npx",
      "args": ["-y", "vinted-mcp-server"]
    }
  }
}
```

Add this to your Claude Desktop config and you're ready. Full instructions on [GitHub](https://github.com/KinderCN/vinted-mcp-server).

📖 **Deep dive:** [I Built an MCP Server for Vinted. Here's How Cross-Border Price Gaps Make You Money](https://dev.to/kazkn/i-built-an-mcp-server-for-vinted-heres-how-cross-border-price-gaps-make-you-money-39io)

### 🔌 How to Scrape Vinted via API

#### Via Apify API (cURL)

```bash
curl "https://api.apify.com/v2/acts/kazkn~vinted-smart-scraper/runs" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "mode": "SEARCH",
    "query": "nike",
    "countries": ["fr"],
    "maxItems": 100
  }'
```

#### Via JavaScript/Node.js

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('kazkn/vinted-smart-scraper').call({
  mode: 'CROSS_COUNTRY',
  query: 'nike air force 1',
  countries: ['fr', 'de', 'es', 'it'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Via Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("kazkn/vinted-smart-scraper").call(run_input={
    "mode": "CROSS_COUNTRY",
    "query": "nike air force 1",
    "countries": ["fr", "de", "es", "it"],
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### 🔗 Integrations

This Vinted scraper works with:

- **CSV / Excel exports** for daily reseller spreadsheets
- **Apify API** for programmatic market monitors
- **Apify webhooks** for run-complete notifications
- **Self-hosted n8n** for zero-subscription automations
- **Telegram bot workflows** through your own webhook endpoint
- **Claude Desktop / Cursor** via [Vinted MCP Server](https://apify.com/kazkn/vinted-mcp-server?fpr=8fp2od)

### 💰 Vinted Scraper Pricing

This Actor uses **pay-per-event** pricing:

- **Dataset item event:** $0.002 per result on Free, $0.0018 on Bronze, $0.0017 on Silver, and $0.0015 on Gold/Platinum/Diamond
- **Actor start event:** $0.020 per run start on Free, $0.018 on Bronze, $0.017 on Silver, and $0.015 on Gold/Platinum/Diamond
- In plain terms: from **$1.50 to $2.00 per 1,000 results**, plus a small start fee per run
- No subscription required. Pay only when you run the actor
- Daily schedules are safe when you cap `maxItems`; for Sell-Through Tracker, turn off `emitActiveItems` after the first baseline if you only need changes

### ⚡ Performance & Limits

🚀 **Speed:** ~100-500 items/minute (depends on proxy)
📦 **Max items per run:** 300 in the current stable runtime; split 1,000+ row monitoring across multiple tasks
🛡️ **Anti-blocking:** Automatic session rotation + Cloudflare bypass
⏱️ **Rate limiting:** Built-in smart rate limiter with automatic backoff
🌐 **Proxy support:** Datacenter & residential proxies supported

### ❓ Frequently Asked Questions

#### Is it legal to scrape Vinted?

Web scraping of publicly available data is generally legal in the EU and US. This scraper only accesses publicly visible product listings and seller profiles. The same data any visitor can see on vinted.com. No login required, no private data accessed.

#### What is the best Vinted scraper in 2026?

Vinted Smart Scraper is strongest when you need cross-country arbitrage intelligence: compare Vinted prices across 26 supported markets, detect buy-low / sell-higher gaps, schedule deal alerts, monitor sellers, and export structured data to CSV, API, or webhooks.

#### How to compare Vinted prices across countries?

Use the CROSS\_COUNTRY mode. Enter your search query and select which countries to compare, up to 5 countries per run. The scraper returns average, median, min, and max prices per country, plus `opportunityScore`, `buyCountry`, `sellCountry`, `spread`, `estimatedResellPrice`, `priceGapPercent`, and `alertReason`.

#### Can I use this as a Vinted bot alternative?

Yes. While this scraper doesn't automate buying or selling (which would violate Vinted's terms), it gives you the data intelligence to make better decisions. Monitor prices, find deals, track competitors, and analyze markets at scale.

#### Can I download Vinted data to Excel or Google Sheets?

Absolutely. Apify lets you export results in JSON, CSV, Excel, XML, and RSS. You can also connect directly to Google Sheets via the Apify integration for automatic updates.

#### How often can I run this Vinted scraper?

Use sensible schedules based on your workflow. For arbitrage scans, start daily with `maxItems: 100` or `300`. For deal alerts on fast-moving niches, run every 15-60 minutes with tight filters. Built-in rate limiting and proxy rotation help keep runs stable.

#### How do I avoid a surprise bill on daily schedules?

Set `maxItems`, keep countries to 5 or fewer per run, and split large scans into multiple tasks. On Free pricing, 300 emitted rows cost about `$0.62` per run including the start fee. For Sell-Through Tracker only, use `emitActiveItems: false` after the first baseline if you want lower daily result charges.

#### Does this work with all 26 supported Vinted markets?

Yes. The actor currently supports 26 Vinted markets: France, Germany, United Kingdom, Italy, Spain, Netherlands, Poland, Portugal, Belgium, Austria, Lithuania, Czech Republic, Slovakia, Hungary, Romania, Croatia, Finland, Denmark, Sweden, Estonia, Greece, Ireland, Luxembourg, Latvia, Slovenia, and the United States.

#### How is this different from the Vinted API?

Vinted doesn't offer a public API. This scraper acts as a Vinted API alternative, giving you structured access to the same data you'd see browsing the website. Plus it adds features Vinted itself doesn't have, like cross-country price comparison and arbitrage detection.

#### Can I connect this to AI assistants like Claude or ChatGPT?

Yes. The [Vinted MCP Server](https://apify.com/kazkn/vinted-mcp-server?fpr=8fp2od) lets you connect Claude Desktop, Cursor, or any MCP-compatible AI to Vinted data. Ask questions in plain English and get structured results.

### ⭐ Recent User CTA

If Vinted Smart Scraper saved you time or helped you find a real market gap, leave a short Apify review with your use case:

> "I use it to monitor \[brand/query] in \[countries] every \[day/week]. It helps me \[source inventory / price listings / track sellers / report to clients]."

That feedback decides which daily templates and output fields get improved next.

### 📦 Other Tools by KazKN

| Actor | Use case |
|---|---|
| **[Commercial Real Estate Brokerage Intel](https://apify.com/kazkn/commercial-real-estate-brokerage-intel?fpr=8fp2od)** | Find and structure commercial real estate brokerage intelligence for market research and sourcing workflows |
| **[Vet M\&A Actor](https://apify.com/kazkn/vet-mna-actor?fpr=8fp2od)** | Source and qualify veterinary practice acquisition targets by state |
| **[Watch Arbitrage MCP](https://apify.com/kazkn/watch-arbitrage-mcp?fpr=8fp2od)** | Monitor luxury watch references and spread alerts for dealer arbitrage workflows |

### 📋 Changelog

#### v1.2 (June 2026)

- Recentered the Store README around cross-country Vinted arbitrage and scheduled deal alerts
- Promoted 3 primary workflows above the fold: Arbitrage Scanner, Deal Alerts, and Seller Watchlist
- Added arbitrage-first output fields: `opportunityScore`, `buyCountry`, `sellCountry`, `spread`, `estimatedResellPrice`, `priceGapPercent`, and `alertReason`
- Moved Sell-Through Tracker to advanced demand validation instead of the first workflow new users see
- Updated cost guardrails to explain `maxItems` for arbitrage/alerts and `emitActiveItems` only for Sell-Through Tracker

#### v1.1 (May 2026)

- Added `SELL_THROUGH_TRACKER` as a daily demand-validation workflow
- Added Apify Task templates for daily sneaker monitoring, seller watchlists, and cross-country arbitrage
- Updated daily templates and input defaults toward `maxItems: 100` or `300`
- Added `SELL_THROUGH_DAILY_SUMMARY` output rows for schedules, webhooks, Telegram, and CSV reports
- Added cost guardrails for 300, 1,000, 10,000 emitted rows, and monthly daily schedules
- Added status guide for `first_seen`, `missing`, `likely_sold`, `reappeared`, and `explicit_sold`
- Updated Store copy, input guidance, and actor descriptions around 26 supported Vinted markets
- Clarified current pay-per-event pricing: dataset item fee plus actor start fee

#### v1.0 (February 2026)

- Initial release
- 8 scraping modes: Search, Item Detail, Seller Profile, Cross-Country, Price Track, Sell-Through Tracker, Sold Signals, Trending
- 26 Vinted markets supported
- Smart anti-blocking with Cloudflare bypass
- Initial pay-per-result pricing

# Actor input Schema

## `workflowPreset` (type: `string`):

Start with Arbitrage Scanner: search opportunity -> compare countries -> detect underpriced listings -> alert/export -> buy/resell. Use Deal Alerts for one-market alerts and Seller Watchlist for competitor sellers.

## `query` (type: `string`):

Enter the product, brand, model, or niche to compare. Works with Arbitrage Scanner, Deal Alerts, Sold Signals, Sell-Through Tracker, and Trending modes.

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

Select Vinted markets to compare or monitor. For Arbitrage Scanner, pick 2-5 countries to find buy-low / sell-higher price gaps.

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

Set how many items to return and cap billable dataset rows. Free Apify accounts are best for proof runs and are capped to 30 results for broad search/arbitrage/monitor workflows; use a paid Apify plan for scheduled 100/300-result monitors. Hard cap: 300 per run.

## `mode` (type: `string`):

Optional advanced override. Leave this empty for the 3 simple workflows above. Existing API users can still send mode directly.

## `itemUrls` (type: `array`):

Paste one or more Vinted item URLs. Required for Item Detail and Price Track modes. In Sell-Through Tracker, URL watchlists are capped by maxItems for billing control. Accepts any Vinted domain. If you leave mode on Search and only provide item URLs, the actor will auto-switch to Item Detail:

## `sellerUrls` (type: `array`):

Paste one or more Vinted seller profile URLs. Required for Seller Profile mode. Works with any Vinted domain (vinted.fr, vinted.de, vinted.co.uk, etc.). If you leave mode on Search and only provide seller URLs, the actor will auto-switch to Seller Profile mode.

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

Filter results by item condition. Leave empty to include all conditions.

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

Set a minimum price in local currency (€ for most countries, £ for UK). Leave empty for no minimum.

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

Set a maximum price in local currency. Leave empty for no maximum.

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

Choose how to sort your results.

## `categoryId` (type: `integer`):

Enter a Vinted category number to filter by type. Find it in the URL when browsing a category on vinted.fr (e.g. catalog\[]=5 → enter 5). Leave empty for all categories.

## `brandIds` (type: `array`):

Enter brand numbers to filter by brand. Find them in the Vinted URL after selecting a brand filter (e.g. brand\_ids\[]=53 → 53 = Nike). Leave empty for all brands.

## `sizeIds` (type: `array`):

Enter size numbers to filter by size. Find them in the Vinted URL after selecting a size filter. Leave empty for all sizes.

## `includeSellerDetails` (type: `boolean`):

Enable paid seller enrichment to get seller verification status, rating, review count, and response time when supported by the selected mode. Makes the run slower but gives richer reseller risk data.

## `includePhotos` (type: `boolean`):

Enable to include all item photo URLs in the output. Disable for smaller, faster exports.

## `trackingStoreName` (type: `string`):

Named key-value store used by Price Track and Sell-Through Tracker to persist history across scheduled runs. Keep the same value for the same tracker.

## `trackerId` (type: `string`):

Optional stable ID for this tracker. Leave empty to auto-generate from query, countries, filters, maxItems, and item URLs. Use a custom value when creating scheduled trackers for clients.

## `missingRunsThreshold` (type: `integer`):

How many consecutive scheduled runs an item must disappear before it is marked likely\_sold. Use 2 to reduce false positives from ranking changes.

## `emitActiveItems` (type: `boolean`):

When enabled, Sell-Through Tracker outputs active baseline items too. Disable after the first run if you only want missing/likely\_sold/sold changes and lower daily result charges.

## `emitRunSummary` (type: `boolean`):

Adds one SELL\_THROUGH\_DAILY\_SUMMARY row at the end of each Sell-Through Tracker run. Keep enabled for daily schedules, webhooks, Telegram alerts, and CSV reports. Disable only if you need item rows only.

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

Leave empty for small scheduled runs. Only change proxy settings if your run fails, slows down, or needs a larger multi-task setup.

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

Set how many pages to scrape at once. Use 3-5 without proxy, 10-20 with residential proxy.

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

Set how many times to retry a failed request before skipping it.

## `requestDelayMs` (type: `integer`):

Set wait time between requests in milliseconds. Use 0 with proxy, 500-1000 without. Helps avoid rate limits.

## Actor input object example

```json
{
  "workflowPreset": "ARBITRAGE_SCANNER",
  "query": "nike air force 1",
  "countries": [
    "fr",
    "de",
    "nl",
    "it",
    "es"
  ],
  "maxItems": 100,
  "mode": "",
  "itemUrls": [
    "https://www.vinted.fr/items/5765415416-nike-air-max"
  ],
  "sellerUrls": [
    "https://www.vinted.fr/member/12345678-username"
  ],
  "sortBy": "relevance",
  "includeSellerDetails": false,
  "includePhotos": false,
  "trackingStoreName": "vinted-sell-through-tracker",
  "missingRunsThreshold": 2,
  "emitActiveItems": true,
  "emitRunSummary": true,
  "maxConcurrency": 5,
  "maxRequestRetries": 3,
  "requestDelayMs": 500
}
```

# Actor output Schema

## `arbitrageOpportunities` (type: `string`):

No description

## `arbitrageItems` (type: `string`):

No description

## `overview` (type: `string`):

No description

## `trending` (type: `string`):

No description

## `sellerProfiles` (type: `string`):

No description

## `allResults` (type: `string`):

No description

## `usageNotices` (type: `string`):

No description

## `dailySummary` (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 = {
    "query": "nike air force 1",
    "maxItems": 100,
    "itemUrls": [
        "https://www.vinted.fr/items/5765415416-nike-air-max"
    ],
    "sellerUrls": [
        "https://www.vinted.fr/member/12345678-username"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kazkn/vinted-smart-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 = {
    "query": "nike air force 1",
    "maxItems": 100,
    "itemUrls": ["https://www.vinted.fr/items/5765415416-nike-air-max"],
    "sellerUrls": ["https://www.vinted.fr/member/12345678-username"],
}

# Run the Actor and wait for it to finish
run = client.actor("kazkn/vinted-smart-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 '{
  "query": "nike air force 1",
  "maxItems": 100,
  "itemUrls": [
    "https://www.vinted.fr/items/5765415416-nike-air-max"
  ],
  "sellerUrls": [
    "https://www.vinted.fr/member/12345678-username"
  ]
}' |
apify call kazkn/vinted-smart-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/4UAPrwZb1XOlkCJKK/builds/kX2PtTNj8lEKaDXSa/openapi.json
