# Wallapop Scraper – Live Resale Market Data (`b2b_leads/wallapop-real-time-data-scraper`) Actor

Live Wallapop resale market intelligence: keyword search, full product details, closet inventory, seller profiles, and sold comps across Spain, Italy, Portugal, and the UK. Structured JSON streamed in real time with webhook alerts — perfect for thrift resellers, arbitrage, and pricing bots.

- **URL**: https://apify.com/b2b\_leads/wallapop-real-time-data-scraper.md
- **Developed by:** [Emmanuel](https://apify.com/b2b_leads) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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

## Wallapop Real-Time Data

> **Live Wallapop resale market intelligence** — thrift price comps, closet inventory tracking, and a vintage deal finder. Stream structured JSON to your dataset in real time: keyword search, full product details, seller closet monitoring, reseller profiles, sold comps, and direct URL collection.

**ⓘ Free plan notice:** on Apify free plans this Actor returns a 2-result trial per run. Paid plans get full, uncapped output. See [Free tier](#-free-tier--paid-plans) below.

Wallapop is one of Europe's largest second-hand marketplaces — tens of millions of fashion, sneaker, and vintage listings across **Spain, Italy, Portugal, and the UK**. This Actor turns that live catalog into clean, structured rows for resellers, pricing bots, and AI agents.

***

### 👥 Who is this for

- **Vintage & thrift resellers** cross-listing on Poshmark, eBay, Depop, Mercari, Grailed, and Vinted — source undervalued inventory (vintage single-stitch, designer denim, gorpcore, Y2K) before anyone else.
- **Resale arbitrageurs** comparing European street prices against US platforms.
- **Consignment & thrift store owners** monitoring competitor closet inventory and repricing moves.
- **Pricing teams & researchers** building sold-comps and sell-through models.
- **AI agents & automation** (Apify MCP, n8n, Make, custom pricing bots) that need clean, structured marketplace data.

### 🎯 Use cases

- **Undervalued inventory sourcing** — "Newest first" search alerts for `carhartt`, `vintage levis 501`, `north face vintage` at below-market prices.
- **Sold comps / sell-through** — per-seller catalog state plus completed-sales counters to estimate margins.
- **Closet monitoring** — watch any reseller's full inventory; get webhook alerts when prices drop or items sell.
- **Slack / Discord deal alerts** — every new row can fire a webhook in Slack or JSON format.
- **Multi-platform pricing sync** — field names align with the broader resale-data suite, so the same bot can union datasets across marketplaces.

***

### ✨ Features (checkbox UX — enable only what you need)

| Feature | Checkbox | What you get |
|---|---|---|
| **Listing Search** 🔍 | `enableListingSearch` (default **on**) | Live keyword search with condition & price filters, sort by newest/price/distance, up to 200 results per keyword. Streamed row-by-row in seconds. |
| **Listing Details** 📦 | `enableListingDetails` | Full record for specific listing URLs or IDs: complete description, brand, size, color, condition, views, favorites, seller stats, sold/reserved flags. |
| **Closet Listings** 👚 | `enableClosetListings` | The full active inventory of any seller closet — competitor stock and repricing surveillance. |
| **Seller Profile** 👤 | `enableSellerProfile` | Reseller stats: completed sales, items listed, rating average, review count, verification, seller type (Private/Pro), member since, location. |
| **Sold Item Comps / History** 🧾 | `enableSoldHistory` | The seller's catalog with per-item sell/reserve state plus their completed-sales counters — the data behind pricing decisions. |
| **Scrape By URL** 🔗 | `enableScrapeByUrl` | Paste any Wallapop URL (search, seller profile, category, listing) — page type is auto-detected. |

#### Enrichment — in-place, never filtered

**"Enrich with full listing details"** (`searchFetchFullDetails`) upgrades each search row **in place**: the row keeps `featureType: "listing_search"` and gets `detailsFetched: true` plus the full description, brand, size, color, condition, views, favorites, seller stats, and sold/reserved flags.

- **No duplicate rows.** One listing = one row, always.
- **No filtered-out partial items.** Every discovered item goes to the dataset, even if enrichment fails for that one item (it's saved as a fast card).

***

### 🚀 Quick start

1. Click **Start** — Listing Search is prefilled with 3 demo keywords (`carhartt`, `vintage levis 501`, `forro polar patagonia`) and 10 results each, so your first run finishes in seconds.
2. Pick your **Market region** (Spain by default — Wallapop's largest market; also Italy, Portugal, UK).
3. Optional: set a **Webhook URL** for real-time Slack/Discord alerts.

#### Practical search examples

| Goal | Keywords | Sort | Filters |
|---|---|---|---|
| Vintage denim sourcing | `vintage levis 501`, `levis 550 made in usa` | Newest first | — |
| Gorpcore arbitrage | `carhartt`, `north face`, `forro polar patagonia` | Newest first | Max price 60 |
| Sneaker deals (Spain) | `jordan 1`, `new balance 550` | Newest first | Condition: Like New |
| Y2K streetwear (Italy) | `vintage jersey`, `stones throw vintage` | Price: Low to High | — |

> Wallapop is strongest in **Spain** — Spanish keywords return the deepest inventory. Italian and Portuguese storefronts are covered by the Market region picker.

***

### ⚙️ Input reference

#### 🌍 Region

| Field | Type | Default | Notes |
|---|---|---|---|
| `country` | select | `ES` | Market region: `ES` (Spain), `IT` (Italy), `PT` (Portugal), `UK`. Sets market-center location and recommended proxy country (`UK` → `GB`). |

#### 🔍 Listing Search

| Field | Type | Default | Notes |
|---|---|---|---|
| `enableListingSearch` | boolean | `true` | Master switch for keyword search. |
| `searchKeywords` | stringList | 3 demo keywords | One or more terms. Required when search is on. |
| `searchMaxResults` | integer | `10` | Per keyword, 1–200. |
| `searchSort` | select | `newest` | `newest`, `closest`, `price_low_to_high`, `price_high_to_low`. |
| `searchCondition` | select | *(any)* | `new`, `un_worn` (Sin estrenar), `as_good_as_new` (Como nuevo), `good`, `fair`, `for_parts_or_not_working`. |
| `searchMinPrice` / `searchMaxPrice` | integer | — | Market currency (EUR for ES/IT/PT, GBP for UK). |
| `searchLatitude` / `searchLongitude` | number | market center | Override for distance-sorted searches (e.g. Barcelona: 41.3874 / 2.1686). |
| `searchFetchFullDetails` | boolean | `false` | Enrich each search row in place (adds a little extra time per listing). |

#### 📦 Listing Details

| Field | Type | Notes |
|---|---|---|
| `enableListingDetails` | boolean | Master switch. |
| `listingUrls` | stringList | Full item URLs (`https://es.wallapop.com/item/...`). |
| `listingIds` | stringList | Raw listing IDs (e.g. `8j38ny95q7z9`). |

#### 👚 Closet Listings / 👤 Seller Profile / 🧾 Sold Comps

| Field | Type | Default | Notes |
|---|---|---|---|
| `enableClosetListings` / `enableSellerProfile` / `enableSoldHistory` | boolean | `false` | Feature switches. |
| `sellerUsernames` | stringList | — | Seller handles **or** profile slugs (e.g. `ernestop-381137637` from the profile URL). Shared by all three features. |
| `sellerMaxListings` | integer | `30` | Max items per closet (1–500). |
| `soldMaxItems` | integer | `30` | Max comp records per seller (1–500). |

#### 🔗 Scrape By URL

| Field | Type | Notes |
|---|---|---|
| `enableScrapeByUrl` | boolean | Master switch. |
| `scrapeUrls` | stringList | Any Wallapop search, seller-profile, category, or listing URL. Non-Wallapop URLs are rejected with a clear error. |

#### 🔔 Delivery

| Field | Type | Default | Notes |
|---|---|---|---|
| `webhookUrl` | string | — | Every row is POSTed here as well as saved to the dataset. Slack, Discord, Zapier, Make, n8n, or your own bot. |
| `webhookFormat` | select | `json` | `json` = full record object; `slack` = Slack-friendly message. |

#### 🌐 Connection

Residential proxy recommended, matched to the Market region (Spain default; UK → GB). Configurable via the standard Apify proxy editor.

***

### 📤 Output reference

One dataset row per listing or seller. Filter by `featureType`:

`listing_search` · `listing_details` · `closet_listings` · `seller_profile` · `sold_history` · `scrape_by_url`

#### Core fields (portable across the resale-data suite)

| Field | Type | Description |
|---|---|---|
| `featureType` | string | Which feature produced the row. |
| `scrapedAt` | ISO date | When the row was written. |
| `url` / `item_url` | string | Wallapop listing URL. |
| `item_id` | string | Native listing ID (for dedupe & re-checks). |
| `title` / `description` | string | Seller-written copy. |
| `main_image_url`, `additional_image_urls` | string/array | Full-size image gallery. |
| `status` | string | `available`, `reserved`, or `sold`. |
| `current_price` / `original_price` | number | Asking price; seller-declared retail baseline when present. |
| `currency` | string | `EUR` (ES/IT/PT) or `GBP` (UK). |
| `discount_percentage`, `price_drop_amount` | number | Markdown math vs. retail baseline. |
| `brand` / `size` / `condition` / `color` | string | Platform-verified product attributes (e.g. size `M / 38-40 / 48-50`, condition `Like New`). |
| `category` / `department` / `subcategory` | string | Taxonomy chain (e.g. Moda y accesorios → Ropa → Chaquetas). |
| `style_tags` | array | Seller hashtags (vintage, y2k, gorpcore…). |
| `likes_count` / `views_count` | number | Favorites and views (on enriched/detail rows). |
| `is_sold` / `is_reserved` | boolean | Live sell state. |
| `seller_username` / `seller_id` | string | Identity for closet monitoring. |
| `seller_rating` / `seller_love_notes_count` / `seller_items_sold` / `seller_closet_size` | number | Seller stats. |
| `seller_verified` / `seller_member_since` | boolean/date | Trust signals. |
| `is_shippable` | boolean | Platform shipping enabled. |
| `is_promoted` | boolean | Seller boosted/bumped the listing. |
| `position` | number | Rank within the page the item was found on. |
| `detailsFetched` | boolean | `true` when a search row was enriched in place. |

#### Per-feature extras

- **`seller_profile`**: `total_sales` (completed sales), `total_listings`, `rating`, `love_notes_count` (review count), `is_top_seller`, `seller_type` (Private/Pro), `member_since`, `city`.
- **`sold_history`**: every `seller_items_sold` row carries the seller's lifetime completed-sales counter; `sold_at` reflects the last platform update per item, and `is_reserved`/`is_sold` capture live catalog state for sell-through math.
- **`scrape_by_url`**: `pageType` tells you which kind of Wallapop page was processed (`search`, `user`, `listing`, `category`).

#### Dataset views

The Console dataset includes ready-made table views: **Overview**, **Listing Search**, **Listing Details**, **Closet Listings**, **Seller Profiles**, **Sold Comps**, and **Scrape By URL**.

***

### 🔔 Webhook guide

Set `webhookUrl` and every saved record is also POSTed there, fire-and-forget (dataset writes never wait on webhook latency).

**JSON format** — the full record object, exactly as saved to the dataset. Great for Make, n8n, Zapier, or your own pricing bot:

```json
{
  "featureType": "listing_search",
  "title": "Chaqueta Carhartt Vintage",
  "current_price": 30,
  "currency": "EUR",
  "brand": "Carhartt",
  "size": "M / 38-40 / 48-50",
  "condition": "Like New",
  "seller_username": "vintage-closer",
  "item_url": "https://es.wallapop.com/item/…",
  "detailsFetched": true
}
```

**Slack format** — a compact message card:

```
:shopping_bags: *Chaqueta Carhartt Vintage*
*Type:* listing_search  •  *Price:* EUR 30  •  *Brand:* Carhartt  •  *Size:* M  •  *Condition:* Like New  •  *Seller:* vintage-closer  •  12 favorites
<https://es.wallapop.com/item/…|Open on Wallapop>
```

Discord works out of the box: paste a Discord webhook URL and use the **Slack** format — Discord translates the payload.

***

### 🤖 MCP / AI agent usage

This Actor is MCP-compatible via the Apify MCP server. Point your agent at it and ask things like:

- *"What is the average asking price for a vintage Levi's 501 on Wallapop?"*
- *"Find Carhartt jackets under €40 listed in the last 24 hours in Spain."*
- *"Monitor this seller's closet and alert me on Slack when anything new appears."*
- *"How many items has this seller sold and what's their rating?"*

The output contract (stable `featureType` + shared core fields) is designed for downstream union across the resale-data suite, so the same agent prompt works across marketplaces.

***

### 💰 Free tier & paid plans

- **Free Apify plans** get a **2-result trial per run** — enough to validate output shape and webhook delivery. When the cap hits, the run stops gracefully with an upgrade notice (never an error).
- **Paid plans** get full, uncapped output for every enabled feature.
- The `OUTPUT` object of every run includes a transparent `paywall` summary (`detected`, `isPaying`, `limited`, `blocked`, `freeTierMaxItems`).
- Store owners can configure the cap via Console environment variables (`FREE_TIER_MODE` = `limit`|`block`, `FREE_TIER_MAX_ITEMS`).

This is disclosed in the Actor's input schema (Delivery section) and in this README's first screen.

***

### ❓ FAQ

**How fresh is the data?** Every run queries the live marketplace — listings reflect what's on the platform right now, including price drops, reserve flags, and sold state. For deal alerts, schedule runs every 5–15 minutes with "Newest first" sort.

**Do I need proxies?** Residential proxies are recommended and pre-configured for the platform. Match the proxy country to your Market region for the most reliable runs at scale.

**Why does my run stop at 2 results?** You're on an Apify free plan — the 2-result trial is the free-tier cap. Upgrade to a paid plan for full output.

**Is there a limit on results?** Paid runs are limited only by your inputs: up to 200 results per keyword and 500 items per seller, across any number of keywords/sellers. The 10,000-second platform timeout allows very large runs, and rows stream to the dataset as they're collected (memory stays light).

**Does Wallapop show sold items publicly?** Wallapop does not expose a public sold-item feed like some US marketplaces. The Sold Comps feature ships the closest equivalent — per-seller catalog state plus lifetime completed-sales counters — which is what European resellers actually use for comps and sell-through.

**Can I track sellers instead of keywords?** Yes — `sellerUsernames` powers Closet Listings, Seller Profile, and Sold Comps. Use the profile slug from the seller's page URL (e.g. `ernestop-381137637`).

**Which market should I pick?** Spain has the deepest inventory. Italy and Portugal are strong for luxury resale; the UK storefront is newer. Keywords in the local language return the best coverage.

***

### 🧾 Notes

- Run `OUTPUT` includes `totalPushed`, `spendingLimitReached`, and the `paywall` summary.
- Local development: copy `.env.example` → `.env`, `local.input.example.json` → `local.input.json`, then `npm run start:local`.
- Respect Wallapop's Terms of Service and applicable data-protection law when using marketplace data.

# Actor input Schema

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

Wallapop market. Affects the storefront language, market-center location, and the recommended proxy country.

## `enableListingSearch` (type: `boolean`):

Live keyword search across Wallapop — thrift brands, streetwear, and vintage finds. On by default and prefilled so you can click Start and get results in seconds.

## `searchKeywords` (type: `array`):

One or more search terms, e.g. "carhartt", "vintage levis 501", "forro polar patagonia", "north face vintage". Spanish and Italian queries work best on the local storefronts. Required when Listing Search is on.

## `searchMaxResults` (type: `integer`):

Maximum listings to return for each keyword (1–200). Default 10 — perfect for instant demo runs.

## `searchSort` (type: `string`):

How to order search results. "Newest first" is ideal for deal alerts on fresh inventory.

## `searchCondition` (type: `string`):

Limit results to an item condition.

## `searchMinPrice` (type: `integer`):

Minimum listing price in the market currency (EUR for ES/IT/PT, GBP for UK).

## `searchMaxPrice` (type: `integer`):

Maximum listing price — pair with "Newest first" sort to catch underpriced steals fast.

## `searchLatitude` (type: `number`):

Override the market-center latitude for distance-sorted searches, e.g. 41.3874 for Barcelona.

## `searchLongitude` (type: `number`):

Override the market-center longitude for distance-sorted searches, e.g. 2.1686 for Barcelona.

## `searchFetchFullDetails` (type: `boolean`):

When on, each search result stays ONE row (featureType listing\_search, detailsFetched=true) but is enriched with the full description, brand, size, color, condition, view and favorite counts, seller stats, and sold/reserved flags. Adds a little extra time per listing. When off, you get fast search cards with price, title, brand, size, and location. Every discovered item is always saved — never filtered out.

## `enableListingDetails` (type: `boolean`):

Fetch the full record for specific Wallapop listings by URL or listing ID.

## `listingIds` (type: `array`):

Wallapop listing IDs, e.g. 8j38ny95q7z9.

## `listingUrls` (type: `array`):

Full Wallapop listing URLs (https://es.wallapop.com/item/...).

## `enableClosetListings` (type: `boolean`):

Collect the full active inventory of any reseller or thrift closet — track competitor stock and repricing moves.

## `sellerUsernames` (type: `array`):

Wallapop seller handles or profile slugs (e.g. ernestop-381137637 from the profile URL). Shared by Closet Listings, Seller Profile, and Sold Comps.

## `sellerMaxListings` (type: `integer`):

Maximum active listings to collect per closet (1–500).

## `enableSellerProfile` (type: `boolean`):

Extract reseller stats: completed sales, items listed, rating average, review count, verification, seller type, bio details, and location.

## `enableSoldHistory` (type: `boolean`):

Collect the seller's catalog with per-item sell/reserve state plus completed-sales counters — the closest Wallapop equivalent of sold comps, for margins and sell-through analysis.

## `soldMaxItems` (type: `integer`):

Maximum catalog records to collect per seller (1–500).

## `enableScrapeByUrl` (type: `boolean`):

Paste any Wallapop URL — search results, seller profile, category page, or single listing.

## `scrapeUrls` (type: `array`):

Any Wallapop search, seller-profile, category, or listing URL.

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

Optional. Every record is always saved to the run dataset — this webhook is an ADDITIONAL real-time push. Each new row is also POSTed to this URL (Slack, Discord, Zapier, Make, n8n, custom pricing bot).

## `webhookFormat` (type: `string`):

json = full record object; slack = Slack-friendly message payload.

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

Residential proxy recommended. Match the country to the Market region above (ES by default; UK → GB).

## Actor input object example

```json
{
  "country": "ES",
  "enableListingSearch": true,
  "searchKeywords": [
    "carhartt",
    "vintage levis 501",
    "forro polar patagonia"
  ],
  "searchMaxResults": 10,
  "searchSort": "newest",
  "searchCondition": "",
  "searchFetchFullDetails": false,
  "enableListingDetails": false,
  "listingIds": [],
  "listingUrls": [],
  "enableClosetListings": false,
  "sellerUsernames": [],
  "sellerMaxListings": 30,
  "enableSellerProfile": false,
  "enableSoldHistory": false,
  "soldMaxItems": 30,
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://es.wallapop.com/search?keywords=carhartt"
  ],
  "webhookUrl": "",
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "ES"
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Full dataset for this run (every featureType).

## `overview` (type: `string`):

Core fields across features, including detailsFetched for search rows.

## `search` (type: `string`):

featureType=listing\_search only. One listing = one row; full details are merged when "Enrich with full listing details" is enabled.

## `details` (type: `string`):

featureType=listing\_details — only from the Listing Details feature (specific IDs/URLs), not from search enrichment.

## `closet_listings` (type: `string`):

No description

## `seller_profile` (type: `string`):

No description

## `sold_history` (type: `string`):

No description

## `scrape_by_url` (type: `string`):

No description

# 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 = {
    "country": "ES",
    "enableListingSearch": true,
    "searchKeywords": [
        "carhartt",
        "vintage levis 501",
        "forro polar patagonia"
    ],
    "searchMaxResults": 10,
    "searchSort": "newest",
    "searchCondition": "",
    "searchFetchFullDetails": false,
    "enableListingDetails": false,
    "listingIds": [],
    "listingUrls": [],
    "enableClosetListings": false,
    "sellerUsernames": [],
    "sellerMaxListings": 30,
    "enableSellerProfile": false,
    "enableSoldHistory": false,
    "soldMaxItems": 30,
    "enableScrapeByUrl": false,
    "scrapeUrls": [
        "https://es.wallapop.com/search?keywords=carhartt"
    ],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "ES"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_leads/wallapop-real-time-data-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 = {
    "country": "ES",
    "enableListingSearch": True,
    "searchKeywords": [
        "carhartt",
        "vintage levis 501",
        "forro polar patagonia",
    ],
    "searchMaxResults": 10,
    "searchSort": "newest",
    "searchCondition": "",
    "searchFetchFullDetails": False,
    "enableListingDetails": False,
    "listingIds": [],
    "listingUrls": [],
    "enableClosetListings": False,
    "sellerUsernames": [],
    "sellerMaxListings": 30,
    "enableSellerProfile": False,
    "enableSoldHistory": False,
    "soldMaxItems": 30,
    "enableScrapeByUrl": False,
    "scrapeUrls": ["https://es.wallapop.com/search?keywords=carhartt"],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "ES",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_leads/wallapop-real-time-data-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 '{
  "country": "ES",
  "enableListingSearch": true,
  "searchKeywords": [
    "carhartt",
    "vintage levis 501",
    "forro polar patagonia"
  ],
  "searchMaxResults": 10,
  "searchSort": "newest",
  "searchCondition": "",
  "searchFetchFullDetails": false,
  "enableListingDetails": false,
  "listingIds": [],
  "listingUrls": [],
  "enableClosetListings": false,
  "sellerUsernames": [],
  "sellerMaxListings": 30,
  "enableSellerProfile": false,
  "enableSoldHistory": false,
  "soldMaxItems": 30,
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://es.wallapop.com/search?keywords=carhartt"
  ],
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "ES"
  }
}' |
apify call b2b_leads/wallapop-real-time-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_leads/wallapop-real-time-data-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/kTZs9i0ryWs6SWoAK/builds/wduV79RUypkbWmQtb/openapi.json
