# Vinted Search Scraper (`axlymxp/vinted-search-scraper`) Actor

Scrape Vinted second-hand fashion listings at scale — price, brand, size, condition, photos, seller & views — via the official mobile API. Proxy-free, reliable, 20+ country markets. Search by keyword or paste any Vinted URL. Structured JSON for resale & price research. Pay only for results.

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

## Pricing

from $3.00 / 1,000 dataset items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Search Scraper

Extract **Vinted** second-hand fashion listings at scale through the platform's
**official mobile API** — the same backend the Vinted app uses. That means no
headless browser, no proxies, and no DataDome/CAPTCHA breakage: clean, structured
JSON with prices, brands, sizes, condition, photos, seller info and engagement
metrics, across **20+ country marketplaces**.

Search by keyword, or paste any Vinted **search / catalog / brand / member URL**
and the actor reads its filters automatically.

***

### Who is this for?

- **Resellers & flippers** — spot underpriced items, track what sells, source
  inventory across countries.
- **Price & market researchers** — monitor second-hand prices, brand demand and
  condition mix over time.
- **Brands & analysts** — measure how a label performs on the resale market
  (volume, price bands, engagement).
- **PropTech / e-commerce devs** — a stable JSON schema to power dashboards,
  price-comparison tools and alerts.

### Output fields

Each listing is one dataset row:

| Field                | Type    | Description                                                   |
| -------------------- | ------- | ------------------------------------------------------------- |
| `id`                 | integer | Vinted listing ID                                             |
| `url`                | string  | Canonical listing URL                                         |
| `title`              | string  | Listing title                                                 |
| `description`        | string  | Full text description (when *Include full description* is on) |
| `price`              | string  | Item price                                                    |
| `currency`           | string  | Price currency (e.g. USD, EUR, GBP)                           |
| `total_item_price`   | string  | Total incl. Buyer Protection                                  |
| `service_fee`        | string  | Buyer Protection fee                                          |
| `brand`              | string  | Brand name                                                    |
| `size`               | string  | Size label                                                    |
| `condition`          | string  | New with tags / Very good / Good …                            |
| `favourite_count`    | integer | Number of favourites (likes)                                  |
| `view_count`         | integer | Number of views                                               |
| `is_promoted`        | boolean | Promoted (bumped) listing                                     |
| `seller_id`          | integer | Seller user ID                                                |
| `seller_login`       | string  | Seller username                                               |
| `seller_business`    | boolean | Business (pro) seller flag                                    |
| `seller_profile_url` | string  | Seller profile URL                                            |
| `photo`              | string  | Main photo URL                                                |
| `photos`             | array   | All photo URLs                                                |
| `photo_count`        | integer | Number of photos                                              |
| `scraped_at`         | string  | Scrape timestamp (UTC, ISO-8601)                              |

### High-value use cases

1. **Sourcing & arbitrage** — pull the newest listings for a brand + size under a
   price cap, sort by price, and surface deals to relist.
2. **Price benchmarking** — snapshot a category daily and chart median price by
   condition to price your own inventory correctly.
3. **Brand demand tracking** — measure favourites/views per brand to see what's
   heating up before it sells out.
4. **Competitor monitoring** — watch a specific seller or catalog and export new
   listings to your CRM or a Google Sheet.
5. **Dataset building** — assemble a clean second-hand fashion dataset (title,
   price, brand, condition, images) for ML or analytics.

### Input parameters

| Field                   | Type    | Default            | Description                                                           |
| ----------------------- | ------- | ------------------ | --------------------------------------------------------------------- |
| `searchQueries`         | array   | `["nike air max"]` | Free-text keywords; each is scraped in turn                           |
| `startUrls`             | array   | –                  | Vinted search/catalog/brand/member URLs (filters read from the URL)   |
| `country`               | string  | `com`              | Marketplace: `com`, `fr`, `de`, `co.uk`, `es`, `it`, `pl`, `nl`, …    |
| `conditions`            | array   | –                  | Condition filter (New with tags, Very good, …)                        |
| `order`                 | string  | `newest_first`     | `newest_first`, `relevance`, `price_low_to_high`, `price_high_to_low` |
| `priceFrom` / `priceTo` | integer | –                  | Price range in the marketplace currency                               |
| `currency`              | string  | –                  | ISO currency for the price filter (USD, EUR, GBP, PLN…)               |
| `catalogIds`            | array   | –                  | Catalog/category IDs (from `/catalog/1904-shoes`)                     |
| `brandIds`              | array   | –                  | Brand IDs (from `/brand/53-nike`)                                     |
| `sizeIds` / `colorIds`  | array   | –                  | Size / color IDs                                                      |
| `includeDescription`    | boolean | `false`            | Also fetch each listing's full description                            |
| `maxItems`              | integer | `100`              | Stop after this many listings                                         |

> **Tip — going past ~1,000 results:** Vinted caps deep pagination per query at
> about 1,000 items. To collect more, split the job by `catalogIds`, `brandIds`
> or price bands (e.g. 0–20, 20–50, 50+).

