Pisos.com Property Scraper
Pricing
from $2.00 / 1,000 results
Pisos.com Property Scraper
Scrape real estate listings from Pisos.com — Spain's #3 property portal, owned by Vocento. Extract apartments, houses, attics, duplexes, studios, lofts, offices, garages and storage (sale, rent or new build) by Spanish region, province or city, with price (EUR), area (m²), rooms, bathrooms and GPS.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape real estate listings from Pisos.com — Spain's #3 property portal, owned by Vocento (publisher of ABC newspaper).
Returns apartments, houses, attics, duplexes, studios, lofts, rural estates, commercial premises, offices, warehouses, land, garages and storage rooms — for sale, rent or new construction — anywhere in Spain.
What you get
For each listing the actor returns:
- Identification: ad ID, detail URL, title, short description
- Pricing: price (EUR), price per m², price drop value (if any)
- Property: area (m²), usable area, rooms, bathrooms, floor, condition, energy class
- Location: country, province, city, district, neighborhood, full address, GPS coordinates (latitude/longitude)
- Media: main image URL
- Advertiser: name, type (agency/private)
- Features: elevator, parking, garage, terrace, balcony, AC, heating, garden, pool, storage, fitted wardrobes, sea view, furnished, luxury
- Search context: the search URL, transaction type, location and sort order used
Input
| Field | Type | Description |
|---|---|---|
transactionType | enum | sale (venta), rent (alquiler), new (obra nueva) |
propertyType | enum | apartment, house, attic, duplex, studio, loft, ruralEstate, commercial, office, warehouse, land, garage, storage |
location | string | Pisos.com slug. Examples below. |
sortBy | enum | relevance (default), newest, priceAsc, priceDesc, areaDesc |
minPrice, maxPrice | int | Price range in EUR (client-side filter) |
minArea, maxArea | int | Area range in m² (client-side filter) |
minRooms, maxRooms | int | Room count range (client-side filter) |
advertiserType | enum | all, agency, private (client-side filter) |
keyword | string | Optional substring filter on title/description |
maxListings | int | Hard cap on items saved (default 200) |
maxPages | int | Hard cap on pages crawled (default 20, ~33 listings/page) |
proxyConfiguration | object | Apify proxy settings — RESIDENTIAL + ES recommended |
Location slugs
Pisos.com uses lowercase ASCII slugs. Province alone targets the whole province; append _capital for the city itself.
| Slug | Coverage |
|---|---|
espana | All Spain |
madrid | Madrid province |
madrid_capital | Madrid city |
barcelona | Barcelona province |
barcelona_capital | Barcelona city |
valencia / valencia_capital | Valencia |
sevilla / sevilla_capital | Seville |
malaga / malaga_capital | Málaga |
alicante, zaragoza, bilbao, cadiz, mallorca, etc. | Other locations |
Example input
{"transactionType": "sale","propertyType": "apartment","location": "madrid_capital","sortBy": "newest","minPrice": 200000,"maxPrice": 500000,"minRooms": 2,"maxListings": 200,"maxPages": 20,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "ES"}}
Output
The dataset items follow the schema in .actor/dataset_schema.json. Sample item:
{"adId": "12345678_67890","detailUrl": "https://www.pisos.com/comprar/piso-madrid_capital_chamberi-12345678_67890/","title": "Piso reformado en Chamberí","shortDescription": "Luminoso piso de 2 habitaciones...","transactionType": "sale","propertyType": "apartment","price": 425000,"priceCurrency": "EUR","pricePerSqm": 5882,"areaSqm": 72,"rooms": 2,"bathrooms": 1,"floor": "3","country": "España","province": "Madrid","city": "Madrid","district": "Chamberí","neighborhood": "Trafalgar","latitude": 40.4324,"longitude": -3.7012,"mainImageUrl": "https://...","searchUrl": "https://www.pisos.com/venta/pisos-madrid_capital/fecharecientedesde-desc/","scrapedAt": "2026-05-06T10:30:00.000Z"}
How it works
- Builds a search URL from the input:
https://www.pisos.com/{contract}/{type}-{location}/{sort?}/{page?}/ - Fetches each search-results page directly with HTTP (no headless browser needed).
- For each property card on the page:
- Reads the embedded JSON-LD
<script>(gives id, URL and exact GPS coordinates). - Parses the DOM card (
.ad-preview__title,.ad-preview__price,.ad-preview__char,.ad-preview__subtitle) for title, price, area, rooms, bathrooms, floor, location.
- Reads the embedded JSON-LD
- Applies client-side filters (price range, area, rooms, advertiser type, keyword).
- Stops when the page cap, listing cap, an empty page or a pagination loop is reached.
Limitations
- Filtering by price/area/rooms is applied after fetching pages, not via URL — so very narrow filters may need a higher
maxPagesto find enough matches. - Card-level data does not include all detail-page fields (energy certificate, exact agency phone, full feature list). For those, follow the
detailUrlin a downstream step. - Polite throttle of ~1.2s between pages; respect Pisos.com terms of service and robots.txt.
Cost & performance
- ~33 listings per page; default 20 pages × ~1.5s = ~30s for 600+ candidate listings on a popular search.
- Uses RESIDENTIAL proxy (ES) by default — adjust
proxyConfigurationif you have your own proxy provider.
Author
Built by an Apify community user, following the same architectural patterns as the Sreality, Otodom, Halooglasi, Njuškalo and Subito scrapers in the Apify Store.