# Vinted Seller Items Scraper (`apt_marble/vinted-seller-items-scraper`) Actor

Map any Vinted seller closet — profile plus every listing they sell. Paste seller names, IDs or profile links and get items with title, price, brand, size, status, photo and link.

- **URL**: https://apify.com/apt\_marble/vinted-seller-items-scraper.md
- **Developed by:** [Hamza](https://apify.com/apt_marble) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 seller 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?

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 Seller Items Scraper

Read any Vinted seller's whole closet — their profile plus every listing they sell — and get it back as clean, structured data. Paste a seller name, a seller ID, or a full profile link, pick your markets, and receive one row per listing with its title, price, brand, size, status, photo, posting date and a direct link, with the seller's name, feedback score and closet size stamped on every row. Collect a single closet or map dozens of sellers in one run, up to 5,000 listings. Built for resellers, vintage hunters, brand-protection teams and market researchers who need a seller's full inventory as data: spot new drops first, compare prices across closets, track what sells, and build watchlists without opening listings by hand.

### What you can do with it

- **Read a whole closet at once** — get every listing a seller offers, page by page, until the closet runs out or your limit is reached.
- **Start from anything you have** — a seller name (`janedoe`), a numeric seller ID (`272737992`), or a full profile link; mix all three in one run.
- **Cover many markets** — read closets on France, Germany, Spain, Italy, the UK, the US, Poland, the Netherlands and more, with the market labeled on every row.
- **Map many sellers together** — run dozens of closets in one job and compare inventories side by side.
- **Catch new listings first** — sort newest-first and re-run on a schedule to spot fresh drops before anyone else.
- **Find the cheapest pieces** — sort by price to surface the lowest-priced listings in any closet.

### What you get

One row per listing. Abridged sample of a single result:

```json
{
  "itemId": "4123456789",
  "title": "Nike vintage windbreaker",
  "url": "https://www.vinted.fr/items/4123456789-nike-vintage-windbreaker",
  "photo": "https://images1.vinted.net/t/01_00abc1234567890abcdef12.jpg",
  "price": 24.5,
  "currency": "EUR",
  "brand": "Nike",
  "size": "M",
  "status": "available",
  "postedDate": "2026-08-28T10:14:00.000Z",
  "sellerLogin": "janedoe",
  "sellerId": "272737992",
  "sellerFeedback": 214,
  "sellerItemsCount": 87
}
```

Each row keeps the listing's photo, its brand and size where shown, and the seller's profile snapshot — name, feedback score and closet size — so every export is self-describing. Where a listing omits a field — no brand, no size, no photo — the actor leaves it empty rather than guessing.

### Input reference

| Setting | Type | Default | What it does |
| --- | --- | --- | --- |
| Seller names | list of text | — | Seller login names, e.g. `["janedoe"]`. One closet is collected per name, on every selected market. |
| Seller IDs | list of text | — | Numeric seller IDs, e.g. `["272737992"]` — the number at the start of a profile link. The fastest option: no lookup needed. |
| Seller profile links | list of text | — | Full profile links, e.g. `["https://www.vinted.fr/member/272737992-someone"]`. The seller number and the market are read from each link automatically. |
| Markets | list of text | `www.vinted.fr` | Markets to read, as hostnames: `www.vinted.fr`, `www.vinted.de`, `www.vinted.es`, `www.vinted.it`, `www.vinted.co.uk`, `www.vinted.com`, `www.vinted.pl`, `www.vinted.nl` and others. |
| Max items | whole number | `200` | How many listings to collect in total. The actor works through each closet automatically until this number is reached or the closets run out. Maximum 5,000. |
| Sort | choice | `newest` | `newest` (newest first), `price_asc` (cheapest first), `price_desc` (priciest first), or `relevance`. |

Provide at least a seller name, a seller ID, or a profile link; add markets to cover more than France.

### Output fields

| Field | Type | Description |
| --- | --- | --- |
| `itemId` | text | The listing's numeric ID. |
| `title` | text | Listing title as shown to buyers. |
| `url` | text | Direct link to the listing. |
| `photo` | text | The listing's main photo, when it has one. |
| `price` | number | Asking price, when listed. |
| `currency` | text | Currency code of the price, e.g. `EUR`, `GBP`, `PLN`. |
| `brand` | text | Brand as shown on the listing, when shown. |
| `size` | text | Size as shown on the listing, when shown. |
| `status` | text | Availability as shown, e.g. `available`, `reserved`, `sold`. |
| `postedDate` | text | Date and time the listing was published, in ISO format. |
| `sellerLogin` | text | Seller's name. |
| `sellerId` | text | Seller's numeric ID. |
| `sellerFeedback` | number | Seller's feedback score, when shown. |
| `sellerItemsCount` | number | How many listings the seller's closet holds. |
| `domain` | text | Market the row was read from. |
| `rank` | number | Position of the listing in its closet results. |

### Example use cases

- **Reseller sourcing** — map ten vintage closets newest-first every morning and message sellers on the standout pieces.
- **Price research** — pull full closets for a brand niche and compare asking prices across sellers and markets.
- **Drop watch** — re-run your favorite sellers on a daily schedule and catch new listings before they sell.
- **Brand protection** — collect everything selected sellers offer and flag unexpected brand or volume patterns.
- **Market sizing** — count listings, brands and price bands per seller to see where supply concentrates.

### Pricing

You pay per result, with no monthly minimum.

| What you are charged for | Price |
| --- | --- |
| Seller listing — one listing added to your dataset | **$2.00 per 1,000** |

**Worked example.** A closet check collecting 500 listings costs 500 × $0.002 = **$1.00**.

### Limits & what this actor cannot do

- Titles, prices, photos, brands, sizes and availability are a snapshot at the moment of collection; listings are edited, reserved or sold constantly.
- The actor returns what each closet actually serves and reports distinct listings only — the same listing repeated across pages is returned once.
- Each row carries the listing's single main photo, not the full gallery, and no description text; both live on the listing page.
- Where a listing omits a field the actor leaves it empty rather than guessing.
- Prices come back in each listing's own currency; a figure is never re-labelled into a different currency.
- A seller name that cannot be matched to a seller is reported in the run summary and skipped; numeric IDs and profile links always work directly.
- Speed depends on the size of the job and on Vinted's own response times; no fixed throughput is promised.
- Vinted's terms govern automated access. You are responsible for using the data lawfully and in line with the source site's terms, and for handling any personal data in line with applicable privacy law.

### FAQ

**Do I need a Vinted account?**
No. The actor reads only what sellers show publicly in their closets.

**Does it need my login or password?**
No. There is nothing to connect and nothing to configure — enter sellers and press start.

**What is the fastest way to point it at a seller?**
A numeric seller ID or a full profile link — both go straight to the closet. A seller name works too but needs a lookup first, so prefer the ID for big scheduled jobs.

**Which markets can I read?**
Any Vinted market hostname (`www.vinted.fr`, `www.vinted.de`, `www.vinted.es`, `www.vinted.it`, `www.vinted.co.uk`, `www.vinted.com`, `www.vinted.pl`, …). Mix as many as you like in one run.

**How many listings can I get in one run?**
Up to 5,000 per run. If your sellers hold more than that, split them across runs.

**Why are some fields empty?**
Because the listing did not show them. The actor reports exactly what the closet carries — an empty field means "not shown", never a failed guess.

**Can I get full descriptions and all photos?**
Not from closet rows — they carry one photo and no description. Feed the listing links from any run into a listing-details scraper for the complete record.

**Can I schedule it?**
Yes. Schedule it hourly, daily or weekly, and each run writes a fresh dataset you can compare against the last — ideal for tracking new drops, prices and sold items over time.

**Is the data complete?**
It is complete for everything each closet shows openly. The actor reports distinct listings rather than the shifting estimate of the total, and leaves unshown fields empty instead of inventing them.

# Actor input Schema

## `sellerLogins` (type: `array`):

Vinted seller login names, e.g. "fiorediottobre7". One closet is collected per name, on every selected market. Ignored when the name cannot be matched to a seller.

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

Numeric Vinted seller IDs, e.g. "272737992". This is the fastest input — the number at the start of a seller profile link (…/member/272737992-someone). One closet is collected per ID.

## `sellerUrls` (type: `array`):

Full Vinted seller profile links, e.g. "https://www.vinted.fr/member/272737992-someone". The seller number and the market are read from each link automatically.

## `domains` (type: `array`):

Vinted markets to read, as hostnames: www.vinted.fr, www.vinted.de, www.vinted.es, www.vinted.it, www.vinted.co.uk, www.vinted.com, www.vinted.pl, www.vinted.nl and others. Sellers given by name or ID are looked up on every market; links already carry their own market.

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

Maximum total listings to collect across all sellers. The actor reads each closet page by page until this number is reached or the closets run out.

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

Order the listings are returned in.

## Actor input object example

```json
{
  "sellerLogins": [
    "fiorediottobre7"
  ],
  "sellerIds": [
    "272737992"
  ],
  "sellerUrls": [
    "https://www.vinted.fr/member/272737992-someone"
  ],
  "domains": [
    "www.vinted.fr"
  ],
  "maxItems": 200,
  "sort": "newest"
}
```

# Actor output Schema

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

Every row this run produced.

## `runSummary` (type: `string`):

What this run collected, and anything it could not read.

# 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 = {
    "sellerLogins": [
        "fiorediottobre7"
    ],
    "sellerIds": [
        "272737992"
    ],
    "sellerUrls": [
        "https://www.vinted.fr/member/272737992-someone"
    ],
    "domains": [
        "www.vinted.fr"
    ],
    "maxItems": 200,
    "sort": "newest"
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/vinted-seller-items-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 = {
    "sellerLogins": ["fiorediottobre7"],
    "sellerIds": ["272737992"],
    "sellerUrls": ["https://www.vinted.fr/member/272737992-someone"],
    "domains": ["www.vinted.fr"],
    "maxItems": 200,
    "sort": "newest",
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/vinted-seller-items-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 '{
  "sellerLogins": [
    "fiorediottobre7"
  ],
  "sellerIds": [
    "272737992"
  ],
  "sellerUrls": [
    "https://www.vinted.fr/member/272737992-someone"
  ],
  "domains": [
    "www.vinted.fr"
  ],
  "maxItems": 200,
  "sort": "newest"
}' |
apify call apt_marble/vinted-seller-items-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apt_marble/vinted-seller-items-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/GTrdCfInAEiTKEmOU/builds/GJyfZ1HQlz3zrNDlI/openapi.json
