Wallapop Scraper – Live Resale Market Data avatar

Wallapop Scraper – Live Resale Market Data

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Wallapop Scraper – Live Resale Market Data

Wallapop Scraper – Live Resale Market Data

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.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Emmanuel

Emmanuel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

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 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)

FeatureCheckboxWhat 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 📦enableListingDetailsFull record for specific listing URLs or IDs: complete description, brand, size, color, condition, views, favorites, seller stats, sold/reserved flags.
Closet Listings 👚enableClosetListingsThe full active inventory of any seller closet — competitor stock and repricing surveillance.
Seller Profile 👤enableSellerProfileReseller stats: completed sales, items listed, rating average, review count, verification, seller type (Private/Pro), member since, location.
Sold Item Comps / History 🧾enableSoldHistoryThe seller's catalog with per-item sell/reserve state plus their completed-sales counters — the data behind pricing decisions.
Scrape By URL 🔗enableScrapeByUrlPaste 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

GoalKeywordsSortFilters
Vintage denim sourcingvintage levis 501, levis 550 made in usaNewest first—
Gorpcore arbitragecarhartt, north face, forro polar patagoniaNewest firstMax price 60
Sneaker deals (Spain)jordan 1, new balance 550Newest firstCondition: Like New
Y2K streetwear (Italy)vintage jersey, stones throw vintagePrice: 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

FieldTypeDefaultNotes
countryselectESMarket region: ES (Spain), IT (Italy), PT (Portugal), UK. Sets market-center location and recommended proxy country (UK → GB).
FieldTypeDefaultNotes
enableListingSearchbooleantrueMaster switch for keyword search.
searchKeywordsstringList3 demo keywordsOne or more terms. Required when search is on.
searchMaxResultsinteger10Per keyword, 1–200.
searchSortselectnewestnewest, closest, price_low_to_high, price_high_to_low.
searchConditionselect(any)new, un_worn (Sin estrenar), as_good_as_new (Como nuevo), good, fair, for_parts_or_not_working.
searchMinPrice / searchMaxPriceinteger—Market currency (EUR for ES/IT/PT, GBP for UK).
searchLatitude / searchLongitudenumbermarket centerOverride for distance-sorted searches (e.g. Barcelona: 41.3874 / 2.1686).
searchFetchFullDetailsbooleanfalseEnrich each search row in place (adds a little extra time per listing).

📦 Listing Details

FieldTypeNotes
enableListingDetailsbooleanMaster switch.
listingUrlsstringListFull item URLs (https://es.wallapop.com/item/...).
listingIdsstringListRaw listing IDs (e.g. 8j38ny95q7z9).

👚 Closet Listings / 👤 Seller Profile / 🧾 Sold Comps

FieldTypeDefaultNotes
enableClosetListings / enableSellerProfile / enableSoldHistorybooleanfalseFeature switches.
sellerUsernamesstringList—Seller handles or profile slugs (e.g. ernestop-381137637 from the profile URL). Shared by all three features.
sellerMaxListingsinteger30Max items per closet (1–500).
soldMaxItemsinteger30Max comp records per seller (1–500).

🔗 Scrape By URL

FieldTypeNotes
enableScrapeByUrlbooleanMaster switch.
scrapeUrlsstringListAny Wallapop search, seller-profile, category, or listing URL. Non-Wallapop URLs are rejected with a clear error.

🔔 Delivery

FieldTypeDefaultNotes
webhookUrlstring—Every row is POSTed here as well as saved to the dataset. Slack, Discord, Zapier, Make, n8n, or your own bot.
webhookFormatselectjsonjson = 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)

FieldTypeDescription
featureTypestringWhich feature produced the row.
scrapedAtISO dateWhen the row was written.
url / item_urlstringWallapop listing URL.
item_idstringNative listing ID (for dedupe & re-checks).
title / descriptionstringSeller-written copy.
main_image_url, additional_image_urlsstring/arrayFull-size image gallery.
statusstringavailable, reserved, or sold.
current_price / original_pricenumberAsking price; seller-declared retail baseline when present.
currencystringEUR (ES/IT/PT) or GBP (UK).
discount_percentage, price_drop_amountnumberMarkdown math vs. retail baseline.
brand / size / condition / colorstringPlatform-verified product attributes (e.g. size M / 38-40 / 48-50, condition Like New).
category / department / subcategorystringTaxonomy chain (e.g. Moda y accesorios → Ropa → Chaquetas).
style_tagsarraySeller hashtags (vintage, y2k, gorpcore…).
likes_count / views_countnumberFavorites and views (on enriched/detail rows).
is_sold / is_reservedbooleanLive sell state.
seller_username / seller_idstringIdentity for closet monitoring.
seller_rating / seller_love_notes_count / seller_items_sold / seller_closet_sizenumberSeller stats.
seller_verified / seller_member_sinceboolean/dateTrust signals.
is_shippablebooleanPlatform shipping enabled.
is_promotedbooleanSeller boosted/bumped the listing.
positionnumberRank within the page the item was found on.
detailsFetchedbooleantrue 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:

{
"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.