# Vinted Scraper - Listings, Prices, Sellers & Reviews, 26 Sites (`topapi/vinted-scraper`) Actor

Scrape Vinted listings from all 26 country sites by keyword, search URL with filters, item or member: price, fees, brand, size, condition, photos, seller. Add-ons: item details, seller profiles, reviews. Monitor new listings and price drops. $0.18 per 1,000 listings, no login.

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

## Pricing

from $0.18 / 1,000 listings

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

### What does Vinted Scraper do?

**Vinted Scraper** extracts listings from all 26 Vinted country sites (vinted.fr, vinted.de, vinted.co.uk, vinted.com, vinted.it, vinted.es, vinted.pl and 19 more). Give it keywords, Vinted search URLs with your filters, item URLs or member closets, and get one row per listing: price, buyer-protection fee and total, brand, size, condition, photos, favourites and seller. Built for resellers, price trackers, brand and market researchers and deal hunters.

Vinted scraper · Vinted API alternative · Vinted price tracker · Vinted listings export

- **Every Vinted site in one actor:** 26 country sites, prices in each site's own currency, several sites in one run
- **All of Vinted's search filters:** category, brand (by name or id), size, condition, colour, material, price range, sort order, or simply paste a search URL from your browser
- **Past Vinted's 960-result window:** Vinted shows at most 960 listings per search; Deep scan splits a big search by condition and price bands (2,000 listings in 10 s, measured)
- **Condition in English on every site** plus Vinted's condition id, so French "Très bon état", German "Sehr gut" and Polish "Bardzo dobry" all read `Very good` / `2`
- **Add-ons when you need them:** item details (description, colours, material, category path, shipping price, sold flag), seller profiles (one row per seller, including Vinted Pro legal name and registration number) and seller reviews
- **Monitor mode:** scheduled runs return only new listings (and price drops if you want), with Discord, Slack, Telegram or webhook alerts
- **No login, cookies or API key.** Pay only for delivered rows: no start fee

### What data can you get from Vinted?

<table>
<tr><td>🏷️ Title, URL, item id</td><td>💶 Price, buyer-protection fee, total</td><td>🧾 Currency of the site</td></tr>
<tr><td>👟 Brand (`brand_title`)</td><td>📏 Size (`size_title`)</td><td>✨ Condition + condition id</td></tr>
<tr><td>📷 Main photo, thumbnail, all photos</td><td>❤️ Favourites</td><td>🚀 Promoted (bumped) flag</td></tr>
<tr><td>👤 Seller id, username, Pro flag</td><td>📝 Description (details)</td><td>🎨 Colours, material (details)</td></tr>
<tr><td>🗂️ Category path + id (details)</td><td>🚚 Shipping price (details)</td><td>✅ Sold / reserved / hidden (details)</td></tr>
<tr><td>⭐ Seller rating, reviews, badges</td><td>📍 Seller city, country (profiles)</td><td>🏢 Pro legal name, registration no., VAT (profiles)</td></tr>
<tr><td>📦 Items listed / sold / bought (profiles)</td><td>💬 Reviews: stars, text, reply, reviewer</td><td>🔁 change_type, previous_price (monitor)</td></tr>
</table>

### How to scrape Vinted

1. Type keywords in **Search keywords** (for example `nike air max`), pick the **Vinted site**, or paste Vinted URLs.
2. Narrow it with the **Filters** (brand, category, condition, size, colour, price) or paste a search URL that already has them.
3. Set **Max listings**, switch on any add-on you need, and press **Start**.
4. Download the dataset as JSON, CSV or Excel, or connect it to your tools.

### ⬇️ Input

