Wallapop API

Wallapop listings from Spain, Italy and Portugal, with the traps flagged

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Wallapop endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
W
/wallapop/v1

6 active endpoints. Every call is 1 credit.

  • POST/wallapop/v1/search
  • POST/wallapop/v1/cars/search
  • POST/wallapop/v1/listing
  • POST/wallapop/v1/seller_listings
  • POST/wallapop/v1/categories
  • POST/wallapop/v1/suggest

What Wallapop endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

search

1 cr

Search Wallapop listings in Spain, Italy or Portugal by keyword or category around a point.

required
optional
query, country, latitude, longitude, distance_km, category, subcategory, price_min, price_max, condition, shipping_only, refurbished_only, warranty_only, sort, cursor, include_sponsored, country_only, include_fallback_results, max_rotations

cars/search

1 cr

Search used cars on Wallapop (Spain, Italy, Portugal) around a point.

required
optional
query, country, latitude, longitude, distance_km, brand, model, year_min, year_max, km_min, km_max, engine, gearbox, body_type, seller_type, price_min, price_max, warranty_only, sort, cursor, include_sponsored, country_only, include_fallback_results, max_rotations

listing

1 cr

The full Wallapop listing by id, slug or URL.

required
listing_id
optional
country, max_rotations

seller_listings

1 cr

One Wallapop seller's profile and current listings.

required
seller_id
optional
country, cursor, max_rotations

categories

1 cr

Wallapop's category tree for one country in its language.

required
optional
country, max_rotations

suggest

1 cr

Wallapop search autocomplete in the country's language.

required
query
optional
country, max_rotations

Every parameter, every allowed value →

Wallapop API

3 of 6 endpoints, ready to run

View docs ↗

40 listings around a point: id, title, description, price in EUR, previous price, city and postal code, distance from your point, listed and changed dates, reserved flag, whether the seller ships, plus a cursor for the next page.

1 credit0 required · 7 optional
POST/wallapop/v1/search
ok1187 ms · 36 records · sample
{
  "ok": true,
  "meta": {
    "api": "wallapop",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1187.3,
    "record_count": 36,
    "cache_hit": false
  },
  "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": 17000,
            "name": "Bicicletas"
          },
          {
            "id": 10056,
            "name": "Bicicletas y triciclos"
          },
          {
            "id": 10214,
            "name": "MTB"
          }
        ],
        "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": 17000,
            "name": "Bicicletas"
          },
          {
            "id": 10057,
            "name": "Otros"
          }
        ],
        "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": 17000,
            "name": "Bicicletas"
          },
          {
            "id": 10056,
            "name": "Bicicletas y triciclos"
          },
          {
            "id": 10213,
            "name": "Bicicletas ciudad"
          }
        ],
        "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.eyJwYXJhbXMiOnsic2VhcmNoUmVxdWVzdFBhcmFtcyI6eyJrZXl3b3JkcyI6ImJpY2ljbGV0YSIsImxhdGl0dWRlIjo0MC40MTY4LCJsb25naXR1ZGUiOi0zLjcwMzgsIm9yZGVyX2J5IjoibW9zdF9yZWxldmFuY2UiLCJzb3VyY2UiOiJzZWFyY2hfYm94Iiwic2VhcmNoX2lkIjoiMzk2NzE4YTgtYTU4ZS00NGI5LWFiNWItNjUxOWY0YTlkNDM5In0sIm5leHRQYWdlUGFyYW1zIjp7Im9mZnNldCI6NDAsImJsZW5kaW5nX3BhZ2VfaW5pdGlhbF9vZmZzZXQiOjAsInN0ZXAiOjAsIml0ZW1zX2NvdW50Ijo0MCwic2VjdGlvbl9pdGVtc19jb3VudCI6NDAsImludGVybmFsX3NlYXJjaF9pZCI6IjI0MzkwN2IyLWZjYjItNDU1Zi1iMTNjLTNjODBhODY2ZDMyYSIsImNvdW50cnlfY29kZSI6IkVTIiwiY2l0eSI6Ik1hZHJpZCIsInJlZ2lvbiI6IkNvbXVuaWRhZCBkZSBNYWRyaWQiLCJwcm92aW5jZSI6Ik1hZHJpZCIsInBvc3RhbF9jb2RlIjoiMjgwNDIiLCJleHBlcmltZW50Ijoibm90X2xvZ2dlZF9leHBlcmltZW50Iiwic2VjdGlvbl90eXBlIjoib3JnYW5pY19zZWFyY2hfcmVzdWx0cyIsInBvaW50ZXJzIjp7IkJVTVAiOnsicmVtYWluaW5nX2RvY3VtZW50cyI6Mjk1LCJpc19hY3RpdmVfZmxvdyI6dHJ1ZX0sIk9SR0FOSUMiOnsicmVtYWluaW5nX2RvY3VtZW50cyI6OTUyMTcsImlzX2FjdGl2ZV9mbG93Ijp0cnVlfX0sInBhZ2VfbnVtYmVyIjowfX0sImV4cCI6MTc4OTY1MjQ0OX0.3Tnc-IXWTtM14T1YoGINTehsVDGTD6aoniRaAJmRSVE",
    "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": "bicicleta"
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Wallapop API works