#### Example input

```json
{
    "searchQueries": ["nike air max", "levis 501"],
    "country": "com",
    "conditions": ["6", "2"],
    "priceTo": 80,
    "order": "newest_first",
    "includeDescription": false,
    "maxItems": 200
}
```

#### Example output

```json
{
    "id": 9511053552,
    "url": "https://www.vinted.com/items/9511053552-nike-air-max-1-sc-field-purple",
    "title": "Nike Air Max 1 SC \u201cField Purple\u201d Men's 10.5 New",
    "price": "227.69",
    "currency": "USD",
    "total_item_price": "236.34",
    "service_fee": "8.65",
    "brand": "Nike",
    "size": "10.5",
    "condition": "New with tags",
    "favourite_count": 3,
    "view_count": 41,
    "is_promoted": false,
    "seller_id": 258105024,
    "seller_login": "vacantshowroom",
    "seller_business": false,
    "photo": "https://images1.vinted.net/…/f800/…jpeg",
    "photos": ["https://images1.vinted.net/…"],
    "photo_count": 5,
    "scraped_at": "2026-07-28T21:14:00Z"
}
```

### Scheduling & integrations

- **Schedule** runs (hourly/daily) from the Apify Console to keep a fresh feed.
- **Webhooks** can push each finished run to your endpoint, **Make**, or **Zapier**.
- Export to **JSON, CSV, Excel, or Google Sheets**, or pull from the **Dataset API**.

### Use it from an AI agent (MCP)

The dataset is clean and typed, so it plugs straight into AI workflows. Apify
Actors are callable over the **Model Context Protocol**, letting assistants like
Claude or Cursor run this scraper and reason over the results — "find Nike Air Max
under $60 in Very good condition and summarise the price range."

### FAQ

**Is there a result limit?** Vinted caps deep pagination at ~1,000 items per
query. Partition by catalog/brand/price to gather more.

**How fresh is the data?** Every run hits Vinted live, so results reflect the
marketplace at run time. Sort by `newest_first` for the latest listings.

**Does it need proxies?** No. It uses Vinted's mobile API with an anonymous token,
so it runs proxy-free and avoids the anti-bot walls the website enforces.

**Can I scrape a specific country?** Yes — set `country`, or paste a URL from that
marketplace (e.g. `vinted.fr`) and the host is detected automatically.

**Can I get item descriptions?** Yes — enable *Include full description*. It adds
one request per item, so it's slower but returns the full listing text.

**Is this affiliated with Vinted?** No. This is an independent tool that reads
publicly available listing data. Respect Vinted's Terms and applicable laws.

**It stopped mid-run — do I lose progress?** No. Progress is checkpointed to the
key-value store and resumes automatically on the same input.

# Actor input Schema

## `searchQueries` (type: `array`):

Free-text keywords to search on Vinted. Each keyword is scraped in turn (e.g. "nike air max", "levis 501").

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

Paste full Vinted search, catalog, brand or member URLs (e.g. a filtered search page). Filters in the URL are read automatically and the country is inferred from the URL host.

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

Which Vinted marketplace to scrape. Ignored for a task whose Vinted URL already carries a host.

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

Filter by item condition. Leave empty for any condition.

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

How to sort search results.

## `priceFrom` (type: `integer`):

Minimum item price (in the marketplace currency).

## `priceTo` (type: `integer`):

Maximum item price (in the marketplace currency).

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

Optional ISO currency code for the price filter (e.g. USD, EUR, GBP, PLN). Defaults to the marketplace currency.

## `catalogIds` (type: `array`):

Vinted catalog (category) IDs to restrict the search, e.g. \["1904"]. Find them in a category URL: /catalog/1904-shoes. Also used to partition large result sets.

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

Vinted brand IDs to restrict the search, e.g. \["53"] for Nike. Find them in a brand URL: /brand/53-nike.

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

Vinted size IDs to restrict the search. Find them in a filtered search URL (size\_ids\[]=...).

## `colorIds` (type: `array`):

Vinted color IDs, e.g. \["1"] Black, \["12"] White, \["9"] Blue, \["7"] Red, \["10"] Green.

## `includeDescription` (type: `boolean`):

Also fetch each listing's full text description (extra request per item, slower). The search fields already include title, price, brand, size, condition, photos and seller.

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

Stop after this many listings across all queries/URLs. Note: Vinted caps deep pagination at ~1000 results per query — use catalog/brand/price filters to go wider.

## Actor input object example

```json
{
  "searchQueries": [
    "nike air max"
  ],
  "country": "com",
  "order": "newest_first",
  "includeDescription": false,
  "maxItems": 100
}
```

# 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 = {
    "searchQueries": [
        "nike air max"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/vinted-search-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 = { "searchQueries": ["nike air max"] }

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/vinted-search-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 '{
  "searchQueries": [
    "nike air max"
  ]
}' |
apify call axlymxp/vinted-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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