| Input | What it does |
|---|---|
| `searchQueries` | Keywords, one per line (Vinted URLs also work here). Each keyword is searched on each selected site. |
| `country` | The Vinted site: `fr`, `de`, `uk`, `it`, `es`, `nl`, `be`, `pl`, `cz`, `lt`, `pt`, `at`, `lu`, `sk`, `dk`, `fi`, `se`, `ro`, `hu`, `hr`, `gr`, `ie`, `ee`, `lv`, `si`, `us`. |
| `countries` | Several sites in one run (each keyword on each site). |
| `startUrls` / `urlsFromFile` | Vinted search, catalog and brand pages with their filters, item pages and member pages, from any site. |
| `sellerIds` | Member ids or member URLs: every listing in their closet (`maxSellerItems` caps it). |
| `itemIds` | Item ids or item URLs: the full record of each item from its page. |
| `order` | `relevance`, `newest_first`, `price_low_to_high`, `price_high_to_low`. |
| `priceFrom` / `priceTo` | Price range in the site's currency. |
| `brands` / `brandIds` | Brand names (looked up with Vinted's own brand search) or ids. |
| `catalogIds`, `sizeIds`, `colors` / `colorIds`, `materialIds` | Vinted's category, size, colour and material filters. |
| `conditions` | `new_with_tags`, `new_without_tags`, `very_good`, `good`, `satisfactory`. |
| `sellerType` | `any`, `private` or `business` (Vinted Pro). |
| `includeKeywords` / `excludeKeywords` | Keep or drop listings by words in the title or brand. |
| `includeDetails` | ➕ Item details add-on. |
| `includeSellerDetails` | ➕ Seller profiles add-on (one row per seller). |
| `includeSellerReviews` + `maxReviewsPerSeller` | ➕ Seller reviews add-on. |
| `maxItems` | Listings in the run (0 = no limit). `maxItemsPerSearch` caps each search. |
| `deepScan` | Read past Vinted's 960-listing window by splitting the search. |
| `language` | `en` (English labels on every site) or `local` (the site's own language). |
| `monitorMode`, `monitorStoreName`, `alertOnPriceDrop`, `minPriceDropPct`, `skipFirstRun`, `resetMonitor` | Scheduled runs that return only new listings / price drops. |
| `webhookUrl`, `discordWebhookUrl`, `slackWebhookUrl`, `telegramToken` + `telegramChatId` | Alerts with the new listings after each run. |

#### Input JSON

```json
{
  "searchQueries": ["levis 501"],
  "countries": ["fr", "de", "it"],
  "brands": ["Levi's"],
  "conditions": ["very_good", "good"],
  "priceTo": 40,
  "order": "newest_first",
  "maxItems": 300,
  "includeDetails": true
}
```

#### Paste a Vinted link to reuse the filters you set on the site

Set the filters on Vinted in your browser and paste the address: `https://www.vinted.co.uk/catalog?search_text=jacket&brand_ids[]=88&status_ids[]=6&price_from=20&price_to=80&order=newest_first`. The site, keywords, category, brand, size, condition, colour, material, price and sort come from the URL. Category and brand pages (`/catalog/1453-running-shoes`, `/brand/53-nike`) work too.

#### More than 960 listings from one search

Vinted serves at most 960 listings for any one search, however many exist. With **Deep scan** on, a search that hits the limit is split by condition, then by price bands, until every slice fits; listings seen in two slices are delivered once. Measured: `nike` on vinted.fr, `maxItems` 2,000, Deep scan on: 2,000 listings in 10.3 s. Without Deep scan the run stops at the window and its status message says so.

### ⬆️ Output

Each row has a `record_type`: `item` (a listing), `seller` (Seller profiles add-on) or `review` (Seller reviews add-on). A real listing row from a run on vinted.de (2026-10-28, run anwECsVORN1VtWxUD), with Item details on:

```json
{
  "record_type": "item",
  "id": 10566415240,
  "url": "https://www.vinted.de/items/10566415240-jean-levis-501-coupe-droite-braguette-boutonnee-noir-vintage-taille-w33l34-fr42",
  "title": "Jean Levi’s 501 Coupe Droite Braguette Boutonnée Noir Vintage Taille W33/L34 FR42",
  "price_amount": 22.5,
  "price_currency": "EUR",
  "service_fee": 1.83,
  "total_item_price": 24.33,
  "brand_title": "Levi's",
  "size_title": "W33",
  "status": "Very good",
  "status_id": 2,
  "condition": "Very good",
  "favourite_count": 0,
  "is_promoted": false,
  "photo_url": "https://images1.vinted.net/tc/02_00367_YQB5PzyyFy5WLytfynwZQRHv/cc1240d6.webp?s=20540643669e155f8cbe06f54fd9d92df3d39d02",
  "photo_count": 11,
  "seller_id": 161573247,
  "seller_login": "thesalomon",
  "seller_business": false,
  "seller_url": "https://www.vinted.de/member/161573247",
  "market": "de",
  "site": "vinted.de",
  "search_query": "\"levis 501\" on vinted.de",
  "position": 4,
  "description": "- Très bon état, lavé et repassé\n\n- Taille W33/L34 FR42 (mesures en photos)\n\n- Envoi sous 24 h, de manière soignée\n\nJe réponds aux offres et aux questions rapidement 😉\n\nMots clés :\n\nlevis levis501 jeanvintage y2k denim streetwear vintage90s levisvintage jeanbleu vintage\n\n\n#SKU390",
  "brand_id": 10,
  "colors": [
    "Black"
  ],
  "material": "Cotton",
  "catalog_id": 1819,
  "category": "Straight fit jeans",
  "category_path": [
    "Men",
    "Clothing",
    "Jeans",
    "Straight fit jeans"
  ],
  "uploaded_ago": "4 min ago",
  "shipping_price": 4.69,
  "shipping_currency": "EUR",
  "is_sold": false,
  "is_reserved": false,
  "seller_rating": 4.9,
  "seller_feedback_count": 237,
  "seller_badges": [
    "ACTIVE_LISTER",
    "SPEEDY_SHIPPING"
  ],
  "details_fetched": true,
  "scraped_at": "2026-10-28T08:17:56.139Z"
}
```

A seller row (Seller profiles add-on) carries `login`, `city`, `country_code`, `rating`, `feedback_count` (positive / neutral / negative), `item_count`, `sold_items_count`, `bought_items_count`, `followers_count`, `last_seen_at`, `is_on_holiday`, verifications, bundle discounts and, for Vinted Pro sellers, `business_legal_name`, `business_legal_code`, `business_registrar`, `business_entity_type`, `business_vat` and `business_address`. A review row carries `rating`, `feedback`, `is_automatic`, `reply`, `reviewer_login`, `item_id` and `created_at`.

#### Fields and how often they are filled

Measured on real runs of 2026-10-28 (listing rows from 7 searches on 5 sites, 672 listings; closets, item pages, profiles and reviews from the runs below):

| Field | Filled |
|---|---|
| id, url, title, price_amount, price_currency, service_fee, total_item_price, status, condition, photo_url, seller_id, seller_login, seller_business, favourite_count | 100% |
| brand_title | 99.3% (listings without a brand have none) |
| size_title | 99.6% on clothing searches; lower for bags, books and home goods, which have no size |
| status_id | 100% (English labels; local labels are matched with Vinted's own condition list) |
| description, colors, catalog_id, category, category_path, uploaded_ago, shipping_price, is_sold, seller_rating (Item details) | 100% of rows with details |
| material (Item details) | 30-70% (only when the seller set one) |
| seller city (Seller profiles) | 57-65% (sellers can hide their location) |
| business_legal_code (Seller profiles) | every Vinted Pro seller (7-18% of sellers in the searches measured) |
| reply (reviews) | about 1% (sellers rarely reply) |

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

Pay per event, no start fee:

| Event | Price | Charged when |
|---|---|---|
| Listing (`item`) | **$0.00018** ($0.18 per 1,000) | a listing row is delivered |
| Item details (`item-details`) | $0.00022 | Item details is on and the listing's page was read |
| Seller profile (`seller-details`) | $0.00056 | Seller profiles is on: once per seller per run |
| Seller review (`seller-review`) | $0.0009 | Seller reviews is on: per review row |

Listings removed by a filter, duplicates and listings seen by earlier monitor runs are never charged. An item URL / item id row is read from its page and costs one listing (the details come with it). Set a maximum charge on the run and the actor stops cleanly at it, delivering only what fits.

Measured runs (Apify platform, 256 MB):

| Run | Rows | Time |
|---|---|---|
| `nike` on vinted.fr, 20 listings (the prefill) | 20 | 1.5-2.9 s |
| `robe mango`, 200 listings | 200 | 2.1 s |
| `nike`, 1,000 listings, no Deep scan | 959 (the 960 window) | 3.6 s |
| `nike`, 2,000 listings, Deep scan | 2,000 | 10.3 s |
| `levis 501`, 100 listings + Item details | 100 + 100 | 2-4 min |
| `veste carhartt`, 30 listings + all three add-ons | 30 + 30 details + 28 sellers + 74 reviews | 51 s |
| one Vinted Pro member, 100 closet listings + profile + 40 reviews | 141 | 4.4 s |
| monitor poll with nothing new | 0 (nothing charged) | 1.9 s |

### Run it on a schedule

1. Turn on **Only new listings (monitor)** and give the schedule its own **Monitor store name**.
2. Optional: **Skip first run** remembers what is listed now without delivering it, so the first scheduled run already returns only new listings; **Also deliver price drops** adds listings seen before whose price fell (`change_type: "price_drop"`, `previous_price`).
3. Add a Discord, Slack, Telegram or webhook URL for alerts.
4. Create an Apify **Schedule** (for example every 15 minutes). A poll with nothing new reads one page and charges nothing.

Monitor mode always reads newest first and stops at the first page with nothing new.

### Integrations, API & MCP

Run it from the Apify API, the JavaScript or Python client, Make, Zapier, n8n, Google Sheets, webhooks or the Apify MCP server for AI agents. Example API call:

```bash
curl -X POST "https://api.apify.com/v2/acts/TopApi~vinted-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["nike tn"],"country":"fr","maxItems":50}'
```

### Limits & empty runs

- **960 listings per search** is Vinted's own cap; use Deep scan or narrower filters for more.
- **Item details and seller profiles are limited by Vinted per IP** (about 30 item pages and 30 profiles a minute). The actor spreads them over several connections, so 100 listings with details take 2-4 minutes; search listings alone are not limited (2,000 in 10 s).
- **View counts are not returned:** Vinted's own data shows 0 views on every listing (it no longer publishes them), so the field is left out rather than filled with a false zero.
- **Search by image is not offered.**
- If Vinted refuses every route, the run ends with an error status and nothing is charged; a search that matches nothing ends with a status saying what to change.

### FAQ

#### How many listings can Vinted Scraper collect in one run?

As many as you set in Max listings. One search returns up to 960 (Vinted's limit); with Deep scan, 2,000 listings were read in 10 seconds.

#### Which Vinted sites are supported?

All 26: France, Germany, United Kingdom, Italy, Spain, Netherlands, Belgium, Poland, Czechia, Lithuania, Portugal, Austria, Luxembourg, Slovakia, Denmark, Finland, Sweden, Romania, Hungary, Croatia, Greece, Ireland, Estonia, Latvia, Slovenia and the United States.

#### Can I get only new Vinted listings?

Yes. Monitor mode remembers what earlier runs delivered and returns only new listings, optionally price drops, with alerts.

#### Does it return the description and all photos?

Yes, with Item details on (or for item URLs / ids): description, every photo, colours, material, category path, shipping price and sold / reserved flags.

#### Can I scrape a seller's whole closet?

Yes: put the member id or member URL in Member ids (or paste the member URL). Add Seller profiles and Seller reviews for the seller row and the reviews.

#### Does it show Vinted Pro sellers' company details?

Yes. Seller rows of Vinted Pro sellers carry the legal name, registration number, registry, entity type, VAT number and registered address Vinted publishes in their legal notice.

#### Why is the condition in English?

Labels default to English on every site so data from several sites lines up; set Label language to `local` for the site's own words. `status_id` is the same on every site.

#### Do I need a Vinted account, cookies or an API key?

No.

#### Can I use it with the Apify API or an MCP server?

Yes: start it from the API, a client library, a schedule, or through the Apify MCP server from an AI agent.

#### Why did my run return no listings?

Your filters matched nothing on that site, or every listing was removed by a filter, or (in monitor mode) nothing is new. The status message and the `RUN_SUMMARY` record say which.

#### Your feedback

Found a bug or need a field? Open an issue on the actor's Issues tab.

# Actor input Schema

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

What you would type in Vinted's search box, one per line, e.g. "nike air max", "levis 501", "zara dress". Vinted URLs work here too.

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

The site keywords, member ids and item ids are read on. Prices come in that site's currency. URLs keep their own site.

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

Search each keyword on several sites in one run: codes such as fr, de, uk, it, es, nl, pl, us (overrides the site above for keywords).

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

Search / catalog / brand pages copied from your browser with their filters (vinted.fr/catalog?search_text=…\&brand_ids\[]=…), item pages (/items/…) and member pages (/member/…), on any Vinted site.

## `urlsFromFile` (type: `string`):

Many URLs at once: paste them one per line, or one link to a .txt / .csv file that lists them.

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

Vinted member ids or member URLs: every listing in their closet (see Max listings per member).

## `itemIds` (type: `array`):

Vinted item ids or item URLs: each item's full record from its page (description, photos, category, shipping).

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

Vinted's own sort. Monitor mode always reads newest first.

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

In the site's currency (EUR, GBP, USD, PLN, CZK, DKK, SEK, RON, HUF), item price before the buyer-protection fee.

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

In the site's currency, item price before the buyer-protection fee.

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

Brand names as Vinted spells them, e.g. "Nike", "Ralph Lauren", "Levi's": looked up with Vinted's own brand search.

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

Vinted brand ids, e.g. 53 (Nike), 88 (Ralph Lauren). Shown in brand URLs: /brand/53-nike.

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

Vinted category ids, e.g. 1904 (Women), 5 (Men), 1193 (Kids). Shown in category URLs: /catalog/1453-running-shoes.

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

Vinted's five condition grades (ids 6, 1, 2, 3, 4).

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

Vinted size ids (they depend on the category). Easiest: set the size on Vinted and paste the URL above.

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

Colour names as Vinted lists them: Black, White, Grey, Beige, Brown, Red, Pink, Purple, Blue, Navy, Green, Yellow, Orange, Gold, Silver, Multi, Cream, Khaki, Turquoise …

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

Vinted colour ids, e.g. 1 (Black), 12 (White).

## `materialIds` (type: `array`):

Vinted material ids, e.g. 44 (Cotton), 43 (Leather).

## `sellerType` (type: `string`):

Applied to each listing before it is delivered; removed listings are never charged.

## `includeKeywords` (type: `array`):

Keep only listings whose title or brand contains at least one of these words.

## `excludeKeywords` (type: `array`):

Drop listings whose title or brand contains any of these words, e.g. "fake", "replica", "lot".

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

Opens each listing's page: description, colours, material, category path and id, brand id, upload age, every photo, shipping price, sold / reserved flags, seller rating and badges.

## `includeSellerDetails` (type: `boolean`):

One seller row per unique seller (city, country, rating, reviews, items listed / sold / bought, followers, last seen, verifications, Vinted Pro legal name and registration number), charged once per seller; key fields are copied onto that seller's listings.

## `includeSellerReviews` (type: `boolean`):

One row per review left on each seller found (rating, text, reviewer, item, date, the seller's reply).

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

Most recent reviews per seller when Seller reviews is on.

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

Listings delivered in the whole run (0 = no limit). Seller and review rows are extra.

## `maxItemsPerSearch` (type: `integer`):

Cap for each keyword / URL so one search cannot use the whole run (empty = no cap).

## `maxSellerItems` (type: `integer`):

Closet listings per member id / member URL (empty = the whole closet, within Max listings).

## `deepScan` (type: `boolean`):

Vinted shows at most 960 listings per search. On = a bigger search is split by condition, then by price bands, until every slice fits, so Max listings can go far past 960.

## `language` (type: `string`):

Language of Vinted's labels (condition, sizes, colours, category names). Titles and descriptions stay as the seller wrote them.

## `monitorMode` (type: `boolean`):

Remembers delivered listings per search in a named key-value store and returns only new ones (newest first; a poll with nothing new reads one page and costs nothing).

## `monitorStoreName` (type: `string`):

Named key-value store that keeps the memory. Use one name per schedule.

## `alertOnPriceDrop` (type: `boolean`):

In monitor mode, deliver a listing seen before again when its price dropped (change_type "price_drop", previous_price). Reads the whole search window each run.

## `minPriceDropPct` (type: `integer`):

A price drop must be at least this many percent.

## `skipFirstRun` (type: `boolean`):

The first monitor run only remembers what is listed now (nothing delivered or charged), so the next runs return just new listings.

## `resetMonitor` (type: `boolean`):

Forget what earlier runs delivered (this run delivers everything again).

## `webhookUrl` (type: `string`):

POST the new listings (JSON) to this URL after the run.

## `webhookHeaders` (type: `object`):

Extra headers for the webhook, e.g. {"Authorization": "Bearer …"}.

## `discordWebhookUrl` (type: `string`):

Discord webhook URL for a message with the new listings.

## `slackWebhookUrl` (type: `string`):

Slack incoming-webhook URL for a message with the new listings.

## `telegramToken` (type: `string`):

Telegram bot token (with the chat id below).

## `telegramChatId` (type: `string`):

Chat id the Telegram bot posts to.

## `notificationLimit` (type: `integer`):

How many listings each alert lists.

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

Requests in flight at once (item pages and profiles run up to twice this, spread over several connections).

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

Not needed: the actor reads Vinted directly and moves to Apify datacenter, then residential proxies on its own when a route is refused. Set a proxy here to force one.

## Actor input object example

```json
{
  "searchQueries": [
    "nike"
  ],
  "country": "fr",
  "order": "relevance",
  "sellerType": "any",
  "includeDetails": false,
  "includeSellerDetails": false,
  "includeSellerReviews": false,
  "maxReviewsPerSeller": 20,
  "maxItems": 20,
  "deepScan": false,
  "language": "en",
  "monitorMode": false,
  "monitorStoreName": "vinted-monitor",
  "alertOnPriceDrop": false,
  "minPriceDropPct": 0,
  "skipFirstRun": false,
  "resetMonitor": false,
  "notificationLimit": 10,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per Vinted listing, plus seller-profile and review rows when those add-ons are on (record_type tells them apart).

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

Per-search counts (read, delivered, filtered, duplicates, seen before), egress route, requests and charges.

# 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"
    ],
    "country": "fr",
    "maxItems": 20
};

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

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

```

## MCP server setup

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