# Vinted Seller Scraper — Wardrobe, Reviews & Reputation (`crawloop/vinted-seller-scraper`) Actor

Scrape Vinted seller profiles, public wardrobe listings, and buyer reviews by member URL or seller ID. Export reputation, sold counts, prices, brands, sizes, conditions, photos, and review text across 22 Vinted markets. JSON export for Python, Node.js, and MCP — no browser.

- **URL**: https://apify.com/crawloop/vinted-seller-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 wardrobe listings

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/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 Seller Scraper — Wardrobe, Reviews & Reputation

> **Disclaimer:** Unofficial tool for publicly accessible Vinted member profiles, wardrobe listings, and buyer reviews. **Vinted** and related names are trademarks of Vinted Limited. Not affiliated with, sponsored by, or endorsed by Vinted Limited. Public fields only — no private messages, emails, or phone numbers.

**Vinted Seller Scraper** extracts a member’s **public profile**, **wardrobe listings**, and **buyer reviews** from a member URL or numeric seller ID. Use it as a **Vinted API alternative** to export **reputation**, **sold counts**, **prices**, **brands**, **sizes**, **conditions**, **photos**, and **review text** across **22 Vinted markets** — JSON dataset ready for **Python**, **Node.js**, **MCP**, Sheets, and n8n.

This is a **seller / wardrobe / reviews** Actor, not a catalog keyword search scraper. Paste `/member/{id}` links (or IDs) and get structured rows you can filter by `type`.

**Best for:** reseller due diligence, closet exports, seller lead lists, and reputation checks before you buy.

| Vinted Seller Scraper | Vinted Monitor |
| :--- | :--- |
| **Vinted Seller Scraper** ◄── you are here | [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) |

### When to use this Actor

- **Vinted seller due diligence** — reputation score, review breakdown, business flag, sold/bought counts
- **Vinted wardrobe scraper** — public closet: title, price, brand, size, condition, photos
- **Vinted reviews scraper** — buyer feedback text, star rating, reviewer username, related item id
- **Batch member intel** — many profile URLs or seller IDs in one run
- **Python / Node.js / MCP pipelines** — Apify dataset JSON, no browser

### When not to use this Actor

- **Catalog / keyword search** — use [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) for `/catalog` URLs, keywords, and new-listing alerts
- **Sold listing comps** — Vinted hides sold items; use [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) for completed-sale prices
- **Private messages, emails, or phone numbers** — not collected
- **Official Vinted Pro API replacement** — public JSON only; residential proxy required

### Key features

- **Member URL or seller ID** — `/member/12345-username` on FR, DE, UK, PL, ES, IT, and 16 more TLDs
- **Three row types** — `seller`, `listing`, `review` in one dataset (filter in Sheets/API)
- **22 Vinted markets** — domain taken from each URL; `domain` is the fallback for numeric IDs
- **JSON path, no Playwright** — lightweight `curl_cffi` session, 128–512 MB RAM
- **Per-seller caps** — `maxItemsPerSeller` and `maxReviewsPerSeller`
- **Proxy-ready** — Apify Residential recommended (DataDome)

### Input parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `startUrls` | Array | — | Vinted member / seller profile URLs |
| `sellerIds` | Array | — | Numeric user IDs (resolved on `domain`) |
| `domain` | String | `fr` | Default TLD for IDs (`fr`, `de`, `co.uk`, …) |
| `includeProfile` | Boolean | `true` | One seller row per member |
| `includeListings` | Boolean | `true` | Public wardrobe listings |
| `includeReviews` | Boolean | `true` | Public buyer reviews |
| `maxItemsPerSeller` | Integer | `100` | Wardrobe cap (`0` skips listings) |
| `maxReviewsPerSeller` | Integer | `50` | Review cap (`0` skips reviews) |
| `listingOrder` | String | `newest_first` | Wardrobe sort |
| `proxyConfiguration` | Object | Residential | Apify Proxy settings |

#### Input example

