# Vinted Scraper & API - Listings, Prices, Brands, 23 Countries (`rel8ble/vinted-search-scraper`) Actor

Vinted scraper and API: search Vinted listings on 23 country sites by keyword, brand, size, condition, colour, category and price, or paste Vinted URLs. One result = one listing: title, brand, size, condition, price, total with fee, photos, favourites, URL. No start fee. $0.70 per 1,000.

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

## Pricing

$0.70 / 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Vinted Scraper & API - Listings, Prices, Brands, 23 Countries

**Vinted scraper** and unofficial **Vinted API**: search Vinted listings by keyword, brand, size, condition, colour, category and price on **23 Vinted country sites** (vinted.fr, .de, .co.uk, .com, .it, .es, .nl, .pl, .be, .at, .lt, .cz, .se, .pt and more) and export them to JSON, CSV or Excel. Use it as a **Vinted price tracker**, for **second-hand fashion prices**, resale research and deal alerts.

- **What goes in:** search keywords, country sites, filters (price, brand, size, condition, colour, category, sort) or Vinted URLs.
- **What comes out:** one row per listing: title, brand, size, condition (local name + plain English code), price, buyer-protection fee and total price, currency, photo URLs, favourites, seller id, country and URL. Optional: description, category path, colour, material, upload time, all photos and seller rating.
- **Typical cost:** $0.70 per 1,000 listings, details included, no start fee. A 20-listing check costs 1.4 cents.
- **When to use it:** pricing a resale item, tracking a brand's or model's price on Vinted, finding new listings every hour, comparing prices between countries, feeding resale data to an AI agent.

It reads the same JSON search data the Vinted website loads, over plain HTTP with **no headless browser** and no login, 96 listings per request. In our tests one search for "sac longchamp" on vinted.fr returned 109,392 of the 118,105 listings Vinted counts. Unofficial: not affiliated with or endorsed by Vinted.

### Sample output

Real rows from a run of the prefilled input (`nike` on vinted.fr, 20 listings, 28 Oct 2026):

| title | brand | size | conditionCode | price | totalPrice |
|---|---|---|---|---|---|
| Veste Nike | Nike | S | good | 10 EUR | 11.20 EUR |
| Scarpe da Calcio con tacchetti Nike numero 38 | Nike | 38 | new_without_tags | 25 EUR | 26.95 EUR |
| tn en très bon état taille 42 | Nike | 42 | new_without_tags | 130 EUR | 137.20 EUR |
| Nike x NOCTA Northstar Nylon Track Jacket | Nike | L | new_without_tags | 40 EUR | 42.70 EUR |
| Nike Retro Vintage Y2K Fullzip TrackJacket Special Old Money Flow Japan Classic 90's | Nike | XL | very_good | 30 EUR | 32.20 EUR |

`totalPrice` is the price plus Vinted's buyer-protection fee. Every row also has photo links, favourites, the seller's numeric id, country and the listing URL.

### Use cases

- **Resale pricing**: see what a brand, model or size really goes for before you list or buy.
- **Price tracker and deal alerts**: hourly `newest_first` runs with a price ceiling, deduplicated on `id`.
- **Cross-country arbitrage**: run the same search on several Vinted sites and compare prices in each currency.
- **Brand and trend research**: supply and asking prices by brand, category, size and condition.
- **Second-hand shops**: benchmark your stock against live Vinted asking prices.
- **AI agents**: "Levi's 501 in W32 under 20 EUR on vinted.de" maps straight onto the input fields.

### Pricing

**$0.70 per 1,000 listings** (pay per result; you pay only for listings saved to the dataset). Item details are included at the same price. The most-used Vinted scrapers on the Store charge $1.00-$2.50 per 1,000, two of them plus a start fee per run.

| You scrape | You pay |
|---|---|
| 100 listings | $0.07 |
| 1,000 listings | $0.70 |
| 10,000 listings | $7.00 |
| 100,000 listings | $70.00 |

