Wallapop API endpoint
Returns one page of public Wallapop listing cards with title, price, currency, images, coarse location, taxonomy, shipping state, and a public item URL. q is a free-text search. latitude and longitude are required caller-provided coordinates because Wallapop otherwise infers location from the server's network location. category_id accepts any ID returned by /wallapop/categories, including descendants. sort is one of closest, most_relevance, newest, price_low_to_high, or price_high_to_low. When category_id is supplied, discover condition values from /wallapop/filters; categories can add values beyond the base set. Use /wallapop/filter-options for remote filter values. Pass next_cursor back as cursor by itself to fetch the next page.
/wallapop/searchSearch Wallapop's anonymous public marketplace listings. The first page uses the site's two-step search flow and returns 40 listing cards. Provide both latitude and longitude; the upstream otherwise infers location from the server's network location, which can silently select the wrong market. Spain, Italy, and Portugal are the observed market codes. Category IDs are dynamic; discover them with /wallapop/categories.
q (required): search text, 2 to 200 characters.latitude and longitude (required): caller-provided decimal coordinates, within -90..90 and -180..180.category_id (optional): any id from /wallapop/categories. Descendant IDs are mapped to the correct root and selected subcategory upstream.sort (optional): one of closest, most_relevance, newest, price_low_to_high, price_high_to_low. Defaults to most_relevance.min_price, max_price (optional): sale-price bounds; minimum cannot exceed maximum.condition (optional, repeatable or comma-separated): use the live condition option IDs from /wallapop/filters for the selected category. Categories can add values such as un_worn, in_box, or un_opened; without category_id, the base values are new, as_good_as_new, good, fair, and has_given_it_all.is_shippable (optional): pass true to limit results to listings with shipping available. Omit it to include all listings; false is rejected because Wallapop ignores it.time_filter (optional): today, lastWeek, or lastMonth.distance_in_km (optional): 0 to 1000 km from the supplied coordinates.filter (optional, repeatable): dynamic key:value filters from /wallapop/filters. Local examples include has_warranty:true and storage_capacity:128gb; use the live category schema for current values. For any remote list, use the option IDs from /wallapop/filter-options via the filter's options_endpoint; model requires a brand filter. Category-specific remote lists use the selected category ID from /wallapop/categories. Multi-select values can be repeated or comma-separated (for example storage_capacity:128gb,256gb or fashion_size:3,4).cursor (optional): pass next_cursor from the previous response by itself to fetch another page. It is opaque and tied to the original query/location.items contain public listing-card fields only: listing ID/title, price/currency, images, category taxonomy, coarse location, shipping state, and a locale-specific item URL where available. Seller IDs/names, descriptions, exact coordinates, postal codes, favorites, and upstream tracking fields are omitted. Phone/email patterns in titles are redacted; if a public slug itself contains contact text, the slug and URL are omitted. next_cursor is omitted after the last page.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Free-text listing search, 2 to 200 characters | iphone | |
| latitude | number | Yes | Caller-provided search latitude, -90 through 90 | 40.4168 | |
| longitude | number | Yes | Caller-provided search longitude, -180 through 180 | -3.7038 | |
| category_id | integer | No | Any live search taxonomy ID from /wallapop/categories | 24200 | |
| sort | string | No | Wallapop sort order Allowed values: closest, most_relevance, newest, price_low_to_high, price_high_to_low. | most_relevance | |
| min_price | number | No | Minimum sale price | 10 | |
| max_price | number | No | Maximum sale price | 500 | |
| condition | string | No | Repeatable or comma-separated condition values. With category_id, use the current values from /wallapop/filters; without category_id, base values are new, as_good_as_new, good, fair, and has_given_it_all. | new,good | |
| is_shippable | string | No | Pass true to limit to shipping-capable listings; omit to include all. false is rejected because Wallapop ignores it. Allowed values: true. | true | |
| time_filter | string | No | Listing date window Allowed values: today, lastWeek, lastMonth. | lastWeek | |
| distance_in_km | integer | No | Maximum distance from the supplied coordinates, 0 through 1000 km | 25 | |
| filter | array<string> | No | Repeatable category-specific key:value pair discovered from /wallapop/filters, e.g. brand:BMW, color:Black, has_warranty:true, storage_capacity:128gb, item_language:english, or fashion_size:3,4. For remote values use IDs returned by /wallapop/filter-options. | storage_capacity:128gb | |
| cursor | string | No | Opaque next_cursor returned by a previous response. Use it alone, without initial search parameters. | eyJ2IjoxLCJuZXh0X3BhZ2UiOiJ... | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/wallapop/search?q=iphone&latitude=40.4168&longitude=-3.7038&sort=closest&is_shippable=true&time_filter=today" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "iphone",
"category_id": 24200,
"sort": "most_relevance",
"country_code": "ES",
"count": 1,
"items": [
{
"id": "listing-123",
"title": "Synthetic public listing",
"url": "https://es.wallapop.com/item/synthetic-listing-123",
"category_id": 24200,
"price": 120,
"currency": "EUR",
"images": [
"https://images.example.test/item.jpg"
],
"location": {
"city": "Madrid",
"region": "Madrid",
"country_code": "ES"
},
"shipping": {
"item_is_shippable": true,
"user_allows_shipping": true
}
}
],
"next_cursor": "eyJ2IjoxLCJuZXh0X3BhZ2UiOiJ..."
}
}Request schema
No body schema
Response schema
#/definitions/wallapop.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | wallapop.SearchResponse | No | ||||
| data.category_id | integer | No | ||||
| data.count | integer | No | ||||
| data.country_code | string | No | ||||
| data.fetched_at | string | No | ||||
| data.items | array | No | ||||
| data.items[].category_id | integer | No | ||||
| data.items[].currency | string | No | ||||
| data.items[].id | string | No | ||||
| data.items[].images | array | No | ||||
| data.items[].location | wallapop.ListingLocation | No | ListingLocation record, 4 fields: city, country_code, region, region2. Described under Wallapop item detail API. | |||
| data.items[].price | number | No | ||||
| data.items[].shipping | wallapop.ListingShipping | No | ||||
| data.items[].shipping.item_is_shippable | boolean | No | ||||
| data.items[].shipping.user_allows_shipping | boolean | No | ||||
| data.items[].slug | string | No | ||||
| data.items[].taxonomy | array | No | ||||
| data.items[].taxonomy[].id | integer | No | ||||
| data.items[].taxonomy[].name | string | No | ||||
| data.items[].title | string | No | ||||
| data.items[].url | string | No | ||||
| data.next_cursor | string | No | ||||
| data.query | string | No | ||||
| data.sort | string | No | ||||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/wallapop/search?q=iphone&latitude=40.4168&longitude=-3.7038&sort=closest&is_shippable=true&time_filter=today" \
-H "x-api-key: $CRAWLORA_API_KEY"