Wallapop API & Scraper
The Wallapop API returns the second-hand marketplace of Spain, Italy and Portugal as clean JSON from one engine, switched with a country parameter or simply by the point you search around.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search returns 40 listings a page with the listing id, title, description, price in EUR, previous price and discount, category path, city and postal code, the distance from your search point, when it was listed and last changed, whether it is reserved, whether the seller ships, and car or property facts - filtered by radius, price, condition, shipping, category, refurbished and warranty, sorted by relevance, newest, closest or price. listing returns the full record: status (active, reserved, sold or expired), condition, brand and model, every photo, views, favourites and chats, each delivery option with its price and delivery days, and the seller's type (private, PRO or shop), rating on a 5-point scale and review count. cars/search adds brand, model, year, mileage, fuel, gearbox, body type and private-or-dealer filters; seller_listings returns a seller's rating breakdown and current listings; categories and suggest cover the tree and autocomplete in each country's language. In the final live run 69 calls across the six actions and three countries returned 69 successes, and on 16 listings in six categories the title, price, rating and review count matched the listing page and the seller's own stats 16 of 16. No account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
A Wallapop search in Italy or Portugal is mostly Spanish listings - and they arrive translated
Wallapop runs one marketplace across three countries, and its search does not stop at the border. From an Italian or Portuguese search point, the newest listings are mostly Spanish ones, and their titles and descriptions come back machine-translated into Italian or Portuguese. Every row here is flagged, the count is returned, and country_only removes them.
| Search (measured 2026-09-16) | Rows from another country | What the row says | What the seller wrote |
|---|---|---|---|
| iphone, newest, from Rome | 40 of 40 Spanish | iPhone 17 Pro Max Argento | iPhone 17 Pro Max Plata |
| iphone, newest, from Lisbon | 39 of 40 Spanish | (Portuguese text) | (Spanish text) |
| bicicleta, newest, from Lisbon | Spanish rows | Sela de Bicicleta Selle SMP Triathlon Branco | Sillín Selle SMP Triathlon Blanco |
| livros, relevance, around Porto | 4 of 40 Spanish | flagged cross_border | listing returns the original |
Across the final 24-search run, 93 of 861 returned rows sat in another Wallapop country. Each such row carries cross_border true and text_is_translated true; other_country_count says how many were on the page; country_only true drops them and counts them in other_country_dropped. listing always returns the title and description the seller wrote.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/wallapop/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "bici",
"country": "es"
}
}{
"ok": true,
"meta": {
"api": "wallapop",
"endpoint": "search",
"mode": "live",
"latency_ms": 591.4,
"record_count": 36,
"bytes": 118566,
"cache_hit": false,
"pagination": {
"has_more": true,
"page_size": 36,
"next_cursor": "eyJhbGciOiJIUzI1NiJ9.eyJwYXJhbXMiOnsic2VhcmNoUmVxdWVzdFBhcmFtcyI6eyJrZXl3b3JkcyI6ImJpY2kiLCJsYXRpdHVkZSI6NDAuNDE2OCwibG9uZ2l0dWRlIjotMy43MDM4LCJvcmRlcl9ieSI6Im1vc3RfcmVsZXZhbmNlIiwic291cmNlIjoic2VhcmNoX2JveCIsInNlYXJjaF9pZCI6IjVjNjMzNGE4LWM5ZWYtNDhhOS1hMGM1LTljNzNjZjAwNTFlOSJ9LCJuZXh0UGFnZVBhcmFtcyI6eyJvZmZzZXQiOjQwLCJibGVuZGluZ19wYWdlX2luaXRpYWxfb2Zmc2V0IjowLCJzdGVwIjowLCJpdGVtc19jb3VudCI6NDAsInNlY3Rpb25faXRlbXNfY291bnQiOjQwLCJpbnRlcm5hbF9zZWFyY2hfaWQiOiJiY2ExYjk0Mi03OGRkLTQxNGItOGJkOC0wYTU4ZDk4NjE3MjkiLCJjb3VudHJ5X2NvZGUiOiJFUyIsImNpdHkiOiJNYWRyaWQiLCJyZWdpb24iOiJDb211bmlkYWQgZGUgTWFkcmlkIiw"
},
"country": "es"
},
"data": {
"results": [
{
"listing_id": "v6gpy33xvl6e",
"title": "Bicicleta de Montaña Decathlon",
"description": "Bicicleta de montaña Decathlon con cuadro blanco y verde.\n\n- Ruedas de 26 pulgadas.\n- Frenos de disco.\n- Cambio Shimano.",
"url": "https://es.wallapop.com/item/bicicleta-de-montana-decathlon-1302410588",
"slug": "bicicleta-de-montana-decathlon-1302410588",
"price": 50,
"currency": "EUR",
"price_is_zero": false,
"was_price": null,
"discount_percent": null,
"category_id": 17000,
"category_path": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"location": {
"city": "Madrid",
"postal_code": "28037",
"region": "Comunidad de Madrid",
"country_code": "ES",
"lat": 40.44,
"lon": -3.61
},
"distance_km": 8.3,
"cross_border": false,
"text_is_translated": false,
"created_at": "2026-09-16T13:28:27Z",
"modified_at": "2026-09-16T13:28:43Z",
"reserved": false,
"shipping_available": false,
"shipping_eligible_category": true,
"is_refurbished": false,
"has_warranty": false,
"seller_id": "wzyllxxv8265",
"seller_is_top_profile": false,
"sponsored": false,
"is_bumped": false,
"bump_type": null,
"vehicle": null,
"real_estate": null,
"attributes": null,
"image": "https://cdn.wallapop.com/images/10420/lj/f6/__/c10420p1302410588/i6731538191.jpg?pictureSize=W800",
"images": [
"https://cdn.wallapop.com/images/10420/lj/f6/__/c10420p1302410588/i6731538191.jpg?pictureSize=W800",
"https://cdn.wallapop.com/images/10420/lj/f6/__/c10420p1302410588/i6731538271.jpg?pictureSize=W800"
],
"image_count": 2
},
{
"listing_id": "3zlmypxw2njx",
"title": "Bicicleta",
"description": "Bicicleta de montaña en color turquesa y crema. Ideal para paseos y aventuras.\n\n- Cuadro de bicicleta.\n- Rueda delantera.\n- Manillar.",
"url": "https://es.wallapop.com/item/bicicleta-1302396321",
"slug": "bicicleta-1302396321",
"price": 45,
"currency": "EUR",
"price_is_zero": false,
"was_price": null,
"discount_percent": null,
"category_id": 17000,
"category_path": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"location": {
"city": "Madrid",
"postal_code": "28053",
"region": "Comunidad de Madrid",
"country_code": "ES",
"lat": 40.37,
"lon": -3.67
},
"distance_km": 5.9,
"cross_border": false,
"text_is_translated": false,
"created_at": "2026-09-16T12:55:32Z",
"modified_at": "2026-09-16T12:55:47Z",
"reserved": false,
"shipping_available": false,
"shipping_eligible_category": true,
"is_refurbished": false,
"has_warranty": false,
"seller_id": "ejk4kp0751zx",
"seller_is_top_profile": false,
"sponsored": false,
"is_bumped": false,
"bump_type": null,
"vehicle": null,
"real_estate": null,
"attributes": null,
"image": "https://cdn.wallapop.com/images/10420/lj/ev/__/c10420p1302396321/i6731471182.jpg?pictureSize=W800",
"images": [
"https://cdn.wallapop.com/images/10420/lj/ev/__/c10420p1302396321/i6731471182.jpg?pictureSize=W800",
"https://cdn.wallapop.com/images/10420/lj/ev/__/c10420p1302396321/i6731471225.jpg?pictureSize=W800",
"https://cdn.wallapop.com/images/10420/lj/ev/__/c10420p1302396321/i6731471202.jpg?pictureSize=W800"
],
"image_count": 4
},
{
"listing_id": "4z48520d3rjy",
"title": "Bicicleta 24 pulgadas",
"description": "Bicicleta de 24 pulgadas",
"url": "https://es.wallapop.com/item/bicicleta-24-pulgadas-1302331114",
"slug": "bicicleta-24-pulgadas-1302331114",
"price": 35,
"currency": "EUR",
"price_is_zero": false,
"was_price": null,
"discount_percent": null,
"category_id": 17000,
"category_path": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"location": {
"city": "Madrid",
"postal_code": "28025",
"region": "Comunidad de Madrid",
"country_code": "ES",
"lat": 40.38,
"lon": -3.75
},
"distance_km": 5.7,
"cross_border": false,
"text_is_translated": false,
"created_at": "2026-09-16T10:13:34Z",
"modified_at": "2026-09-16T10:13:49Z",
"reserved": false,
"shipping_available": false,
"shipping_eligible_category": true,
"is_refurbished": false,
"has_warranty": false,
"seller_id": "qnzxyrvrwpj2",
"seller_is_top_profile": false,
"sponsored": false,
"is_bumped": false,
"bump_type": null,
"vehicle": null,
"real_estate": null,
"attributes": null,
"image": "https://cdn.wallapop.com/images/10420/lj/dh/__/c10420p1302331114/i6731158239.jpg?pictureSize=W800",
"images": [
"https://cdn.wallapop.com/images/10420/lj/dh/__/c10420p1302331114/i6731158239.jpg?pictureSize=W800",
"https://cdn.wallapop.com/images/10420/lj/dh/__/c10420p1302331114/i6731158261.jpg?pictureSize=W800",
"https://cdn.wallapop.com/images/10420/lj/dh/__/c10420p1302331114/i6731158278.jpg?pictureSize=W800"
],
"image_count": 5
}
],
"count": 36,
"sponsored_dropped": 4,
"sponsored_count": 4,
"total_results": null,
"has_more": true,
"next_cursor": "eyJhbGciOiJIUzI1NiJ9.eyJwYXJhbXMiOnsic2VhcmNoUmVxdWVzdFBhcmFtcyI6eyJrZXl3b3JkcyI6ImJpY2kiLCJsYXRpdHVkZSI6NDAuNDE2OCwibG9uZ2l0dWRlIjotMy43MDM4LCJvcmRlcl9ieSI6Im1vc3RfcmVsZXZhbmNlIiwic291cmNlIjoic2VhcmNoX2JveCIsInNlYXJjaF9pZCI6IjVjNjMzNGE4LWM5ZWYtNDhhOS1hMGM1LTljNzNjZjAwNTFlOSJ9LCJuZXh0UGFnZVBhcmFtcyI6eyJvZmZzZXQiOjQwLCJibGVuZGluZ19wYWdlX2luaXRpYWxfb2Zmc2V0IjowLCJzdGVwIjowLCJpdGVtc19jb3VudCI6NDAsInNlY3Rpb25faXRlbXNfY291bnQiOjQwLCJpbnRlcm5hbF9zZWFyY2hfaWQiOiJiY2ExYjk0Mi03OGRkLTQxNGItOGJkOC0wYTU4ZDk4NjE3MjkiLCJjb3VudHJ5X2NvZGUiOiJFUyIsImNpdHkiOiJNYWRyaWQiLCJyZWdpb24iOiJDb211bmlkYWQgZGUgTWFkcmlkIiw",
"sort_applied": "relevance",
"filters_applied_count": 0,
"location_country": "ES",
"country": "es",
"currency": "EUR",
"fallback_results_dropped": 0,
"other_country_count": 0,
"other_country_dropped": 0,
"query": "bici"
}
}What the Wallapop API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Wallapop listings in Spain, Italy or Portugal by keyword or category around a point: listing id, title, description, price in EUR (null when the site shows 0), previous price and discount, category path, city and postal code, distance from the search point, created and modified time, reserved flag, whether the seller ships, refurbished/warranty flags, car and real-estate facts, photos. Filter by radius, price, condition, shipping, category, refurbished and warranty; sort by relevance, newest, closest or price. Paid bumped rows are dropped and counted unless include_sponsored. | Price-intelligence teams call search to search Wallapop listings in Spain, Italy or Portugal by keyword or category around a point. | query, country, latitude, longitude, distance_km, ... |
| cars/search | Search used cars on Wallapop (Spain, Italy, Portugal) around a point: the listing rows of search plus vehicle{brand, model, year, version, km, engine, horsepower}. Filter by brand, model, year, mileage, fuel, gearbox, body type, private or professional seller, price and radius. | Classifieds aggregators call cars/search to search used cars on Wallapop (Spain, Italy, Portugal) around a point. | query, country, latitude, longitude, distance_km, ... |
| listing | The full Wallapop listing by id, slug or URL: title and description as written, status (active, reserved, sold, expired), price, previous price and discount, condition, brand and model, category path, attributes, car or property facts, every photo, city and postal code, last modified, views, favourites and chats, bump flag, shipping availability with each delivery option's price and delivery days, and the seller: type (private, pro, shop), rating on a 5-point scale, review count, sold count, member since, verified; name and business address for PRO and shop sellers. | Resale and arbitrage tools call listing to get the full Wallapop listing by id, slug or URL. | listing_id, country, max_rotations |
| seller_listings | One Wallapop seller's profile and current listings: rating on a 5-point scale with the star breakdown, review, sold, sales and purchase counts, member since, city — and 40 listings per page with id, title, price, previous price, reserved flag, shipping, condition and photos. | Lead-generation teams call seller_listings to get one Wallapop seller's profile and current listings. | seller_id, country, cursor, max_rotations |
| categories | Wallapop's category tree for one country in its language: up to four levels, every node with the id to pass as `category` (top level) or `subcategory` to search. | Price-intelligence teams call categories to get wallapop's category tree for one country in its language. | country, max_rotations |
| suggest | Wallapop search autocomplete in the country's language: completed keywords for a partial term. | Classifieds aggregators call suggest to get wallapop search autocomplete in the country's language. | query, country, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/wallapop/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"bici","country":"es"}'import requests
r = requests.post(
"https://api.reefapi.com/wallapop/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "bici",
"country": "es"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/wallapop/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "bici",
"country": "es"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.wallapop.search with {"query":"bici","country":"es"}.Who uses this API and why
- Resale and flipping tools watch newest listings around a city with search sorted by newest, a radius and a price band, and open the promising ones with listing for condition, status and shipping cost.
- Price-intelligence teams build second-hand price series per category in Spain, Italy and Portugal, skipping zero-price and placeholder rows with price_is_zero and price filters.
- Used-car dealers and valuation tools pull cars/search by brand, model, year and mileage, split private sellers from professionals, and read each car's gearbox, fuel and power from listing.
- Marketplace analysts track a shop or PRO seller's stock, prices, discounts and reserved items through seller_listings, with the seller's rating breakdown and sold count.
Questions developers ask before integrating
Which countries does the Wallapop API cover?
Spain, Italy and Portugal: country=es, it or pt. The country sets the default search point (Madrid, Rome or Lisbon) and the language of labels, category names and suggestions; prices are in EUR everywhere. Pass latitude and longitude to search anywhere else in those countries - without a country, the point picks it. A point outside the three (Paris, say) is rejected rather than answered with an empty page.
Why are there Spanish listings in my Italian search?
Because Wallapop's own search is cross-border. From a point in Rome, the newest iPhone listings were 40 of 40 Spanish on 2026-09-16, and from Lisbon 39 of 40. Their title and description arrive translated into the search language. Every such row has cross_border true and text_is_translated true, the page reports other_country_count, and country_only true removes them. listing on the same id returns the seller's original text.
What are sponsored rows, and why is count lower than 40?
Wallapop mixes paid 'featured' listings into results at fixed positions: 4 of 40 rows on a keyword search, every second row on car searches, every fourth on category pages. They do not repeat in the normal results. They are left out by default and counted in sponsored_dropped; include_sponsored true returns them with sponsored true. On the cars category page without a keyword every listing is featured, so there they are returned as the results, with is_bumped true.
Why is price null on some listings?
Because the site shows 0. On a lowest-price-first sofa search all 35 listings were priced 0 - mostly keyword spam and job lots. They come back with price null and price_is_zero true, so an average never includes them. The opposite end has the same problem: the highest-price-first sofa search opened with a listing at 631,824,510 EUR. Those placeholder prices are returned as the site shows them.
Does the API show reserved and sold listings?
Yes. Search rows carry reserved. listing returns status - active, reserved, sold or expired - so an old price is never read as a live offer: a sold camping set with 1,234 views and 18 chats still showed its 100 EUR price and comes back as sold.
Is shipping included in the price?
No, and the API keeps them apart. shipping_available is the seller's own choice; a separate field says whether the category could be shipped at all, which was true on 40 of 40 bicycle rows while only 7 sellers actually shipped. listing returns each delivery option with its price and the delivery days - for one phone 2.59 EUR to a pick-up point and 3.75 EUR to the door, 3 to 7 days - plus cheapest_shipping_price.
Can I tell private sellers from professionals?
Yes. listing returns seller.type private, pro or shop, with the rating on a 5-point scale, the review count, the sold count and the member-since date; PRO and shop sellers also come back with their name, business address and opening hours. For private sellers the name, avatar and exact location are left out; city and postal code stay. cars/search can filter to private sellers or professionals.
What does Wallapop NOT publish?
A total number of results (total_results is null and the next_cursor is how you page), a creation date on the listing page (search rows carry created_at; listing carries modified_at), and a shipping price on search rows. Brand and condition are optional for sellers: condition was set on 13 of 16 verified listings (car ads carry none) and brand on 10 of 16. A seller with no reviews has rating null, not 0.
What is the Wallapop API?
Wallapop API is a ReefAPI endpoint group for second-hand listings from wallapop spain, italy and portugal, with status and shipping prices. It returns live JSON through POST requests under /wallapop/v1.
Is the Wallapop API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Wallapop calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Wallapop login or account?
No login to Wallapop is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Wallapop data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Wallapop API use?
Wallapop actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Wallapop from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call wallapop actions with the same key, credit pool and JSON envelope used by normal REST requests.