No start fee. The Apify free plan's $5 monthly credit covers about 7,100 listings. The prefilled input (`nike` on vinted.fr, 20 listings) costs $0.014 and took about 4 seconds in a test. You're never charged for failed or blocked requests, retries, duplicates, or items that no longer exist. If you set a maximum cost per run, the scraper stops cleanly when it reaches it.

#### Why this one

- **Cheaper than the most-used Vinted scrapers**, with no start fee.
- **Details at the same price**: description, category path, colour, material, upload time, all photos and seller rating.
- **23 Vinted country sites in one run**, prices in each site's currency, total with buyer-protection fee.
- **Deep search past Vinted's 960-listing limit**: 109,392 of 118,105 listings for one search in a test.
- **No login, no browser, no personal data**: only the seller's numeric id.

### FAQ

**Does it need a Vinted account or a browser?**
No. It reads public listing data over HTTPS, the same data the Vinted website loads for any visitor.

**How do I use the filters from the Vinted website?**
Set the filters on vinted.fr (or any Vinted site), copy the URL from the address bar and paste it into `startUrls`. Search text, category, brand, size, condition, colour, material, price range and sort order are all read from the URL.

**How do I track new listings for a search?**
Schedule the actor with `sort: "newest_first"` and a `maxItems` that covers what appears between two runs (for example 100 every hour), and keep the `id`s you have already seen.

**How do I find a category id?**
Open the category on any Vinted site; the id is the number after `/catalog/`, e.g. `1231` in `https://www.vinted.de/catalog/1231-men-shoes`. Ids are the same on every site. With `includeDetails`, every row also has its `categoryId`.

**Which currency are prices in?**
Each site's own currency (EUR on most EU sites, GBP on vinted.co.uk, USD on vinted.com, PLN, CZK, SEK, DKK, HUF, RON). `priceMin` / `priceMax` use the same currency. `totalPrice` is the price plus Vinted's buyer-protection fee, before shipping.

**Is personal data collected?**
Only the seller's numeric Vinted id and, with details, their review count, rating and badges. No usernames, names, photos of people's profiles, or locations. E-mail addresses and phone numbers that sellers paste into descriptions are replaced with `[email removed]` / `[phone removed]`.

**Is it legal to scrape Vinted?**
This actor collects publicly available listing information without logging in. You're responsible for using the data in line with Vinted's terms and applicable law (including GDPR for the seller ids). This isn't legal advice; if you're unsure, check with a lawyer.

**How does it avoid blocks?**
It sends normal browser-like requests through Apify Proxy. Each proxy session first collects Vinted's anonymous cookies from the home page, then reuses them. IPs that Vinted refuses are dropped and the request is retried on a new IP (up to 10 retries). Search requests that keep failing are retried through residential IPs in the site's country (`residentialFallback`). In our cloud tests more than half of the shared datacenter IPs were refused; finding a working one takes a few seconds and costs nothing per listing.

**What happens if I run it with no input?**
It does a demo search for "nike" on vinted.fr (20 listings) instead of failing.

### How to use

1. Type one or more **search keywords** (`nike air max`, `levis 501`) and pick the **country sites** (default `fr`). Add filters if you need them.
2. Or paste **Vinted URLs**: copy a search from your browser with its filters already set, a category or brand page, or single item URLs.
3. Click **Start**. Listings are saved as they come in; download them as JSON, CSV or Excel, or read them through the Apify API.
4. For a price tracker, schedule the actor (for example every hour with `sort: "newest_first"` and `maxItems: 100`) and deduplicate on `id`.

### Input

All fields are optional. An empty input runs a 20-listing demo search.

