Pisos.com Property Scraper avatar

Pisos.com Property Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Pisos.com Property Scraper

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

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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

FieldTypeDescription
transactionTypeenumsale (venta), rent (alquiler), new (obra nueva)
propertyTypeenumapartment, house, attic, duplex, studio, loft, ruralEstate, commercial, office, warehouse, land, garage, storage
locationstringPisos.com slug. Examples below.
sortByenumrelevance (default), newest, priceAsc, priceDesc, areaDesc
minPrice, maxPriceintPrice range in EUR (client-side filter)
minArea, maxAreaintArea range in m² (client-side filter)
minRooms, maxRoomsintRoom count range (client-side filter)
advertiserTypeenumall, agency, private (client-side filter)
keywordstringOptional substring filter on title/description
maxListingsintHard cap on items saved (default 200)
maxPagesintHard cap on pages crawled (default 20, ~33 listings/page)
proxyConfigurationobjectApify 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.

SlugCoverage
espanaAll Spain
madridMadrid province
madrid_capitalMadrid city
barcelonaBarcelona province
barcelona_capitalBarcelona city
valencia / valencia_capitalValencia
sevilla / sevilla_capitalSeville
malaga / malaga_capitalMá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

  1. Builds a search URL from the input: https://www.pisos.com/{contract}/{type}-{location}/{sort?}/{page?}/
  2. Fetches each search-results page directly with HTTP (no headless browser needed).
  3. 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.
  4. Applies client-side filters (price range, area, rooms, advertiser type, keyword).
  5. 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 maxPages to 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 detailUrl in 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 proxyConfiguration if 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.