# Vinted Scraper: Paste a URL, Search, Closets & Items (`sourabhbgp/vinted-scraper`) Actor

Paste any Vinted search, category, seller or item link and get structured data back. Or search by keyword with brand, size, colour, condition and price filters. Seller closets, item detail and brand lookup too, across all 26 EU and US markets. JSON or CSV. $1 per 1,000 results.

- **URL**: https://apify.com/sourabhbgp/vinted-scraper.md
- **Developed by:** [Sourabh Kumar](https://apify.com/sourabhbgp) (community)
- **Categories:** E-commerce, Automation, Agents
- **Stats:** 15 total users, 4 monthly users, 96.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Vinted scraper: search, seller closets, item detail & brand lookup

Paste a Vinted link and run it. Build the search you want in Vinted's own filters, copy the address bar, and the actor works out the rest: search pages, category pages, seller closets and item pages all just work. No login, no proxy setup, no browser.

**$1 per 1,000 results, plus $0.002 per run. No monthly minimum.**

Works on all 26 markets: 🇬🇧 🇫🇷 🇩🇪 🇮🇹 🇪🇸 🇳🇱 🇵🇱 🇵🇹 🇧🇪 🇦🇹 🇱🇹 🇨🇿 🇸🇰 🇭🇺 🇷🇴 🇭🇷 🇫🇮 🇩🇰 🇸🇪 🇪🇪 🇬🇷 🇮🇪 🇱🇺 🇱🇻 🇸🇮 🇺🇸

### Why this scraper?

- 🔗 **Paste any Vinted URL.** Search, category, seller or item links all work, and the filters already in the link are used as they are. No mode to pick, no numeric category id to hunt down.
- 💷 **The full price picture on every row.** Asking price, Vinted's buyer-protection fee, and the total the buyer actually pays, split into three fields instead of one number you have to reverse-engineer.
- 🏷️ **Type a brand name, not an ID.** Enter `"yeezy"` and the actor resolves it to the canonical brand for you. No digging `brand_ids[]=` numbers out of URLs.
- 📏 **Size and colour filters that actually filter.** Type `M` or `Black` and the actor maps it to Vinted's own size and colour codes for that market, across every size group.
- 🌍 **All 26 markets, one input change.** Swap the country code; every mode behaves identically, in the local currency.
- 🚦 **Tells you when a run is incomplete.** If a page fails or Vinted's 960-per-query ceiling truncates your search, the run says so in its status instead of handing you a short dataset that looks complete.
- 🧾 **Bad input never bills you.** A blank field, a brand that doesn't exist, or a minimum price above your maximum ends the run with a plain-English explanation and zero charges.
- 🔁 **The same link is never billed twice.** Paste a URL twice by accident and it is scraped once.
- ⚡ **HTTP-only, pages fetched in parallel.** No browser, no Playwright. A 100-row search finishes in about 20 seconds; a full 960-row search in about two minutes.
- 📦 **One record shape across all four modes.** Every row carries a `recordType` discriminator, so a single pipeline consumes the lot.

### What data can you extract?

<table>
<tr>
<td>🏷️ <b>Title & brand</b></td>
<td>💷 <b>Price</b></td>
<td>🧾 <b>Buyer-protection fee</b></td>
<td>🧮 <b>Total buyer pays</b></td>
</tr>
<tr>
<td>📏 <b>Size</b></td>
<td>✨ <b>Condition</b></td>
<td>📝 <b>Description</b></td>
<td>📸 <b>Photos</b></td>
</tr>
<tr>
<td>❤️ <b>Favourites</b></td>
<td>🚀 <b>Promoted flag</b></td>
<td>🚦 <b>Reserved / closed</b></td>
<td>📦 <b>Heavy-bulky flag</b></td>
</tr>
<tr>
<td>👤 <b>Seller login + URL</b></td>
<td>🆔 <b>Seller ID</b></td>
<td>⭐ <b>Feedback count + score</b></td>
<td>🏅 <b>Seller badges</b></td>
</tr>
<tr>
<td>💼 <b>Business-seller flag</b></td>
<td>🎨 <b>Colour</b></td>
<td>🔢 <b>Brand ID</b></td>
<td>🕒 <b>Upload age</b></td>
</tr>
<tr>
<td>🌍 <b>Market</b></td>
<td>💱 <b>Currency</b></td>
<td>🔗 <b>Item URL</b></td>
<td>📅 <b>Scraped timestamp</b></td>
</tr>
</table>

Colour, brand ID and upload age come from item-detail mode. Reserved and closed flags come from item-detail and seller-closet modes. Vinted does not publish them on search results, and this actor leaves them `null` there rather than guessing.

### Scraping modes

You can skip modes entirely by pasting links into `startUrls`. Everything below is the long form, for when you would rather build the query field by field.

#### 🔗 Paste Vinted URLs

Mix search, category, seller and item links in one run. Each link is routed to the right mode, and each keeps its own market, so a `vinted.fr` link is scraped on the French site even if the rest are British.

```json
{
  "startUrls": [
    "https://www.vinted.co.uk/catalog?search_text=nike&brand_ids[]=53&price_to=50",
    "https://www.vinted.co.uk/catalog/1049-boots",
    "https://www.vinted.fr/member/3151368835-jacie7",
    "https://www.vinted.co.uk/items/9784633922-nike-air-shoes"
  ],
  "maxResults": 200
}
```

`maxResults` caps the whole run, not each link, so give it enough room to cover every URL you paste. If it fills up first, the run says which links it did not reach.

#### 🔍 Search by keyword

Search any market by keyword, then narrow with brand, category, size, colour, condition, price range and sort.

```json
{
  "mode": "search",
  "country": "uk",
  "searchText": "nike air max",
  "brand": "nike",
  "size": "M",
  "color": "Black",
  "condition": ["very_good", "new_with_tags"],
  "priceFrom": 20,
  "priceTo": 80,
  "sortBy": "newest_first",
  "maxResults": 200
}
```

#### 👤 Seller closet

Every active item from one seller, by member URL. Set `maxResults` to `0` for the whole closet.

```json
{
  "mode": "user-listings",
  "country": "uk",
  "userUrl": "https://www.vinted.co.uk/member/3151368835-jacie7",
  "maxResults": 0
}
```

#### 📦 Item detail

Paste item URLs to get the full record: description, colour, brand ID, seller feedback and badges, reserved and closed flags, and the fee maths.

```json
{
  "mode": "item-detail",
  "country": "uk",
  "itemUrls": [
    "https://www.vinted.co.uk/items/9026871059-nike-air-max-moto-2k-black-fire-pink"
  ]
}
```

#### 🏷️ Brand lookup

Turn a brand name into Vinted's brand ID, with item count and whether Vinted runs authenticity checks on it. Useful before locking a brand into a scheduled search.

```json
{
  "mode": "brand-catalog",
  "country": "uk",
  "brandKeyword": "yeezy"
}
```

### How to scrape Vinted: step by step

1. [Create a free Apify account](https://console.apify.com/sign-up). Takes 30 seconds, no card needed.
2. Open [Vinted Scraper](https://console.apify.com/actors/tuQH3svQCJNYgfBZc?addFromActorId=tuQH3svQCJNYgfBZc) in the Apify Console.
3. Paste your Vinted links into **Vinted URLs**, or pick a mode and fill the matching field by hand.
4. Click **Start**. A 100-row search takes about 20 seconds.
5. Export as JSON, CSV, or Excel, or pull the results through the API.

### How much does Vinted Scraper cost?

**$1.00 per 1,000 results**, plus **$0.002 per run** (charged once per gigabyte of memory allocated, so $0.002 at the default 512 MB). No monthly minimum, no subscription lock-in.

The Free plan's $5 monthly credit covers roughly **5,000 results**. The $29/month Starter plan covers about **29,000 results** a month. You pay for rows written to the dataset, so a filter that narrows your search also narrows your bill, and rows the actor could not fetch are never billed.

### Input examples

**Pasted URLs**

```json
{
  "startUrls": [
    "https://www.vinted.co.uk/catalog?search_text=nike&brand_ids[]=53&price_to=50",
    "https://www.vinted.fr/member/3151368835-jacie7"
  ],
  "maxResults": 200
}
```

**Search mode**

```json
{
  "mode": "search",
  "country": "fr",
  "searchText": "sac cuir",
  "priceFrom": 20,
  "priceTo": 100,
  "sortBy": "price_low_to_high",
  "maxResults": 200
}
```

**Seller closet mode**

```json
{
  "mode": "user-listings",
  "country": "uk",
  "userUrl": "https://www.vinted.co.uk/member/3151368835-jacie7",
  "maxResults": 0
}
```

**Item detail mode**

```json
{
  "mode": "item-detail",
  "country": "uk",
  "itemUrls": [
    "https://www.vinted.co.uk/items/9026871059-nike-air-max-moto-2k-black-fire-pink",
    "https://www.vinted.co.uk/items/9784633922-nike-air-shoes"
  ]
}
```

**Brand lookup mode**

```json
{
  "mode": "brand-catalog",
  "country": "uk",
  "brandKeyword": "yeezy"
}
```

#### All input fields

| Field | Type | Default | Note |
|---|---|---|---|
| `startUrls` | URL\[] | none | Paste Vinted search, category, member or item links. Overrides `mode` and the filter fields |
| `mode` | enum | `search` | `search`, `user-listings`, `item-detail`, `brand-catalog`. Ignored when `startUrls` is set |
| `country` | enum | `uk` | 26 markets, e.g. `uk`, `fr`, `de`, `it`, `es`, `nl`, `pl`, `us` |
| `searchText` | string | none | Keyword query (search mode) |
| `brand` | string | none | Brand name, resolved to Vinted's ID for you (search mode) |
| `category` | integer | none | Vinted category ID. Open the category on Vinted and take the number from the address bar: `/catalog/1049-boots` is `1049`. Easier still, paste the whole link into `startUrls` |
| `size` | string | none | Size label such as `M`, `UK 9`, `EU 42` (search mode) |
| `color` | string | none | Colour name such as `Black`, `Cream`, `Burgundy` (search mode) |
| `condition` | array | none | Any of `new_with_tags`, `new_without_tags`, `very_good`, `good`, `satisfactory` |
| `priceFrom` / `priceTo` | number | none | Price range in the market's local currency |
| `sortBy` | enum | `relevance` | `relevance`, `price_low_to_high`, `price_high_to_low`, `newest_first` |
| `userUrl` | URL | none | Member URL (seller-closet mode) |
| `itemUrls` | URL\[] | none | Item URLs (item-detail mode) |
| `brandKeyword` | string | none | Brand name to look up (brand-lookup mode) |
| `maxResults` | integer | `100` | Cap on dataset rows. `0` means the whole closet, or Vinted's 960 ceiling on a search |
| `maxConcurrency` | integer | `6` | Parallel requests, 1 to 10 |

### Output examples

Every row carries `recordType`, `country` and `scrapedAt`. All rows below are real, captured from live runs.

**Search mode**, one row per listing:

```json
{
  "recordType": "listing",
  "id": 9794458921,
  "title": "Women sneakers",
  "url": "https://www.vinted.co.uk/items/9794458921-women-sneakers",
  "price": 34.75,
  "currency": "GBP",
  "serviceFee": 2.44,
  "totalBuyerPrice": 37.19,
  "brand": "Nike Air",
  "brandId": null,
  "size": "6",
  "condition": "New without tags",
  "color": null,
  "country": "uk",
  "photos": [
    "https://images1.vinted.net/t/05_00801_J4TmewD8JJe4SWxXwMyStCq9/f800/1787828100.jpeg"
  ],
  "sellerId": 3175585968,
  "sellerLogin": "shopofstyle24",
  "sellerProfileUrl": "https://www.vinted.co.uk/member/3175585968-shopofstyle24",
  "isBusinessSeller": false,
  "favouriteCount": 2,
  "promoted": false,
  "isClosed": null,
  "isReserved": null,
  "scrapedAt": "2026-08-27T16:31:12.402Z"
}
```

**Seller closet mode**, same shape, with the availability flags Vinted publishes on a closet:

```json
{
  "recordType": "listing",
  "id": 9140235233,
  "title": "Cocktail dress",
  "price": 32.76,
  "currency": "GBP",
  "brand": "Nasty Gal",
  "size": "M / UK 12-14",
  "condition": "Very good",
  "isReserved": false,
  "isClosed": false,
  "isHidden": false,
  "isHeavyBulky": false,
  "favouriteCount": 3,
  "country": "uk",
  "scrapedAt": "2026-08-27T16:31:20.884Z"
}
```

**Item detail mode**, everything above plus description, colour, brand ID and seller reputation:

```json
{
  "recordType": "item_detail",
  "id": 9784633922,
  "title": "Nike Air Shoes",
  "url": "https://www.vinted.co.uk/items/9784633922-nike-air-shoes",
  "price": 5.35,
  "currency": "GBP",
  "serviceFee": 0.97,
  "totalBuyerPrice": 6.32,
  "brand": "Nike Air",
  "brandId": 5977,
  "size": "5.5",
  "condition": "Satisfactory",
  "color": "White",
  "description": "Good condition, well worn. Size 7.5",
  "uploadedRelative": "a day ago",
  "sellerId": 3164964426,
  "sellerLogin": "charlotteaksm",
  "sellerFeedbackCount": 15,
  "sellerFeedbackReputation": 1,
  "sellerBadges": ["ACTIVE_LISTER", "SPEEDY_SHIPPING"],
  "isReserved": false,
  "isClosed": false,
  "country": "uk",
  "scrapedAt": "2026-08-27T16:19:03.118Z"
}
```

**Item detail errors** are pushed as their own row so you can see which URL failed and why. These are never billed:

```json
{
  "recordType": "item_detail_error",
  "url": "https://www.vinted.co.uk/items/1-dead-item",
  "reason": "Vinted returned HTTP 404 for this item. It was probably sold, delisted or removed.",
  "country": "uk",
  "scrapedAt": "2026-08-27T16:19:01.556Z"
}
```

**Brand lookup mode**:

```json
{
  "recordType": "brand",
  "id": 115490,
  "title": "Yeezy",
  "slug": "yeezy",
  "itemCount": 452681,
  "favouriteCount": 84057,
  "isLuxury": true,
  "requiresAuthenticityCheck": true,
  "country": "uk",
  "scrapedAt": "2026-08-27T16:31:05.271Z"
}
```

### Use cases

- 🛍️ **Cross-border resale arbitrage.** Pull the same query on 🇫🇷 France and 🇩🇪 Germany, sort by cheapest, and find the gap between markets.
- 💵 **Repricing and margin models.** Asking price and the buyer's all-in total are separate fields, so you can price against either side of the fee.
- 📊 **Brand-level market research.** Lock a brand, pull its active inventory across markets, and aggregate by size, condition or price band.
- 🔍 **Brand protection and counterfeit monitoring.** Watch a brand's live listings and a flagged seller's whole closet on a schedule.
- 👤 **Competitor closet tracking.** Paste a member URL and get every active item with price, size, condition and photos.
- 📈 **Demand research.** Track `favouriteCount` on a listing over repeated runs to see what is drawing attention before it sells.
- 🧵 **Sourcing feeds for resellers.** Filter by size and condition, sort by newest, and run it on a schedule to catch fresh stock.
- 🤖 **AI shopping and resale agents.** One flat row shape with a `recordType` discriminator drops straight into an agent loop.

### Limitations

- **Sold listings are not available.** Vinted removes items from search and from closets once they sell, and publishes no sold-price history to logged-out visitors. This actor returns active listings only.
- **960 results per search query.** Vinted caps any single search there, however many items exist. Narrow the query with a brand, category, size or price band and run it again. The run tells you when it hits this ceiling.
- **View counts are not published.** Vinted returns zero for every item in its listing feeds, so no scraper can report real view counts from a search or a closet.
- **Colour, brand ID and upload age need item-detail mode.** Vinted omits them from search results and closets.
- **A minimum price above the maximum is rejected.** Vinted quietly ignores an impossible minimum and returns cheaper items anyway, so the actor stops the run instead of billing you for results you did not ask for.
- **A minimum price above the maximum is rejected.** Vinted quietly ignores an impossible minimum and returns cheaper items anyway, so the actor stops the run instead of billing you for results you did not ask for.
- **Brand lookup returns the top 10** fuzzy matches per keyword, ranked by Vinted's own item counts.
- **Nothing behind a login.** Messages, order history, drafts and seller statistics all require being the account owner, which this actor never is.

### Frequently asked questions

#### How much does Vinted Scraper cost?

Vinted Scraper uses pay-per-result pricing. You pay **$1.00 for 1,000 results**, plus $0.002 per run. The Apify Free plan gives you $5 in usage credits a month, enough for around 5,000 results. If you run regularly, the $29/month Starter plan covers about 29,000 results.

No subscription lock-in. Pause whenever.

#### Do I need to log in or provide cookies?

No. The actor reads only what a logged-out visitor can see, and handles session setup on its own. There is nothing to configure.

#### Will I get blocked?

The actor manages bot protection and retries for you, including switching routes when Vinted refuses one. If a run genuinely cannot reach Vinted, it fails with a clear message and charges you nothing for the missing rows, rather than handing you an empty dataset that looks like a success.

#### What happens if an item URL is dead or a seller has no listings?

A dead item URL produces an `item_detail_error` row naming the URL and the reason, and it is not billed. A search or closet that genuinely matches nothing finishes successfully and tells you the filters returned no items.

#### How do I find a seller's member URL?

Open any listing on Vinted and click the seller's name. The address bar shows `vinted.co.uk/member/<id>-<username>`. Paste that whole URL into `userUrl`.

#### Which countries are supported?

All 26 Vinted markets: United Kingdom, France, Germany, 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. Prices come back in each market's local currency.

#### Is it legal to scrape Vinted?

Scraping public data is generally allowed in the US and most of the EU, as long as you don't collect personal data covered by GDPR or CCPA without a lawful basis. This actor only touches publicly accessible pages, but how you use the output is on you.

Apify's full breakdown: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

#### Does it support scheduled runs and integrations?

Yes. Schedule it hourly or daily in the Apify Console, and push results into **Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive** and more. Apify treats every actor as a webhook source.

Full list: [Apify integrations](https://docs.apify.com/platform/integrations).

#### Can I use Vinted Scraper with the Apify API?

Yes. Every run is available through the Apify REST API:

```bash
curl -X POST "https://api.apify.com/v2/acts/sourabhbgp~vinted-scraper/runs?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"search","country":"uk","searchText":"nike air max","maxResults":50}'
```

Docs: [Apify API reference](https://docs.apify.com/api/v2).

#### Can I use Vinted Scraper through an MCP server or an AI assistant?

Yes. Apify ships an MCP server that exposes every actor as a tool, so Claude, Cursor and any other MCP-capable client can call this one. Setup: [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp).

To hand it to an assistant directly, paste this:

```text
Use sourabhbgp/vinted-scraper on Apify. Pick one mode per run and wait for it to finish, then read its dataset.

Never paste an API token into chat. Load APIFY_API_TOKEN from the environment.

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_API_TOKEN"])
run = client.actor("sourabhbgp/vinted-scraper").call(run_input={
    "mode": "search",
    "country": "uk",
    "searchText": "nike air max",
    "maxResults": 100,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Modes: search, user-listings, item-detail, brand-catalog.
Countries: uk, fr, de, it, es, nl, pl, pt, be, at, lt, cz, sk, hu, ro, hr, fi, dk, se, ee, gr, ie, lu, lv, si, us.
Search caps at 960 results per query; narrow with brand, size, colour or price to go deeper.
```

### Your feedback

Bug, missing field, or odd behavior? Drop a note in the [Issues tab](https://console.apify.com/actors/tuQH3svQCJNYgfBZc/issues). Reports go to a human and fixes usually ship the same week.

# Actor input Schema

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

What to scrape. Ignored when you paste Vinted URLs above.

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

Which Vinted market subdomain to use. Determines listing pool and currency.

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

Paste any Vinted links: a search or category page, a member page, or an item page. The actor works out what each one is and scrapes it, so you can skip the mode and filter fields entirely. Filters already in the URL are used as they are.

## `searchText` (type: `string`):

Keyword query. Used by Search mode.

## `brand` (type: `string`):

Brand filter as a name (e.g. 'nike', 'yeezy'). Resolved at runtime via Vinted's brand lookup. Used by Search mode.

## `category` (type: `integer`):

Vinted catalog ID. Find by browsing a category on Vinted and copying the catalog\[]= value from the URL. Used by Search mode.

## `size` (type: `string`):

Size label as Vinted shows it, for example 'M', 'UK 9' or 'EU 42'. Resolved at runtime against Vinted's size taxonomy for the selected country, and matched across every size group (women's, men's, kids'). If the label matches nothing, the run logs a warning and returns unfiltered results. Used by Search mode.

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

Item-condition filter. Used by Search mode.

## `color` (type: `string`):

Colour name as Vinted shows it: Black, White, Grey, Beige, Pink, Purple, Red, Yellow, Blue, Green, Orange, Brown, Silver, Gold, Multi, Khaki, Turquoise, Cream, Apricot, Coral, Burgundy, Rose, Lilac, Mint. Used by Search mode.

## `priceFrom` (type: `number`):

Minimum price in the local currency of the selected country. Used by Search mode.

## `priceTo` (type: `number`):

Maximum price in the local currency of the selected country. Used by Search mode.

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

How to order results. Used by Search mode.

## `userUrl` (type: `string`):

Full Vinted member URL, for example https://www.vinted.co.uk/member/3164964426-charlotteaksm. Required by User listings mode.

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

One or more full Vinted item URLs. Required by Item detail mode.

## `brandKeyword` (type: `string`):

Brand name to look up: returns up to 10 matches with ID, slug and item count. Required by Brand catalog mode.

## `maxResults` (type: `integer`):

Maximum dataset rows to push. Vinted serves at most 960 results per search query however many exist, so Search runs stop there and say so in the run status. User listings mode returns the full closet. 0 = no limit beyond those.

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

How many requests run in parallel. Higher = faster but more proxy load. Capped at 10 for paginated modes, 8 for item-detail.

## Actor input object example

```json
{
  "mode": "search",
  "country": "uk",
  "startUrls": [
    "https://www.vinted.co.uk/catalog?search_text=nike%20air%20max"
  ],
  "searchText": "nike air max",
  "sortBy": "relevance",
  "maxResults": 100,
  "maxConcurrency": 6
}
```

# Actor output Schema

## `items` (type: `string`):

Use the `recordType` field to tell the row shapes apart. Listing rows carry price, the buyer-protection fee and the buyer total, brand, size, condition, photos, seller info and favourites. Seller-closet rows add reserved, closed and hidden flags. Item-detail rows add the description, colour, brand ID, upload age, seller badges and feedback score. Brand rows carry the brand ID, slug, item count and luxury and authenticity-check flags.

# 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 = {
    "mode": "search",
    "country": "uk",
    "startUrls": [
        "https://www.vinted.co.uk/catalog?search_text=nike%20air%20max"
    ],
    "searchText": "nike air max"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourabhbgp/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 = {
    "mode": "search",
    "country": "uk",
    "startUrls": ["https://www.vinted.co.uk/catalog?search_text=nike%20air%20max"],
    "searchText": "nike air max",
}

# Run the Actor and wait for it to finish
run = client.actor("sourabhbgp/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 '{
  "mode": "search",
  "country": "uk",
  "startUrls": [
    "https://www.vinted.co.uk/catalog?search_text=nike%20air%20max"
  ],
  "searchText": "nike air max"
}' |
apify call sourabhbgp/vinted-scraper --silent --output-dataset

```

## MCP server setup

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