| Field | Default | What it does |
|---|---|---|
| `searchQueries` | - | Keywords as typed into the Vinted search box, one per line. Each keyword is one search per country site. |
| `countries` | `["fr"]` | Vinted sites by domain ending: `com`, `co.uk`, `fr`, `de`, `it`, `es`, `nl`, `be`, `at`, `lu`, `pt`, `pl`, `lt`, `cz`, `sk`, `se`, `dk`, `fi`, `hu`, `ro`, `gr`, `hr`, `ie`. |
| `startUrls` | - | Vinted search / catalog / brand / category URLs (scraped with the filters in the URL) and item URLs (looked up with details). |
| `priceMin`, `priceMax` | - | Price range in each site's own currency (EUR, GBP, USD, PLN ...). |
| `brands` | - | Brand names (`Nike`, `Levi's`, `Zara`) or Vinted brand ids. The closest Vinted brand is used and logged. |
| `sizes` | - | Sizes as shown on Vinted (`M`, `38`, `W32`, `9.5`). "M" also matches "M / 38 / 10". |
| `conditions` | all | `new_with_tags`, `new_without_tags`, `very_good`, `good`, `satisfactory`. |
| `colors` | all | `black`, `white`, `blue`, `navy`, `red`, `pink`, `green`, `beige`, `brown`, `grey` ... (29 Vinted colours). |
| `categoryIds` | - | Vinted category ids: the number in a catalog URL (`1231` from `/catalog/1231-men-shoes`; `1904` Women, `5` Men, `1193` Kids). Same ids on every site. |
| `sort` | `relevance` | `relevance`, `newest_first`, `price_low_to_high`, `price_high_to_low`. |
| `maxItems` | 100 | Listings per search (keyword x country). `0` = all of them. |
| `deepSearch` | true | Goes past Vinted's 960-listing limit per search by splitting into narrower searches (condition, category, price band, colour). |
| `includeDetails` | false | Opens each listing for description, category path, colour, material, upload time, all photos and seller rating. Same price, slower. |

Example: Levi's jeans in size W32, very good or new with tags, 5-20 EUR, cheapest first, on vinted.de (this exact input returned 200 listings in 4.5 s in our test; Vinted counted 7,277 matches):

```json
{
    "countries": ["de"],
    "searchQueries": ["jeans"],
    "brands": ["Levis"],
    "sizes": ["W32"],
    "conditions": ["very_good", "new_with_tags"],
    "colors": ["blue"],
    "priceMin": 5,
    "priceMax": 20,
    "sort": "price_low_to_high",
    "maxItems": 200
}
```

The same search on six country sites at once:

```json
{
    "countries": ["com", "co.uk", "pl", "se", "it", "lt"],
    "searchQueries": ["zara dress"],
    "maxItems": 150
}
```

Straight from URLs copied from the browser:

```json
{
    "startUrls": [
        "https://www.vinted.fr/catalog?search_text=sac%20longchamp&status_ids[]=6&order=newest_first",
        "https://www.vinted.de/catalog/1231-men-shoes/brand/53-nike",
        "https://www.vinted.co.uk/items/10403054566-levi-501-original-stone-washed-jeans"
    ],
    "maxItems": 120
}
```

### Output

One dataset item per listing. This one is from a real run on 16 Oct 2026, search "levis 501" on vinted.co.uk with `includeDetails: true` (photo list shortened):

```json
{
    "id": "10403054566",
    "url": "https://www.vinted.co.uk/items/10403054566-levi-501-original-stone-washed-jeans",
    "title": "Levi 501 original stone washed jeans",
    "brand": "Levi's",
    "size": "W36",
    "condition": "New without tags",
    "conditionCode": "new_without_tags",
    "price": 28,
    "currency": "GBP",
    "discountedPrice": null,
    "buyerProtectionFee": 2.1,
    "totalPrice": 30.1,
    "photoUrl": "https://images1.vinted.net/t/06_020cc_17hzrgFaZMikBGp2pi9P1Xse/f800/62cba6e7.webp?s=9b419c2c2b3cdacf23278d07a8c5672989172fc6",
    "photoUrls": ["https://images1.vinted.net/t/06_020cc_17hzrgFaZMikBGp2pi9P1Xse/f800/62cba6e7.webp?s=9b419c2c2b3cdacf23278d07a8c5672989172fc6", "..."],
    "favouritesCount": 0,
    "isPromoted": false,
    "sellerId": "220727373",
    "sellerIsBusiness": false,
    "country": "co.uk",
    "domain": "www.vinted.co.uk",
    "searchQuery": "levis 501",
    "position": 1,
    "scrapedAt": "2026-10-16T18:09:34.944Z",
    "description": "Men’s jeans brand new no tags",
    "category": "Straight fit jeans",
    "categoryPath": ["Men", "Clothing", "Jeans", "Straight fit jeans"],
    "categoryId": "1819",
    "brandId": "10",
    "color": "Blue",
    "material": "Denim",
    "uploadedAgo": "Just now",
    "uploadedAtApprox": "2026-10-16T18:09:35.699Z",
    "photoCount": 4,
    "isReserved": false,
    "isAvailable": true,
    "sellerFeedbackCount": 20,
    "sellerRating": 5,
    "sellerBadges": ["ACTIVE_LISTER"]
}
```