```json
{
    "startUrls": [
        { "url": "https://www.vinted.fr/member/12345-example" }
    ],
    "sellerIds": ["67890"],
    "domain": "fr",
    "includeProfile": true,
    "includeListings": true,
    "includeReviews": true,
    "maxItemsPerSeller": 50,
    "maxReviewsPerSeller": 20,
    "listingOrder": "newest_first",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Output

Each dataset item has `type`: `seller`, `listing`, or `review`.

| Field | Rows | Description |
| :--- | :--- | :--- |
| `type` | all | `seller` / `listing` / `review` |
| `sellerId` | all | Numeric Vinted user ID |
| `username` | seller | Public login |
| `profileUrl` | seller | Member URL |
| `feedbackReputation` | seller | Reputation score |
| `soldCount` / `itemCount` | seller | Lifetime sold counter and active listings |
| `isBusiness` | seller | Business-account flag |
| `title` / `price` / `currency` | listing | Asking price |
| `brand` / `size` / `condition` | listing | Card fields |
| `photoUrls` | listing | Image URLs |
| `rating` / `feedback` | review | Stars and public text |
| `reviewerUsername` | review | Public reviewer login |
| `scrapedAt` | all | UTC timestamp |

#### Output example — seller

```json
{
    "type": "seller",
    "sellerId": "12345",
    "username": "example_shop",
    "profileUrl": "https://www.vinted.fr/member/12345-example_shop",
    "domain": "fr",
    "countryCode": "FR",
    "city": "Lyon",
    "itemCount": 86,
    "soldCount": 412,
    "feedbackCount": 390,
    "feedbackReputation": 1,
    "isBusiness": false,
    "scrapedAt": "2026-08-28T00:00:00Z"
}
```

#### Output example — listing

```json
{
    "type": "listing",
    "itemId": "999",
    "sellerId": "12345",
    "sellerUsername": "example_shop",
    "title": "Levi's 501",
    "url": "https://www.vinted.fr/items/999-levis-501",
    "price": 25.0,
    "currency": "EUR",
    "brand": "Levi's",
    "size": "W32",
    "condition": "Very good",
    "photoUrls": ["https://images.example/item.jpg"]
}
```

#### Output example — review

```json
{
    "type": "review",
    "reviewId": "55",
    "sellerId": "12345",
    "rating": 5,
    "feedback": "Fast shipping",
    "reviewerUsername": "buyer_one",
    "itemId": "999",
    "isSystem": false
}
```

### Use cases

- Check a Vinted seller’s reputation and recent reviews before paying
- Export a wardrobe for brand / size / price research
- Build a list of business sellers in one market
- Feed MCP, n8n, or Google Sheets with structured seller intel
- Compare a closet’s asking prices with [eBay sold comps](https://apify.com/crawloop/ebay-sold-listings-scraper) on the same SKU

### Integration examples

Replace `YOUR_TOKEN` with your Apify API token.

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/vinted-seller-scraper').call({
    startUrls: [{ url: 'https://www.vinted.fr/member/12345-example' }],
    maxItemsPerSeller: 50,
    maxReviewsPerSeller: 20,
    proxyConfiguration: {
        useApifyProxy: true,
        apifyProxyGroups: ['RESIDENTIAL'],
    },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((row) => row.type === 'seller'));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/vinted-seller-scraper").call(
    run_input={
        "startUrls": [{"url": "https://www.vinted.fr/member/12345-example"}],
        "maxItemsPerSeller": 50,
        "maxReviewsPerSeller": 20,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
        },
    }
)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(len(items), [row for row in items if row.get("type") == "seller"])
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~vinted-seller-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": [{"url": "https://www.vinted.fr/member/12345-example"}],
    "maxItemsPerSeller": 50,
    "maxReviewsPerSeller": 20,
    "proxyConfiguration": {
      "useApifyProxy": true,
      "apifyProxyGroups": ["RESIDENTIAL"]
    }
  }'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call `crawloop/vinted-seller-scraper`.

Example prompts:

- "Run Vinted Seller Scraper for this member URL and return the seller row plus the 20 newest wardrobe listings as JSON"
- "Scrape Vinted seller reviews for seller ID 12345 on the French market and summarize the last 15 ratings"
- "Chain Vinted Monitor then Vinted Seller Scraper: watch a catalog search, then scrape wardrobe and reviews for the sellers that appear"

### Suite next step

To watch new catalog listings (and Discord/Telegram alerts) instead of one closet, run [Vinted Monitor](https://apify.com/crawloop/vinted-monitor). After a wardrobe export, compare asking prices with [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper).

### FAQ

#### Is this a generic Vinted scraper?

No. Catalog/search Actors such as [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) take keywords or `/catalog` URLs. This Actor is a **Vinted seller scraper**: member URL or ID → profile, wardrobe, reviews.

#### Do I need a Vinted login?

No. It reads public member JSON. Private closets and messages are not available.

#### Do I need proxies?

**Yes, residential.** Datacenter IPs are usually blocked by DataDome after one or two requests. Default input uses Apify Residential; geo follows `domain` when you do not set a proxy country.

#### Can I scrape Vinted search results?

Not with this Actor. Pass member URLs or seller IDs only. For catalog search and new-listing alerts, use [Vinted Monitor](https://apify.com/crawloop/vinted-monitor).

#### Why are there three row types?

So you can filter the dataset: profiles (`type=seller`), closet (`type=listing`), feedback (`type=review`) without mixing columns in one object.

#### Are sold items included?

Vinted does not expose sold listings on the public wardrobe. `soldCount` on the seller row is the lifetime counter from the profile, not a sold-item feed.

#### Which markets are supported?

`fr`, `de`, `at`, `be`, `nl`, `es`, `it`, `pt`, `pl`, `cz`, `sk`, `hu`, `ro`, `lt`, `lu`, `se`, `dk`, `fi`, `ie`, `gr`, `co.uk`, `com`. The domain is taken from each member URL; `domain` is only the fallback for numeric IDs.

#### Does this collect personal contact data?

No. Emails, phones, real names, birthdays, and private messages are not written to the dataset.

#### Can I call it from Python, Node.js, or MCP?

Yes. Use the Apify client examples above, or [Apify MCP](https://docs.apify.com/platform/integrations/mcp) with `crawloop/vinted-seller-scraper`.

### Related Actors

| Actor | Use for |
| :--- | :--- |
| **Vinted Seller Scraper** ◄── you are here | Seller profile, wardrobe, reviews |
| [Vinted Monitor](https://apify.com/crawloop/vinted-monitor) | Catalog scrape + new-listing alerts |
| [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | Completed-sale comps |
| [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper) | Live eBay ask prices |
| [Kleinanzeigen Scraper](https://apify.com/crawloop/kleinanzeigen-scraper) | German classified ads |
| [Marktplaats Scraper](https://apify.com/crawloop/marktplaats-scraper) | Dutch classified ads |

# Actor input Schema

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

Paste Vinted member profile URLs. The numeric ID in /member/12345-username is enough. Catalog and item URLs are ignored. Store / Console Try prefill uses a live public seller so the quality check succeeds.

## `sellerIds` (type: `array`):

Numeric Vinted user IDs when you do not have a member URL. Resolved on the Domain selected below.

## `domain` (type: `string`):

Market used for seller IDs (URLs keep their own domain). Residential proxy country follows this value when not set on the proxy.

## `includeProfile` (type: `boolean`):

Push one seller row per member: reputation, sold/bought counts, followers, business flag, city/country.

## `includeListings` (type: `boolean`):

Push public wardrobe items: title, price, brand, size, condition, photos, favourites.

## `includeReviews` (type: `boolean`):

Push public feedback left on this seller (rating, text, reviewer username, related item id).

## `maxItemsPerSeller` (type: `integer`):

Cap on wardrobe rows per seller. 0 skips listings even if Include wardrobe is on.

## `maxReviewsPerSeller` (type: `integer`):

Cap on review rows per seller. 0 skips reviews even if Include buyer reviews is on.

## `listingOrder` (type: `string`):

Sort order for wardrobe listings.

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

Residential proxies are strongly recommended. Vinted DataDome typically blocks datacenter IPs after one or two requests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.vinted.fr/member/57853971-giuliovillani"
    }
  ],
  "domain": "fr",
  "includeProfile": true,
  "includeListings": true,
  "includeReviews": true,
  "maxItemsPerSeller": 5,
  "maxReviewsPerSeller": 5,
  "listingOrder": "newest_first",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Default dataset items (seller, listing, and review rows).

# 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": [
        {
            "url": "https://www.vinted.fr/member/57853971-giuliovillani"
        }
    ],
    "maxItemsPerSeller": 5,
    "maxReviewsPerSeller": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/vinted-seller-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": [{ "url": "https://www.vinted.fr/member/57853971-giuliovillani" }],
    "maxItemsPerSeller": 5,
    "maxReviewsPerSeller": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/vinted-seller-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": [
    {
      "url": "https://www.vinted.fr/member/57853971-giuliovillani"
    }
  ],
  "maxItemsPerSeller": 5,
  "maxReviewsPerSeller": 5
}' |
apify call crawloop/vinted-seller-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/vinted-seller-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/Jjso363PDy3pPOawd/builds/ZCgGJlt3V1wcM8FlW/openapi.json
