Wallapop New Listings Alert (Spain, Italy, Portugal)
Pricing
from $0.03 / 1,000 listing scrapeds
Wallapop New Listings Alert (Spain, Italy, Portugal)
Newest Wallapop listings for a keyword or category near a city in Spain, Italy or Portugal, one flat row each: title, price in EUR, previous price, location, shipping, photos, item URL - and whether each listing is new, cheaper or dearer than on the last run.
Pricing
from $0.03 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 days ago
Last modified
Categories
Share
Watch Wallapop for new second-hand listings. Give it a keyword or a category, a city (or exact coordinates) and optionally a radius and a price band; it returns the newest listings first, one flat row each, and tells you which ones are new since your last run and which ones changed price. Schedule it hourly and turn on Only new and re-priced listings to get an alert feed that costs nothing for listings you have already seen.
Input
| Field | Notes |
|---|---|
keyword | What you would type into Wallapop's search box. Required unless you give categoryId. |
city | Madrid (default), Barcelona, Valencia, Sevilla, Málaga, Bilbao, Zaragoza, Milano, Roma, Torino, Napoli, Lisboa, Porto. |
latitude, longitude | Search from exactly here instead of a city. Give both, as text ("40.4168"), not as JSON numbers. |
distanceKm | Only listings within this radius. See Italy and Portugal below. |
categoryId | One Wallapop category id (e.g. 24200 Technology & electronics). Every row carries its category_id. |
minPrice, maxPrice | Asking-price band in whole euros. |
maxItems | Stop after this many rows (default 100). Wallapop serves 40 per request. |
changesOnly | Return and charge only listings that are new or re-priced since the last run of the same search. |
Italy and Portugal
Without a radius, Wallapop's newest-first search ignores which country the
location is in: on 2026-10-05, a search from Milan and one from Lisbon both
returned 40 of 40 Spanish listings. With distance_in_km=50 the same
searches returned only Italian (20) and only Portuguese (5) listings. So the
Italian and Portuguese city presets use a 50 km radius unless you set one,
and if you pass raw coordinates outside Spain, set distanceKm yourself. A
Spanish location with no radius gets Wallapop's default, country-wide feed.
Output
| Field | Notes |
|---|---|
change | new, price_drop, price_rise or unchanged, compared with the previous run of the same search. |
item_id, url, web_slug | url is https://es.wallapop.com/item/<web_slug>. |
title, description | As the seller wrote them. |
price, currency | Asking price as Wallapop sends it (a decimal, EUR). |
previous_price, discount_percentage | Only when the seller cut the price on Wallapop itself; null otherwise. |
category_id, category_name, category_path | Wallapop's own id and its taxonomy, deepest name and full path. |
image_urls, thumbnail_url | Photo URLs (large) and the first small one. Nothing is downloaded. |
reserved | Wallapop's "reserved" flag. |
latitude, longitude, postal_code, city, region, region2, country_code | The approximate location Wallapop publishes for the listing. |
shippable, seller_allows_shipping | Whether the item can ship with Wallapop, and whether this seller offers it. |
bump_type, bumped | none, or zone / city / country for a listing the seller paid to promote. |
is_refurbished, is_top_profile, has_warranty | Wallapop's own flags. |
seller_id | Wallapop's opaque user id. No seller name or rating - the search does not return them. |
created_at, modified_at | Unix milliseconds, plus created_at_iso / modified_at_iso in UTC. |
query | The keyword this row came from. |
Honest nulls
A field Wallapop did not send is null, never 0 or "". previous_price is
null for a listing that was never discounted - a 0 would read as a price cut
to nothing. Flags (reserved, shippable, ...) are null when the block was
missing, not false.
Promoted listings
Paid promotions ("bumps") appear in a newest-first search whatever their age.
In an unfiltered search nearly every row is one, which is why this actor needs
a keyword or a category. Filter on bumped if you only want organic listings.
Personal data
Sellers often write a phone number or a first name into the description. The description is carried as Wallapop publishes it, because it is the listing, but nothing is extracted from it. You are responsible for handling it under the GDPR if you store it.
Change tracking
Each search (keyword, location, radius, category and price band) has its own
memory, kept in a named key-value store on your Apify account
(wallapop-listings-watch), so it is never visible to anyone else. The first
run of a search has nothing to compare against: it labels every listing new.
From the second run on, a listing is new if the last run did not see it,
price_drop / price_rise if its price moved, and unchanged otherwise.
With changesOnly, unchanged listings are neither returned nor charged, and
the run stops at the first page on which nothing has changed - the feed is
newest first, so the rest of it is what you already have.
What a price change can be seen on. Wallapop's newest-first order is by
the date a listing was created, not by when it was edited (checked on four
probed pages, 2026-10-05). A run reads only the newest maxItems listings, so a
price cut is reported while the listing is still inside that window - an
old listing re-priced weeks later is not re-read and will not show up as
price_drop. This is a new-listing alert first; price moves are a bonus on
recent listings.
Pricing
Pay per event:
- $0.002 per run (
actor-start), charged only after your input is validated - a run that fails on bad input costs nothing. - $0.000028 per listing row written (
item-scraped), i.e. $0.028 per 1,000 listings. WithchangesOnly, unchanged listings are not charged.
How it fetches
It calls the same JSON search API Wallapop's website uses
(api.wallapop.com/api/v3/search), newest first, 40 rows per request, with
the browser's own headers. No account and no login. Apify datacenter proxy is
the default; it was answered with HTTP 200 on 2026-10-05.