A search row without details (same day, "zara dress" on vinted.se). The fields from `description` down are only filled with `includeDetails`:

```json
{ "id": "10400329672", "url": "https://www.vinted.se/items/10400329672-beige-back-knot-strap-dress-with-linnen", "title": "Beige back knot strap dress with linnen", "brand": "Zara", "size": "XS", "condition": "Mycket bra", "conditionCode": "very_good", "price": 232.64, "currency": "SEK", "buyerProtectionFee": 19.13, "totalPrice": 251.77, "favouritesCount": 1, "sellerId": "91956257", "country": "se", "searchQuery": "zara dress", "position": 44 }
```

The dataset has two ready-made views, **Overview** (with photo thumbnails) and **Details**. A `RUN_SUMMARY` record in the key-value store lists, for each search, how many listings were saved, the total Vinted counts, how many narrower searches deep search ran, why it stopped, and any warnings (a brand or size that was not found).

#### Field fill rates (real test runs)

Search rows (1,480 rows: 8 country sites, keywords, filters and URLs): id, url, title, brand, condition, conditionCode, price, currency, buyerProtectionFee, totalPrice, photoUrl, favouritesCount, sellerId, country 100%; size 92% (bags and some accessories have no size).

With `includeDetails` (100 rows, vinted.co.uk and vinted.fr): description, category, categoryPath, categoryId, brandId, colour, uploadedAgo, photoCount, sellerFeedbackCount 100%; uploadedAtApprox 100% (20-row run); sellerRating 80% (sellers with no reviews have none); material 54%.