Wallapop is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 252 engines.

02
Call
POST /wallapop/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Find underpriced listings near a city, then check they are still for sale

Newest listings in a radius, real prices only, then the record for the ones worth a message - with the shipping cost that is not in the price.

01search
POST/wallapop/v1/search
{"query": "bicicleta", "latitude": 41.3874, "longitude": 2.1686, "distance_km": 15, "sort": "newest", "price_min": 1}

Barcelona, 15 km, newest first, zero-price rows excluded. Paid featured rows are already left out and counted. Take listing_id from the rows you want and next_cursor for the next page.

02listing
POST/wallapop/v1/listing
{"listing_id": "<listing_id from above>"}

status tells you whether it is still active or already reserved or sold; shipping.delivery_options lists each option's price; seller.rating and review_count say who you are dealing with.

03seller_listings
POST/wallapop/v1/seller_listings
{"seller_id": "<seller.id from above>"}

Everything else that seller has listed, 40 per page, with their star breakdown and sold count.

A local shortlist of live, really-priced listings with condition, status and delivery cost attached - one credit per call.

request
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"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "wallapop",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

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 countryWhat the row saysWhat the seller wrote
iphone, newest, from Rome40 of 40 SpanishiPhone 17 Pro Max ArgentoiPhone 17 Pro Max Plata
iphone, newest, from Lisbon39 of 40 Spanish(Portuguese text)(Spanish text)
bicicleta, newest, from LisbonSpanish rowsSela de Bicicleta Selle SMP Triathlon BrancoSillín Selle SMP Triathlon Blanco
livros, relevance, around Porto4 of 40 Spanishflagged cross_borderlisting 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.

Three countries, one search that ignores the border, and what the price field does not mean

Wallapop Spain, Italy and Portugal from one engine. Measured on 2026-09-16: 69 live calls across all six actions in the final run with 0 failures, 16 listings checked against the listing pages themselves, and 40 queries run to test how empty searches behave. Two of these lines go against us.

Spain, Italy, Portugal - chosen by country or by the point you search

country=es, it or pt sets the default point (Madrid, Rome, Lisbon) and the language of labels, category names and suggestions. latitude and longitude search anywhere in those countries, and without a country the point decides it. Prices are EUR on every row. A point outside the three is rejected with a clear error instead of an empty page.

🔴 Search crosses the border, and foreign rows arrive translated

From Rome, the newest iPhone listings were 40 of 40 Spanish; from Lisbon, 39 of 40. Their titles and descriptions come back translated - 'iPhone 17 Pro Max Plata' reads 'iPhone 17 Pro Max Argento'. Every such row is flagged cross_border and text_is_translated, the page counts them, country_only removes them, and listing returns the seller's original words.

Paid featured rows are separated from results

Wallapop places featured listings at fixed positions: 4 of 40 rows on a keyword search, every second row on car searches, every fourth on category pages. They are left out by default and counted in sponsored_dropped, or returned flagged with include_sponsored. Newest order has none.

A price of 0 is null, and status tells you what is still for sale

All 35 listings on a lowest-price sofa search were priced 0, mostly keyword spam; they return price null with price_is_zero true. listing returns active, reserved, sold or expired - a sold camping set still showing its 100 EUR price comes back as sold.

Checked against the listing pages

On 16 listings across bikes, phones, sofas, fashion, cars and property in all three countries, the title matched the page heading, the page's structured data and the search row 16 of 16; price matched 16 of 16 three ways; the seller's rating and review count matched the seller's own stats 16 of 16. Among 40 test queries, 1 of 10 nonsense strings was answered with 19 unrelated listings; those pages come back empty with the dropped count, and none of 30 real searches, misspellings included, was emptied.

Private sellers stay private

For private sellers the name, avatar and exact location are left out; city, postal code and the distance from your search point stay. PRO and shop sellers come back with name, business address and opening hours. Review text with reviewers' names is not returned; the rating, review count and star breakdown are.

Against us: no total, and 'closest' is approximate

Wallapop publishes no result total, so total_results is null and paging runs on next_cursor. Its closest order is only roughly by distance - one page ended with a listing 2.6 km away after one at 4.3 km - so every row carries distance_km for your own sort.

Against us: optional fields stay empty

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. Price-ordered searches open with placeholder prices such as 631,824,510 EUR, returned as the site shows them.

What people build with Wallapop

The jobs this data is most often used for.

6

endpoints

1

credit per call

01

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.

02

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.

03

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.

04

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.

What Wallapop data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 252 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
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"}'
python
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"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Wallapop.

Get a free key →
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.

16 Classifieds & Second-hand APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Wallapop, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-16.