# 👜 Vinted Comps Scraper (`skootle/resale-marketplace-comps`) Actor

Scrape Vinted for fashion resale listings + comps. Price (USD + raw), condition, brand, size, seller, photos. Plus computed comps: median, P10/P90, byVariant grouped by brand+size+condition, netSellerUsd after fees. Export, run via API, schedule, or integrate with other tools.

- **URL**: https://apify.com/skootle/resale-marketplace-comps.md
- **Developed by:** [Skootle](https://apify.com/skootle) (community)
- **Categories:** E-commerce, AI, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 listing or comps\_summary records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Comps hero](https://raw.githubusercontent.com/kesjam/skootle-actors-assets/main/heroes/resale-marketplace-comps.png)

### TL;DR

Scrape Vinted for fashion resale listings + comps. Returns one record per listing (price, condition, brand, size, seller, photos, ISO date) plus one `comps_summary` per query with `medianUsd`, `p10Usd`, `p90Usd`, sample-size confidence, `byVariant` block grouped by `(brand, size, condition)`, and `netSellerUsd` (after Vinted's buyer-protection fee). Built for fashion resellers, cross-listing tools, AI fashion-resale agents.

---

<!-- skootle:review-cta -->
> Try it on a small dataset, then let us know what you think in a [review](https://apify.com/skootle/resale-marketplace-comps/reviews).

---

### What does Vinted Comps Scraper do?

Vinted Comps Scraper extracts every public Vinted listing matching your search query and computes comps in one pass. You give it queries (e.g., `["louis vuitton bag", "vintage levis 501"]`); it returns two record types:

1. **`listing`** — one record per individual Vinted listing with sold price (numeric USD + raw EUR/GBP), condition enum, brand, size, seller name + reviews + reputation, listing date in ISO 8601, photos, and `netSellerUsd` after Vinted's buyer-protection fee.

2. **`comps_summary`** — one record per query with `medianUsd`, `p10Usd`, `p90Usd`, `sampleSize`, `confidence` enum, and `byVariant[]` block grouped by `(brand, size, condition)` tuple.

Vinted is the only platform live in v0.1. Depop and Mercari arrive in v0.2.

### Why scrape Vinted?

Vinted is the largest peer-to-peer fashion resale marketplace in Europe (~80M users) and rapidly growing in North America, with the deepest catalog of secondhand luxury, vintage, streetwear, and contemporary fashion outside of eBay. For fashion resellers, cross-listing tools, brand monitoring, and AI fashion-resale agents, Vinted comps are gold.

Vinted doesn't expose a public API for non-merchant users. This actor handles the listing fetch, condition normalization, currency conversion to USD, fee math, and the variant-grouped comps computation.

### Who needs this?

- **Fashion resellers** pricing buys and listings before paying or relisting
- **Boutique and vintage sellers** monitoring competitor pricing on their brand
- **Cross-listing tool builders** integrating Vinted comps into Vendoo / List Perfectly / Crosslist
- **Brand-protection teams** monitoring secondary-market pricing on their brand
- **AI fashion-resale agents** running daily reprice loops on inventory
- **Demand researchers** measuring brand momentum via `favoriteCount` velocity

### How to use Vinted Comps Scraper

1. Open the **Input** tab on the actor page
2. Add search queries to `searchQueries`
3. Optionally filter `brands`, `sizes`, `conditions`
4. Set `maxItemsPerQuery` (default 50)
5. Optionally enable `emitCompsSummary` (default `true`)
6. Click **Start**

### How much will scraping Vinted cost?

This actor is priced per event:

- **Actor Start**: $0.01 once per run
- **Vinted record (listing or comps_summary)**: tiered, charged per record written

| Apify plan | $/1000 records |
|---|---|
| FREE | $30.00 |
| BRONZE | $25.50 |
| SILVER | $21.00 |
| GOLD | $18.00 |
| PLATINUM | $18.00 |
| DIAMOND | $16.20 |

A daily reseller workflow on 10 SKUs returns ~510 records. Roughly $9 per run on GOLD.

### Is it legal to scrape Vinted?

Yes, Vinted's listings are publicly accessible to anyone in a browser without logging in. This actor reads the same public pages with proper rate-limiting. It does not log into seller accounts, does not access buyer-side data, and does not bypass any technical access control.

For commercial redistribution of raw datasets, consult Vinted's terms and your legal counsel. For internal pricing tools, repricing engines, AI training, and comparison-shopping research, the scraped data is treated like any other public web content.

### Examples

#### Example 1: Louis Vuitton bag comps

```json
{
  "searchQueries": ["louis vuitton bag"],
  "maxItemsPerQuery": 50
}
````

#### Example 2: Vintage Levis 501 by size

```json
{
  "searchQueries": ["vintage levis 501"],
  "sizes": ["W30", "W31", "W32", "W33"],
  "maxItemsPerQuery": 100
}
```

#### Example 3: Reseller bulk-SKU repricing

```json
{
  "searchQueries": [
    "north face nuptse jacket",
    "carhartt detroit jacket",
    "patagonia retro-x fleece"
  ],
  "maxItemsPerQuery": 50
}
```

#### Example 4: Brand monitoring

```json
{
  "searchQueries": ["yourBrandName"],
  "watchlistMode": true,
  "maxItemsPerQuery": 100
}
```

#### Example 5: Pre-loved-only filter

```json
{
  "searchQueries": ["chanel classic flap"],
  "conditions": ["VERY_GOOD", "GOOD"],
  "maxItemsPerQuery": 50
}
```

#### Example 6: Cross-platform comp comparison

```json
{
  "searchQueries": ["air jordan 1 chicago size 10"],
  "maxItemsPerQuery": 50
}
```

Pair with the `ebay-sold-comps` actor running the same query for cross-platform comp delta.

#### Example 7: Demand-velocity research

```json
{
  "searchQueries": ["stanley quencher"],
  "maxItemsPerQuery": 200
}
```

Aggregate `favoriteCount` per listing as a leading demand indicator.

#### Example 8: AI fashion-resale autopilot

```json
{
  "searchQueries": ["yourSKU1", "yourSKU2"],
  "watchlistMode": true,
  "maxItemsPerQuery": 50
}
```

Daily run; agent compares yesterday's `medianUsd` to today's, flags 10%+ swings.

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | string\[] | required | Search terms |
| `brands` | string\[] | `[]` | Brand filter |
| `sizes` | string\[] | `[]` | Size filter |
| `conditions` | enum\[] | `[]` | `NEW_WITH_TAGS`, `NEW_WITHOUT_TAGS`, `VERY_GOOD`, `GOOD`, `SATISFACTORY` |
| `priceMinUsd`, `priceMaxUsd` | float | `null` | Price range |
| `maxItemsPerQuery` | int | `50` | Per-query cap |
| `emitCompsSummary` | bool | `true` | Also emit one `comps_summary` per query |
| `watchlistMode` | bool | `false` | Idempotent diff |
| `useApifyProxy` | bool | `true` | Apify residential proxy. Recommended. |

### Vinted Comps output format

The dataset has two record types. Filter by `recordType`.

#### `listing`

| Field | Type | Description |
|---|---|---|
| `outputSchemaVersion`, `recordType`, `recordId` | string | Discriminated identity |
| `itemId`, `url` | string | Vinted item ID + URL |
| `title`, `description` | string | Listing copy |
| `priceUsd`, `priceRaw`, `currency` | float / string | Numeric + original |
| `buyerProtectionFeeUsd`, `totalBuyerUsd` | float | Vinted fee + total cost to buyer |
| `netSellerUsd` | float | What seller takes home |
| `condition` | enum | `NEW_WITH_TAGS`, `NEW_WITHOUT_TAGS`, `VERY_GOOD`, `GOOD`, `SATISFACTORY` |
| `brand`, `size`, `color`, `material` | string | Item attributes |
| `category`, `subcategory` | string | Vinted taxonomy |
| `sellerName`, `sellerCountry`, `sellerReviewCount`, `sellerRating` | string / float | Seller info |
| `imageUrls` | string\[] | Listing photos |
| `favoriteCount` | int | "Hearts" on the listing |
| `listedAt`, `scrapedAt` | ISO 8601 | |
| `searchQuery` | string | The query that found this listing |
| `fieldCompletenessScore`, `agentMarkdown` | int / string | Quality + LLM-ready summary |

#### `comps_summary`

| Field | Type | Description |
|---|---|---|
| `outputSchemaVersion`, `recordType`, `recordId` | string | Discriminated identity |
| `searchQuery`, `sampleSize`, `confidence` | string / int / enum | Query context + confidence |
| `medianUsd`, `p10Usd`, `p90Usd`, `meanUsd`, `stdDevUsd` | float | Comps math |
| `byVariant` | array | `[{ variant: { brand, size, condition }, count, medianUsd }]` |
| `agentMarkdown` | string | LLM-ready summary |

#### Vinted Comps scraper output example (listing)

```json
{
  "outputSchemaVersion": "2026-05-08",
  "recordType": "listing",
  "recordId": "vinted:listing:1234567890",
  "itemId": "1234567890",
  "url": "https://www.vinted.com/items/1234567890",
  "title": "Louis Vuitton Speedy 30 monogram",
  "priceUsd": 425.00,
  "buyerProtectionFeeUsd": 35.50,
  "totalBuyerUsd": 460.50,
  "netSellerUsd": 408.00,
  "condition": "VERY_GOOD",
  "brand": "Louis Vuitton",
  "size": "M",
  "category": "Bags",
  "sellerName": "stylesonia",
  "sellerCountry": "FR",
  "sellerRating": 4.92,
  "favoriteCount": 23,
  "listedAt": "2026-05-08T10:00:00.000Z",
  "fieldCompletenessScore": 95,
  "agentMarkdown": "**👜 Louis Vuitton Speedy 30 monogram**\n- 💰 $425 · net to seller $408\n- 🏷 VERY_GOOD · size M\n- 👤 stylesonia (FR · ⭐ 4.92)\n- ❤️ 23 hearts\n- 🔗 https://www.vinted.com/items/1234567890"
}
```

### During the Actor run

The actor uses Apify residential proxy with `gotScraping` (or Playwright fallback) to fetch each query's results. Each listing card is parsed; currency converted to USD; fees computed; comps\_summary record runs after.

The actor writes:

1. **`OUTPUT`** — run summary
2. **`AGENT_BRIEFING`** — top queries by sample size + median
3. **`WATCHLIST_STATE`** — (when `watchlistMode: true`) seen item IDs

### FAQ

#### How does Vinted Comps Scraper work?

The actor fetches Vinted's public search-results pages with Apify's residential proxy and respectful rate-limiting, parses each listing card, normalizes condition + brand + size + currency, computes the per-query comps\_summary, and pushes the dataset.

#### Are Mercari and Depop supported?

Not in v0.1. Both have aggressive anti-bot challenges that require a vendor unblocker. Both on v0.2 roadmap.

#### Can I monitor for new listings only?

Yes. Set `watchlistMode: true`. The actor stores seen item IDs and emits only listings new since the last run.

#### Can I filter by condition?

Yes. `conditions: ["VERY_GOOD", "GOOD"]` to skip new-with-tags and worn pieces.

#### Can I get netSellerUsd for repricing?

Yes — every listing carries `netSellerUsd` after Vinted's buyer-protection fee.

#### Can I get the byVariant breakdown?

Yes. Set `emitCompsSummary: true` (default). Each `comps_summary` includes a `byVariant` array grouped by `(brand, size, condition)`.

#### Can I use this with the Apify API?

Yes. POST to `https://api.apify.com/v2/acts/skootle~resale-marketplace-comps/runs`.

#### Can I integrate with Make / Zapier / n8n / Slack?

Yes. Click **Integrations** on the actor page.

#### Why does this actor cost more than free Vinted scrapers?

This actor ships normalized condition + brand + size, USD currency conversion, Vinted-fee math, computed comps (median, P10/P90, byVariant), agent-ready markdown summaries.

#### Your feedback

Hit a bug or want a feature? Open an issue on the [Issues tab](https://apify.com/skootle/resale-marketplace-comps/issues/open) rather than the reviews page, and we'll fix it fast (typically within 48 hours).

### Why choose Vinted Comps Scraper

- **Comps math built-in** — median, P10/P90, byVariant grouped by `(brand, size, condition)`
- **`netSellerUsd` after fees** — repricing logic models true take-home
- **Condition + brand + size enums** — typed for downstream filtering
- **Currency normalization** — USD + raw EUR/GBP preserved
- **Discriminated union** — `listing` + `comps_summary` in one dataset
- **Watchlist diff mode** — only emits NEW listings since the last run
- **Versioned schema** — `outputSchemaVersion: '2026-05-08'`
- **Idempotent record IDs** — `vinted:listing:<id>`, `vinted:comps:<query-slug>` stable across runs
- **Agent-grade output** — `agentMarkdown` ready to paste into an LLM context

### Other Skootle actors you might want to check

- **[eBay Sold Comps · Variant Pricing](https://apify.com/skootle/ebay-sold-comps)** — same comps pattern for eBay sold listings
- **[Shopify App Store Scraper](https://apify.com/skootle/shopify-app-store-scraper)** — Shopify app intelligence
- **[Reddit Subreddit Scraper](https://apify.com/skootle/reddit-subreddit-monitor)** — sentiment + trend signals on r/Flipping
- **[Apple App Store Reviews Monitor](https://apify.com/skootle/app-store-reviews)** — App Store reviews + metadata
- **[GitHub Trending Repos](https://apify.com/skootle/github-trending)** — daily trending dev repos

### Support and contact

File issues on this actor's page — replies within 48 hours.

# Actor input Schema

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

Free-text searches, e.g. \['louis vuitton bag', 'vintage levis']. One run handles multiple queries; comps are computed per query.

## `marketplaces` (type: `array`):

v0.1 ships Vinted only. Depop and Mercari arrive in v0.2 (vendor-unblocker integration in progress for Depop's IP-level blocking; Mercari needs RSC reverse-engineering). Selecting depop/mercari today returns 0 rows from those platforms.

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

Vinted serves regional domains (US, GB, FR, DE, IT, ES, PL, NL). Depop filters by country.

## `itemsPerQuery` (type: `integer`):

How many listings per (query × platform). Default is conservative so the daily auto-test fits Apify's 5-minute window.

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

Hard cap on the total listings saved to the dataset.

## `daysToScrape` (type: `integer`):

Window for sell-through and velocity calculations.

## `emitComps` (type: `boolean`):

When true, the actor writes one comps\_summary record per search query with median/P10-P90 overall and per-platform, sell-through rate, velocity, and a cross-listing arbitrage signal.

## `measureSellThrough` (type: `boolean`):

Sell-through requires a second active-listings count per platform. Vinted's pagination already returns this; Depop does not. Default off in v0.1.

## `useApifyProxy` (type: `boolean`):

Apify residential proxy. Recommended for production; safer against rate limits.

## `apifyProxyGroups` (type: `array`):

RESIDENTIAL recommended. Override only if your account has dedicated groups.

## Actor input object example

```json
{
  "searchQueries": [
    "louis vuitton bag"
  ],
  "marketplaces": [
    "vinted"
  ],
  "country": "US",
  "itemsPerQuery": 12,
  "maxItems": 10,
  "daysToScrape": 30,
  "emitComps": true,
  "measureSellThrough": false,
  "useApifyProxy": true,
  "apifyProxyGroups": [
    "RESIDENTIAL"
  ]
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Listing rows AND per-query comps summaries. Filter by recordType in your downstream code.

## `agentBriefing` (type: `string`):

Markdown digest of the run: comps summary per query, arbitrage signals, top-10 listings.

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

Compact OUTPUT object with row counts and per-stage error counts.

# 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": [
        "louis vuitton bag"
    ],
    "marketplaces": [
        "vinted"
    ],
    "apifyProxyGroups": [
        "RESIDENTIAL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("skootle/resale-marketplace-comps").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": ["louis vuitton bag"],
    "marketplaces": ["vinted"],
    "apifyProxyGroups": ["RESIDENTIAL"],
}

# Run the Actor and wait for it to finish
run = client.actor("skootle/resale-marketplace-comps").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "louis vuitton bag"
  ],
  "marketplaces": [
    "vinted"
  ],
  "apifyProxyGroups": [
    "RESIDENTIAL"
  ]
}' |
apify call skootle/resale-marketplace-comps --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=skootle/resale-marketplace-comps",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "👜 Vinted Comps Scraper",
        "description": "Scrape Vinted for fashion resale listings + comps. Price (USD + raw), condition, brand, size, seller, photos. Plus computed comps: median, P10/P90, byVariant grouped by brand+size+condition, netSellerUsd after fees. Export, run via API, schedule, or integrate with other tools.",
        "version": "0.1",
        "x-build-id": "Dfhk0dvQotI0GPVfV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/skootle~resale-marketplace-comps/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-skootle-resale-marketplace-comps",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/skootle~resale-marketplace-comps/runs": {
            "post": {
                "operationId": "runs-sync-skootle-resale-marketplace-comps",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/skootle~resale-marketplace-comps/run-sync": {
            "post": {
                "operationId": "run-sync-skootle-resale-marketplace-comps",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Free-text searches, e.g. ['louis vuitton bag', 'vintage levis']. One run handles multiple queries; comps are computed per query.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "marketplaces": {
                        "title": "Marketplaces to query",
                        "type": "array",
                        "description": "v0.1 ships Vinted only. Depop and Mercari arrive in v0.2 (vendor-unblocker integration in progress for Depop's IP-level blocking; Mercari needs RSC reverse-engineering). Selecting depop/mercari today returns 0 rows from those platforms.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "vinted",
                                "depop",
                                "mercari"
                            ],
                            "enumTitles": [
                                "Vinted (live)",
                                "Depop (v0.2 — coming soon)",
                                "Mercari (v0.2 — coming soon)"
                            ]
                        }
                    },
                    "country": {
                        "title": "Country / region",
                        "enum": [
                            "US",
                            "GB",
                            "FR",
                            "DE",
                            "IT",
                            "ES",
                            "PL",
                            "NL"
                        ],
                        "type": "string",
                        "description": "Vinted serves regional domains (US, GB, FR, DE, IT, ES, PL, NL). Depop filters by country.",
                        "default": "US"
                    },
                    "itemsPerQuery": {
                        "title": "Items per query per platform",
                        "minimum": 1,
                        "maximum": 96,
                        "type": "integer",
                        "description": "How many listings per (query × platform). Default is conservative so the daily auto-test fits Apify's 5-minute window.",
                        "default": 12
                    },
                    "maxItems": {
                        "title": "Max total listings (across all queries × platforms)",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on the total listings saved to the dataset.",
                        "default": 10
                    },
                    "daysToScrape": {
                        "title": "Sell-through window (days)",
                        "minimum": 1,
                        "maximum": 90,
                        "type": "integer",
                        "description": "Window for sell-through and velocity calculations.",
                        "default": 30
                    },
                    "emitComps": {
                        "title": "Emit comps_summary record per query",
                        "type": "boolean",
                        "description": "When true, the actor writes one comps_summary record per search query with median/P10-P90 overall and per-platform, sell-through rate, velocity, and a cross-listing arbitrage signal.",
                        "default": true
                    },
                    "measureSellThrough": {
                        "title": "Measure sell-through rate",
                        "type": "boolean",
                        "description": "Sell-through requires a second active-listings count per platform. Vinted's pagination already returns this; Depop does not. Default off in v0.1.",
                        "default": false
                    },
                    "useApifyProxy": {
                        "title": "Use Apify proxy",
                        "type": "boolean",
                        "description": "Apify residential proxy. Recommended for production; safer against rate limits.",
                        "default": true
                    },
                    "apifyProxyGroups": {
                        "title": "Apify proxy groups",
                        "type": "array",
                        "description": "RESIDENTIAL recommended. Override only if your account has dedicated groups.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