### API example

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("rel8ble/vinted-search-scraper").call(run_input={"searchQueries": ["levis 501"], "countries": ["de", "fr"], "sort": "newest_first", "maxItems": 200})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], "|", item["totalPrice"], item["currency"])
```

One HTTP call that runs the actor and returns the rows (curl):

```bash
curl -X POST "https://api.apify.com/v2/acts/rel8ble~vinted-search-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["nike air max"], "countries": ["co.uk"], "maxItems": 50}'
```

### Integrations

- **Make, Zapier and n8n**: trigger runs and pass new Vinted listings into any workflow (Slack, Telegram or e-mail deal alerts).
- **Google Sheets**: send each run's dataset straight into a spreadsheet to track prices over time.
- **Apify API**: start runs and fetch results over REST, or with the JavaScript and Python API clients.
- **Webhooks**: get notified when a run finishes, then pull the new data.
- **MCP for AI agents**: the Apify MCP server (https://mcp.apify.com) lets Claude, ChatGPT, Cursor and other agents call this actor and read Vinted prices directly. Typical agent call: `{"searchQueries": ["levis 501"], "countries": ["co.uk"], "maxItems": 20}`, 1.4 cents.
- **Schedules**: run it every hour with `sort: "newest_first"` to catch new listings as they appear.

### Limits

- **Vinted returns at most 960 listings per search.** Deep search (on by default) splits bigger searches and merges the results. Vinted's own counts include a few percent of listings it never shows (its result pages of 96 often carry 93-95), so expect roughly 92-95% of the count on very big searches.
- **One listing can appear on several EU sites.** Vinted shares stock across countries; on non-euro sites (PL, CZ, SE, DK, HU, RO, UK, US) cross-border prices are shown converted into that site's currency, as Vinted shows them to buyers there. Deduplicate on `id` if you search several sites.
- **Search is loose.** Vinted also matches similar words, so a keyword search can include unrelated items. Use `brands` and `categoryIds` for clean results.
- **Upload time** is shown by Vinted only as "12 min ago" / "3 days ago"; `uploadedAtApprox` is computed from it and is as precise as that text.
- **Details are slower.** Vinted limits how fast item pages may be opened; with details on, expect roughly 40-100 listings a minute instead of thousands.
- **Not included:** sold-item history, shipping prices, seller usernames, names or locations, member profiles and closets, and anything that needs a Vinted login.

### How it works (for developers)

Vinted's website is a Next.js app backed by a JSON gateway at `api.vinted.<tld>` (`api.www.vinted.com` for the US). Searches are GET requests to `/svc-catalogue/items` with `search_text`, `price_from` / `price_to`, `order`, `page`, `per_page=96` and `attribute_ids[<code>]=id,id` for category, brand, size, condition, colour and material. The gateway answers only sessions holding the anonymous `access_token_web` cookie (one HEAD request to the site's home page) and picks the country from the `Locale` header. Counts per condition / colour / size come from `/svc-filters/filters/facets` and child categories from `/svc-filters/faceted_categories`; deep search uses them to split searches above 960. Item details are read from the Next.js flight data of the item page.

```bash
npm install
npm test                                   # parser tests on saved real responses
APIFY_LOCAL_STORAGE_DIR=./storage node src/main.js   # input in storage/key_value_stores/default/INPUT.json
```

# Actor input Schema

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

Optional. What you would type into the Vinted search box, one per line: "nike air max", "zara dress", "levis 501", "vintage carhartt". Each keyword is one search per country site. Leave empty to list everything that matches the filters below (or use startUrls). Vinted search is loose (it also matches similar words); add brands or categoryIds to narrow it.

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

Optional. Which Vinted sites to search, by domain ending: "com", "co.uk", "fr", "de", "it", "es", "nl", "be", "at", "lu", "pt", "pl", "lt", "cz", "sk", "se", "dk", "fi", "hu", "ro", "gr", "hr", "ie". Default \["fr"]. Several = each keyword is searched on each site (2 keywords x 3 sites = 6 searches). Prices come in that site's currency (EUR, GBP, USD, PLN, CZK, SEK, DKK, HUF, RON). EU sites share much of the same stock, so one listing can appear on several of them.

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

Optional. URLs copied from any Vinted site, one per line. A search or catalog URL ("https://www.vinted.fr/catalog?search_text=nike\&brand_ids\[]=53\&status_ids\[]=6\&order=newest_first"), a category URL ("https://www.vinted.de/catalog/1231-men-shoes") or a brand URL ("https://www.vinted.co.uk/brand/88-ralph-lauren") is scraped with the filters in the URL (the filter fields below are not applied to it). An item URL ("https://www.vinted.co.uk/items/10402575857-...") is looked up directly and always includes the details. Member / profile pages are not supported.

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

Optional. Lowest item price, in the currency of each country site (EUR on vinted.fr, GBP on vinted.co.uk, PLN on vinted.pl ...), e.g. 10. Empty = no minimum.

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

Optional. Highest item price, in the currency of each country site, e.g. 50. Empty = no maximum.

## `brands` (type: `array`):

Optional. Brand names as Vinted writes them, one per line: "Nike", "Levi's", "Zara", "Ralph Lauren". The closest Vinted brand is used and logged (Levis -> Levi's). A Vinted brand id (the number in a /brand/ URL, e.g. 53) works too. Several = any of them.

## `sizes` (type: `array`):

Optional. Sizes as shown on Vinted, one per line: "M", "38", "W32", "9.5", "S / UK 8-10". Matched against the size list of each search, so "M" also matches "M / 38 / 10" and "38" matches EU 38 in clothing and shoes. Add categoryIds to keep it to one size system. Unknown sizes are listed in the run summary.

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

Optional. Keep only these conditions: any of "new_with_tags", "new_without_tags", "very_good", "good", "satisfactory". Several = any of them. Empty = all.

## `colors` (type: `array`):

Optional. Keep only these colours: any of "black", "grey", "white", "cream", "beige", "apricot", "orange", "coral", "red", "burgundy", "pink", "rose", "purple", "lilac", "light_blue", "blue", "navy", "turquoise", "mint", "green", "dark_green", "khaki", "brown", "mustard", "yellow", "silver", "gold", "multi", "clear". Several = any of them. Empty = all.

## `categoryIds` (type: `array`):

Optional. Vinted category ids: the number at the start of a catalog URL, e.g. 1231 from https://www.vinted.de/catalog/1231-men-shoes, 1904 = Women, 5 = Men, 1193 = Kids, 1918 = Home. Category ids are the same on every Vinted site. Several = any of them. A category URL also works here.

## `sort` (type: `string`):

Optional. "relevance" (default, Vinted's own order), "newest_first" (use it on a schedule to catch new listings), "price_low_to_high" or "price_high_to_low".

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

Optional. Maximum listings saved per search (one keyword on one country site), integer >= 0. Default 100; 0 = every listing the search has. You pay per listing saved ($0.0007 each), so 100 listings = $0.07. Use 10-20 for a quick answer.

## `deepSearch` (type: `boolean`):

Optional boolean, default true. Vinted returns at most 960 listings for any one search (10 pages of 96). With deep search on, a bigger search is split automatically by condition, category, price band and colour, and the results are merged without duplicates. Only kicks in when maxItems is above 960 (or 0). It costs extra requests, not extra money per listing.

## `includeDetails` (type: `boolean`):

Optional boolean. false (default) = search data only: title, brand, size, condition, price, buyer-protection fee and total, main photo, favourites, seller id, URL; 96 listings per request. true = also open each listing to add the description (contact details masked), category and category path, colour, material, all photo URLs, when it was uploaded, whether it is reserved, and the seller's rating and review count. Same price per listing, but about 1 request per listing, so runs are much slower.

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

Optional, advanced. Number of parallel requests, integer 1-40. Default 10. Leave unset.

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

Optional, advanced. Retries per failed, blocked or rate-limited request, integer 0-20; each retry uses a new session and a new proxy IP. Default 10. Leave unset.

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

Optional, advanced. Apify Proxy settings object. Default {"useApifyProxy": true} (datacenter proxy): blocked IPs are rotated automatically. Leave unset.

## `residentialFallback` (type: `boolean`):

Optional, advanced boolean, default true. When a search request fails 6 times in a row on the datacenter proxy, it is retried through Apify residential IPs in the site's country (search answers are small, so this costs little). Item pages are never sent through residential IPs. Leave unset.

## Actor input object example

```json
{
  "searchQueries": [
    "nike"
  ],
  "countries": [
    "fr"
  ],
  "sort": "relevance",
  "maxItems": 20,
  "deepSearch": true,
  "includeDetails": false,
  "maxConcurrency": 10,
  "maxRequestRetries": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": true
}
```

# Actor output Schema

## `listings` (type: `string`):

All listings found: title, brand, size, condition, price, buyer-protection fee and total, currency, photos, favourites, seller id, country site and URL (plus description, category, colour, upload time and seller rating when includeDetails is on).

## `summary` (type: `string`):

Per-search counts, the total Vinted reports for each search, how many narrower searches deep search ran, stop reasons, warnings (unknown brands or sizes) and anything that failed.

# 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"
    ],
    "countries": [
        "fr"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/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"],
    "countries": ["fr"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/vinted-search-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 '{
  "searchQueries": [
    "nike"
  ],
  "countries": [
    "fr"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rel8ble/vinted-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rel8ble/vinted-search-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/58mzfZHtQYk0gBwCJ/builds/m7tChbPILwTdFilDp/openapi.json
