# Vinted Scraper - Search, Category & Seller Listings (`parsebird/vinted-scraper`) Actor

Scrape Vinted listings from search, category, or seller profile URLs: title, price, photos, brand, condition, size, seller info, and fees. Export JSON, CSV, Excel.

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

## Pricing

from $0.50 / 1,000 products

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 - Search, Category & Seller Listings

Vinted Scraper extracts product listings from [Vinted](https://www.vinted.com) using search URLs, category URLs, or seller profile URLs: title, price, photos, brand, condition, size, seller info, favourites, views, and fees.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">Paste a Vinted search, category, or seller profile link and get every listing back as structured data — including full photo sets, seller details, service fees, and total buyer price.</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
parsebird/vinted-scraper on Apify. Call: ApifyClient("TOKEN").actor("parsebird/vinted-scraper").call(run_input={"startUrls":[{"url":"https://www.vinted.com/catalog?search_text=iphones"}],"maxProducts":50}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: startUrls (array of {"url":...} objects — Vinted search URLs like vinted.com/catalog?search_text=..., category URLs like vinted.com/catalog/1037-outerwear, or seller profile URLs like vinted.com/member/12345678), maxProducts (integer, default 100, 0 = unlimited). Any Vinted country domain works (vinted.com, vinted.co.uk, vinted.de, etc.) and search filter params (brand_ids[], price_from, size_ids[], status_ids[]) pasted into a search URL are forwarded automatically. Output fields include title, price, photos, brand_title, status, size_title, user, favourite_count, view_count, service_fee, total_item_price, url, and id. Full actor spec: GET https://api.apify.com/v2/acts/parsebird~vinted-scraper (Bearer TOKEN). Get token: https://console.apify.com/account/integrations
```

### What is Vinted Scraper?

Vinted Scraper is an [Apify Actor](https://apify.com/actors) for extracting structured listing data from [Vinted](https://www.vinted.com), the second-hand fashion marketplace. Give it a search URL, a category URL, or a seller profile URL and it returns every matching product as a clean JSON row — no manual copy-pasting required.

Use it as a **Vinted API alternative**, a **Vinted price tracker**, or a repeatable data pipeline for resale research, brand monitoring, or inventory sourcing. Results download as JSON, CSV, Excel, XML, or HTML, or you can fetch them programmatically through the [Apify API](https://docs.apify.com/api/v2).

### What can Vinted Scraper do?

- 🔎 Scrape **keyword search** results, including any filter already applied to the URL (brand, price range, size, condition, color)
- 📂 Scrape **category listings** from any Vinted catalog page
- 👤 Scrape a **seller's entire wardrobe** from their profile URL
- 🌍 Works across **any Vinted country domain** — vinted.com, vinted.co.uk, vinted.de, vinted.fr, and more
- 📸 Returns **full photo sets** with all thumbnail sizes, not just the main image
- 💶 Returns **item price, service fee, and total buyer price** separately
- ⚙️ Run on demand, schedule recurring runs, or connect results to [Apify integrations](https://apify.com/integrations) like Google Sheets, Zapier, Make, and webhooks
- 📤 Export data in JSON, CSV, Excel, XML, RSS, or HTML from the Apify dataset

### What data can you extract from Vinted?

| Field | Type | Description |
|-------|------|-------------|
| `title` | string | Product title |
| `price` | object | Current price with `amount` and `currency_code` |
| `photos` | array | All product images with every thumbnail size |
| `brand_title` | string | Brand name |
| `status` | string | Product condition (e.g. "Very good") |
| `size_title` | string | Size information |
| `user` | object | Seller info — username, profile URL, photo, business status |
| `favourite_count` | number | Number of likes/favourites |
| `view_count` | number | Product view count |
| `service_fee` | object | Buyer protection fee amount and currency |
| `total_item_price` | object | Total price including fees |
| `url` | string | Direct link to the listing |
| `id` | number | Unique product ID |

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | array of URLs | **Yes** | — | Vinted search, category, or seller profile URLs |
| `maxProducts` | integer | No | `100` | Maximum products to scrape across all start URLs. `0` = unlimited |

**Search URLs:**

```
https://www.vinted.com/catalog?search_text=vintage+jacket
https://www.vinted.com/catalog?search_text=adidas&brand_ids[]=53
```

**Category URLs:**

```
https://www.vinted.com/catalog/1037-outerwear
https://www.vinted.co.uk/catalog/10-dresses
```

**Seller profiles:**

```
https://www.vinted.com/member/12345678
```

**Example input:**

```json
{
  "maxProducts": 50,
  "startUrls": [
    { "url": "https://www.vinted.com/catalog?search_text=iphones" }
  ]
}
```

### Output example

```json
{
  "id": 8567830076,
  "title": "iPhone 11 64gb,82 battery capacity",
  "price": { "amount": "60.0", "currency_code": "USD" },
  "brand_title": "Apple",
  "status": "Good",
  "size_title": "",
  "user": {
    "id": 3146552798,
    "login": "landons20",
    "profile_url": "https://www.vinted.com/member/3146552798-landons20",
    "business": false
  },
  "favourite_count": 4,
  "view_count": 0,
  "service_fee": { "amount": "3.7", "currency_code": "USD" },
  "total_item_price": { "amount": "63.7", "currency_code": "USD" },
  "url": "https://www.vinted.com/items/8567830076-iphone-11-64gb82-battery-capacity",
  "content_source": "catalog",
  "photos": [
    { "id": 36052542004, "is_main": true, "url": "https://images1.vinted.net/t/04_02481.../f800/1775351472.jpeg" }
  ]
}
```

Download in JSON, HTML, CSV, or Excel from the dataset page, or fetch rows programmatically through the API.

### How to scrape Vinted listings

1. Open Vinted Scraper on Apify and click **Try for free**.
2. Go to Vinted, run your search or open a category/seller page, and copy the URL.
3. Paste it into `startUrls` and set `maxProducts`.
4. Start the run and wait for the dataset to populate — most runs finish in seconds to a few minutes.
5. Download results as JSON, CSV, Excel, HTML, XML, or RSS.
6. Automate it with [Apify scheduling](https://docs.apify.com/platform/schedules), [integrations](https://apify.com/integrations), or the [Apify API](https://docs.apify.com/api/v2).

### How to use the Vinted API in Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("parsebird/vinted-scraper").call(run_input={
    "startUrls": [{"url": "https://www.vinted.com/catalog?search_text=vintage+jacket"}],
    "maxProducts": 100,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items[:2])
```

### How to use the Vinted API in JavaScript

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('parsebird/vinted-scraper').call({
    startUrls: [{ url: 'https://www.vinted.com/member/12345678' }],
    maxProducts: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use cases

- **Resale research** — Track prices for a specific model or brand across active listings
- **Sourcing** — Monitor category pages for new low-priced inventory to resell
- **Seller monitoring** — Track a competitor or supplier's entire active wardrobe
- **Brand analytics** — Aggregate condition, pricing, and demand (favourites/views) by brand
- **Price alerts** — Schedule recurring runs and diff results to catch new listings or price drops

### How it works

1. Classifies each start URL as a keyword search, a category page, or a seller profile
2. Opens a lightweight session on the matching Vinted country domain to obtain the cookies its own web app uses
3. Forwards every filter already present in a search or category URL (brand, price, size, status, and more) straight to Vinted's catalog API
4. Paginates through results automatically, refreshing the session if it expires mid-run
5. Pushes normalized product rows to the dataset and stops once `maxProducts` or your spending limit is reached

### How much does it cost to scrape Vinted?

Vinted Scraper uses pay-per-event pricing — you pay per product returned, not per underlying API call.

| Event | Price per event | Price per 1,000 |
|-------|-----------------|-----------------|
| `product-scraped` | $0.002 (Free) / $0.0015 (Bronze) / $0.001 (Silver) / $0.0005 (Gold) | **$2.00 / $1.50 / $1.00 / $0.50** |

Scraping 50 products from a keyword search costs about $0.10 on the Free plan. Apify's free trial credits cover typical test runs.

### Is it legal to scrape Vinted?

Vinted Scraper extracts publicly available listing data from the same catalog and profile endpoints Vinted's own website uses to render search results and seller pages. Scraping publicly accessible data is generally lawful, but you're responsible for how you use the results — always review [Vinted's Terms of Service](https://www.vinted.com/terms-and-conditions) and Apify's guide on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) before running large or automated workloads.

### Related marketplace scrapers

| Actor | Best for |
|-------|----------|
| [eBay Sold Listings Scraper](https://apify.com/parsebird/ebay-sold-listings-scraper) | Historical sold-item prices on eBay |
| [Craigslist Scraper](https://apify.com/parsebird/craigslist-scraper) | Local classifieds and marketplace listings |
| [MercadoLibre Scraper](https://apify.com/parsebird/mercadolibre-scraper) | Latin American e-commerce listings |

### FAQ

**Do I need a Vinted account or API key?**
No. This actor uses the same public catalog and profile endpoints Vinted's own website calls, using a lightweight anonymous session — no login required.

**Can I use filters like price range, size, or condition?**
Yes. Apply the filters on vinted.com itself, copy the resulting search URL (with all its query parameters), and paste it into `startUrls`. Every filter in the URL is forwarded to Vinted automatically.

**Does this work on Vinted sites outside the US?**
Yes. The actor detects the domain in each start URL and scrapes that country's Vinted site directly — vinted.co.uk, vinted.de, vinted.fr, and others all work the same way.

**Why did my search return fewer than `maxProducts` results?**
Vinted caps how many results a single search or category query returns (typically under 1,000 items). Narrow the search or split it into multiple `startUrls` to collect more.

**What happens if I paste an old-style or unrecognized Vinted URL?**
The actor falls back to a keyword search built from the URL's last path segment and logs a warning, rather than failing the run.

**Can I schedule recurring runs?**
Yes. Use [Apify scheduling](https://docs.apify.com/platform/schedules) to run daily, hourly, or at any interval, then connect the dataset to integrations or webhooks.

**How do I report a problem or request a field?**
Open an issue from the Actor page in Apify Console and include the run ID, input, and the start URL that needs review.

# Actor input Schema

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

Vinted search URLs (vinted.com/catalog?search\_text=...), category URLs (vinted.com/catalog/1037-outerwear), or seller profile URLs (vinted.com/member/12345678).

## `maxProducts` (type: `integer`):

Maximum products to scrape across all start URLs. Use 0 for unlimited.

## `proxy` (type: `object`):

Vinted is protected by Cloudflare and bot-detection. Residential Apify Proxy is used by default for reliability.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.vinted.com/catalog?search_text=iphones"
    }
  ],
  "maxProducts": 50,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrls": [
        {
            "url": "https://www.vinted.com/catalog?search_text=iphones"
        }
    ],
    "maxProducts": 50,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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": [{ "url": "https://www.vinted.com/catalog?search_text=iphones" }],
    "maxProducts": 50,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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": [
    {
      "url": "https://www.vinted.com/catalog?search_text=iphones"
    }
  ],
  "maxProducts": 50,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parsebird/vinted-scraper --silent --output-dataset

```

## MCP server setup

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