Pisos.com Scraper — Spain Real Estate Data avatar

Pisos.com Scraper — Spain Real Estate Data

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Pisos.com Scraper — Spain Real Estate Data

Pisos.com Scraper — Spain Real Estate Data

Pisos.com unofficial API: scrape Spain property listings without login and export real estate data to CSV, JSON or Excel.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

1

Bookmarked

79

Total users

22

Monthly active users

8 days ago

Last modified

Categories

Security

Limited permissions

Share

Pisos.com Property Scraper — Spain Real Estate Listings, Prices & Leads (No API)

Pisos.com Property Scraper — Spain Real Estate Data Extractor

Apify Actor No API key No login Pay per result Real Estate Export

Scrape property listings from Pisos.com, one of Spain's largest real estate portals (owned by Vocento) — 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. Get price in EUR, price/m², price drops, GPS coordinates, full address, energy class, advertiser data & image galleries in clean structured JSON. Fast HTTP scraping, no browser, no API key, no login.

🏆 Why this Pisos.com scraper?

60+ fields per listing · hundreds to thousands of listings per run · direct HTTP + structured parsing (no headless browser) · residential-proxy ready · 20+ feature flags (elevator, parking, pool, sea view…) · export to JSON / CSV / Excel. The unofficial Pisos.com API alternative for Spanish real-estate market research, investment screening and advertiser lead generation.


✨ What this Actor does / Key features

  • 🇪🇸 Nationwide targeting — scrape Pisos.com across all of Spain by province (e.g. madrid) or city (e.g. madrid_capital), or all Spain with espana.
  • 🏢 13 property types — apartments, houses, attics, duplexes, studios, lofts, rural estates, commercial premises, offices, warehouses, land, garages and storage rooms.
  • 🔁 Sale, rent & new build — venta, alquiler or obra nueva via a single transactionType.
  • 💰 Full pricing — price in EUR, price-per-m², plus price-drop amount and flag.
  • 📐 Property detail — built / usable / terrain area (m²), rooms, bathrooms, floor, building condition, year built, orientation and energy certificate (class, consumption, emissions).
  • 📍 Full address & GPS — province, city, district, neighborhood, full address and latitude/longitude for every listing.
  • 🏷️ 20+ feature flags — elevator, parking, garage, terrace, balcony, AC, heating, garden, pool, storage, fitted wardrobes, sea view, furnished, luxury, exterior and featured.
  • 🧑‍💼 Advertiser lead data — advertiser ID, name, URL and type (agency / private) for outreach.
  • 🖼️ Image galleries — main image plus the full list of image URLs and image count.
  • 🔎 Client-side filters — price, area, rooms, advertiser type and keyword.
  • ⚡ Direct HTTP extraction — no headless browser; automatic pagination with configurable caps.

🚀 Quick start (3 steps)

  1. Configure — pick transactionType (sale / rent / new), propertyType (e.g. apartment) and a location slug (e.g. madrid_capital). Add price/area/room filters if you want.
  2. Run — click Start. The Actor paginates the search results and streams listings into your dataset.
  3. Get your data — open the Output tab and export to JSON, CSV, Excel or XML, or pull it via the Apify API.

📥 Input

Set at least transactionType, propertyType, location, maxListings, maxPages and proxyConfiguration. Filters are optional.

Example — apartments for sale in Madrid (with price & room filter)

{
"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"
}
}

Example — rentals in Barcelona (private advertisers only, lead generation)

{
"transactionType": "rent",
"propertyType": "apartment",
"location": "barcelona_capital",
"advertiserType": "private",
"sortBy": "newest",
"maxListings": 1000,
"maxPages": 40,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "ES" }
}

Example — new-build (Obra Nueva) developments in Valencia province

{
"transactionType": "new",
"propertyType": "apartment",
"location": "valencia",
"maxListings": 300,
"maxPages": 20,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "ES" }
}
FieldTypeDescription
transactionTypeenumsale (Venta), rent (Alquiler) or new (Obra Nueva). Required.
propertyTypeenumapartment, house, attic, duplex, studio, loft, ruralEstate, commercial, office, warehouse, land, garage or storage. Required.
locationstringPisos.com location slug. Province alone (e.g. madrid) targets the whole province; append _capital for the city (e.g. madrid_capital). Use espana for all Spain. Required.
sortByenumrelevance, newest, priceAsc, priceDesc or areaDesc.
minPrice / maxPriceintegerPrice range in EUR (applied client-side).
minArea / maxAreaintegerSurface area range in m² (client-side).
minRooms / maxRoomsintegerRoom-count range, 0–20 (client-side).
advertiserTypeenumall, agency or private (client-side filter).
keywordstringOptional substring filter on title and description.
maxListingsintegerHard cap on listings saved (default 200). Required.
maxPagesintegerHard cap on search pages crawled (default 20, ~33 listings/page). Required.
proxyConfigurationobjectApify Proxy settings — RESIDENTIAL group with country=ES recommended and default. Required.

Location slugs

SlugCoverageSlugCoverage
espanaAll Spainsevilla_capitalSeville city
madridMadrid provincemalaga / malaga_capitalMálaga
madrid_capitalMadrid cityalicanteAlicante
barcelonaBarcelona provincezaragozaZaragoza
barcelona_capitalBarcelona citybilbaoBilbao
valencia / valencia_capitalValenciamallorcaMallorca

Finding a location slug: browse pisos.com, apply a location filter, and copy the slug from the URL. Use lowercase ASCII and replace spaces with underscores. Append _capital for the city itself (e.g. madrid = province, madrid_capital = city).

Additional input fields

These optional fields are also available in the input form and API:

FieldTypeDefaultDescription
fetchDetailsbooleantrueOpen each listing's own page to fill the detail-only columns: usable area, plot size, condition, building age, energy certificate, orientation and the amenity flags (lift, garage, terrace, pool, furnished…).
timeBudgetSecsinteger180Maximum wall-clock time used for fetching pages. Results collected before the deadline are preserved. Increase this for very large exports.

📤 Output

One row per listing — 60+ fields, exportable to JSON, CSV, Excel or XML. Here is a trimmed sample record:

{
"adId": "12345678_67890",
"detailUrl": "https://www.pisos.com/comprar/piso-madrid_capital_chamberi-12345678_67890/",
"title": "Piso reformado en Chamberí",
"transactionType": "sale",
"propertyType": "apartment",
"price": 425000,
"priceCurrency": "EUR",
"pricePerSqm": 5882,
"priceDropValue": 15000,
"hasPriceDrop": true,
"areaSqm": 72,
"usableAreaSqm": 65,
"rooms": 2,
"roomsLabel": "2 hab.",
"bathrooms": 1,
"floor": "3",
"buildingCondition": "Buen estado",
"buildingAge": "Entre 30 y 50 años",
"orientation": "Sur",
"energyClass": "E",
"province": "Madrid",
"city": "Madrid",
"district": "Chamberí",
"neighborhood": "Trafalgar",
"fullAddress": "Calle de Trafalgar, Chamberí, Madrid",
"latitude": 40.4324,
"longitude": -3.7012,
"mainImageUrl": "https://static.pisos.com/…/main.jpg",
"imageUrls": ["https://…/1.jpg", "https://…/2.jpg", "…"],
"imageCount": 18,
"advertiserId": "ag-40912",
"advertiserName": "Inmobiliaria Centro Madrid",
"advertiserType": "agency",
"hasElevator": true,
"hasParking": false,
"hasTerrace": true,
"hasAirConditioning": true,
"isExterior": true,
"isNewListing": true,
"dateUpdated": "2026-09-23",
"labels": ["Nuevo"],
"searchLocation": "madrid_capital",
"scrapedAt": "2026-07-06T10:30:00.000Z"
}

💡 Use cases

  • Market research — track Spanish property prices, price/m² and price drops across provinces, cities and neighborhoods.
  • Investment screening — compare sale vs. rent pricing per area to estimate gross rental yield.
  • Portals & aggregators — feed Pisos.com listings into your own search platform or comparison tool.
  • Lead generation — use advertiserType: private for direct-owner leads, or cluster agency listings by advertiserId.
  • Relocation & buyer's agents — build curated shortlists filtered by price, area, rooms and features.
  • Data science teams — build valuation models with structured location, area, energy and feature data.

👥 Who uses it

Real-estate agencies & proptech teams · property investors & flippers · valuation and mortgage analysts · market researchers & data journalists · relocation and buyer's agents · lead-gen agencies building advertiser contact lists.

💰 Pricing

This Actor runs on a simple pay-per-result model — you pay for the listings you extract, with no separate Apify platform fees to calculate. Try it on the free tier first, then scale up. See the Pricing tab on this page for the current rate.

❓ Frequently Asked Questions

Does Pisos.com have a public API? Pisos.com does not provide an open public listings API, so this Actor extracts the structured data directly from its search pages — giving you Spanish real estate data with no API key.

Is this a Pisos.com API alternative? Yes. Pisos.com has no open public listings API, so this Actor works as an unofficial Pisos.com API alternative — it reads the structured data directly from search pages with no API key.

Do I need a Pisos.com account or API key? No. The Actor scrapes publicly visible listings — no login and no API key required, only an Apify account.

Can I scrape Pisos.com without an API key or login? Yes. The Actor extracts publicly visible Spanish property listings with no login and no API key required — just set your location and filters.

Is scraping Pisos.com legal? The Actor collects publicly available listing data. You are responsible for using it in compliance with Pisos.com's terms of service, robots.txt and applicable laws such as GDPR. The Actor uses a polite throttle between pages.

How do filters work? Price, area, rooms, advertiser type and keyword filters are applied client-side after fetching pages — not via the search URL. With very narrow filters, increase maxPages so the Actor crawls enough pages to find matches.

How much data can I get? Pisos.com shows ~33 listings per page. Set maxListings and maxPages to control volume — a single run can return hundreds to thousands of listings.

Why are some detail-page fields empty? Detail-only columns — usableAreaSqm, terrainAreaSqm, buildingCondition, buildingAge, orientation, energyClass / energyConsumption / energyEmissions, dateUpdated and every amenity flag — are read from each listing's own page, which the Actor visits automatically (Fetch detail pages, on by default). Turn that input off for a faster listing-page-only export; those columns then come back empty.

Some of these are genuinely property-dependent rather than missing: terrainAreaSqm only exists for houses/chalets with a plot, floor only for flats, and the energy certificate is only present when the advertiser uploaded one (roughly 25–45% of ads).

Do I need a proxy? A RESIDENTIAL proxy with country=ES is recommended and set by default. Adjust proxyConfiguration if you use your own proxy provider.

How do I export Pisos.com data to CSV or JSON? Run the Actor, then download the resulting dataset as CSV, JSON or Excel from the Apify Console, or pull it via the Apify API for a clean Spain real estate data export.

How do I scrape apartments for sale in Madrid from Pisos.com? Set transactionType to sale, propertyType to apartment and location to madrid_capital, and the Actor returns every Madrid apartment listing with price and price-per-m².

How do I scrape rental properties in Barcelona on Pisos.com? Set transactionType to rent and location to barcelona_capital, and the scraper collects Barcelona rental listings with price, area, rooms and GPS coordinates.

Can I filter Pisos.com listings by price and number of rooms? Yes. minPrice, maxPrice, minRooms and maxRooms apply client-side after fetching pages, so you can narrow results to your exact budget and layout.

🔗 More real estate scrapers by logiover

Building a cross-country property dataset? Pair Pisos.com with the rest of the European (and beyond) real-estate suite:

CountryActor
🇪🇸 SpainHabitaclia Scraper
🇵🇱 PolandOtodom.pl Scraper
🇨🇿 CzechiaSreality.cz Scraper
🇬🇷 GreeceSpitogatos Scraper · XE.gr Scraper
🇮🇹 ItalyCasa.it Scraper · Subito Scraper
🇩🇪 GermanyImmobilienScout24 Scraper · WG-Gesucht Scraper
🇵🇹 PortugalImovirtual Scraper
🇫🇷 FranceBien'ici Scraper
🇷🇴 RomaniaStoria.ro Scraper
🇳🇱 NetherlandsFunda Scraper
🇮🇪 IrelandMyHome.ie Scraper
🇦🇹 AustriaWillhaben Scraper
🇩🇰 DenmarkBoliga Scraper
🇧🇬 BulgariaImot.bg Scraper

👉 Browse all logiover scrapers on Apify Store — 180+ actors across real estate, jobs, crypto, social media & B2B data.

⏰ Scheduling & integration

Schedule this Actor on Apify to monitor new listings and price changes across Spanish cities. Export results to JSON, CSV or Excel, sync to Google Sheets, or push to your database, BI tools and webhooks through the Apify API. Connect it to Make, n8n or Zapier to build automated real-estate pipelines.

⭐ Support & feedback

Found a bug or need an extra field? Open an issue on the Issues tab — response is usually fast. If this Actor saves you time, a ★★★★★ review on the Store page genuinely helps and is hugely appreciated. 🙏

This Actor extracts only publicly available data and is intended for legitimate research, analytics and lead-generation use. You are responsible for complying with Pisos.com's terms of service, robots.txt, GDPR and any applicable local laws.


This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Pisos.com; Pisos.com and all other trademarks mentioned here are the property of their respective owners.

Pisos.com scraping — frequently asked questions

Do I need a Pisos.com API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

How do I export Pisos.com data to CSV, Excel, JSON or Google Sheets?

Open the Storage tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

Can I schedule this Pisos.com scraper to run daily or hourly?

Yes. Use the Schedules tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the listings you care about really do change that fast.

How many listings can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

This Actor collects only information that Pisos.com publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

What happens if Pisos.com blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run fails with the reason instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

📝 Changelog

2026-11-01

  • Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
  • README refreshed: 1 link to retired Actors removed; independence disclaimer added; documented 2 additional input fields.

2026-10-15

  • Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
  • A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
  • A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
  • Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.
  • The prefilled example for maxListings is now 126 (was 30).
  • The default used when the field is left out for maxListings is now 1,008 (was 200).
  • The default used when the field is left out for maxPages is now 60 (was 20).

2026-09-24

Fixed the 26 columns that were always empty. The Actor advertised detail-page attributes but only ever parsed the search-results page, so every detail-only column was hard-coded to null on every row.

  • The Actor now opens each listing's own page (new Fetch detail pages input, on by default, 5 at a time) and reads the real values. Measured on 40 live Madrid / Barcelona / Valencia / Sevilla / Marbella / Toledo listings, these went from 0% to: amenity flags hasElevator, hasParking, hasGarage, hasTerrace, hasBalcony, hasAirConditioning, hasHeating, hasGarden, hasPool, hasStorage, hasFittedWardrobes, isFurnished 100%; dateUpdated 100%; buildingCondition 82–100%; buildingAge 82–83%; usableAreaSqm 64–100%; orientation 43–67%; energyClass / energyConsumption / energyEmissions 25–43%; isExterior 39%; terrainAreaSqm 50% of houses/chalets (flats have no plot, so it stays empty for them by design).
  • Amenity flags are now true/false instead of true/empty. false means the advertiser did not list that amenity; an empty cell means the detail page could not be read, so empty never silently means "no".
  • labels was empty because Pisos.com renamed its badge markup. Re-pointed at the current per-listing tag slot, so labels now returns real badges such as "Nuevo", plus a new isNewListing boolean. The page's other two badges are deliberately ignored: "TOP" is emitted for every single card and "Oportunidad" for every standard result slot, so neither says anything about an individual listing.
  • Removed four columns the source does not publish at all, rather than keep shipping permanently empty (or permanently identical) headers: advertType (duplicated advertiserType, no separate source value), hasSeaView and isLuxury (no such attribute on Pisos.com — checked against coastal Benidorm and Marbella luxury listings), and isFeatured (Pisos.com marks every result as "TOP", so the flag could only ever be true for everything).
  • Replaced two mislabelled columns with what the source actually publishes: yearBuilt → buildingAge (Pisos.com states an age band such as "Entre 30 y 50 años", never a construction year) and datePosted → dateUpdated (only the ad's last-updated date is published, never the original posting date).
  • Detail fetching observes the existing wall-clock budget and stops opening new pages near the deadline, so results collected so far are always written out. A 30-listing Store-prefill run adds about 12 seconds.

2026-09-23

  • Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
  • Output verified on a live run: 65 columns returned, 55.9% of cells populated.
  • Run reliability reviewed: 98.5% of public runs succeeded in the last 30 days.
  • Input schema, output schema and pricing configuration reviewed.
  • Noted that 26 column(s) came back empty in this sample (advertType, usableAreaSqm, terrainAreaSqm, buildingCondition, yearBuilt, energyClass and others); these are under review.

2026-09-01

  • Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
  • Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
  • No change to input, output fields or scraping logic.

2026-08-11

  • Maintenance release: refreshed the build and dependencies.
  • Re-verified live execution, non-empty structured output and dataset field/type integrity.
  • Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

2026-08-03

  • Fixed intermittent five-minute quality-test timeouts with a deterministic run deadline and bounded HTTP retries.
  • Made restricted/proxy-off execution graceful instead of failing during proxy initialization.
  • Kept normal output capacity unchanged; only the Store prefilled example was reduced to a fast 30-listing health run.

2026-07-06

  • ✨ README overhaul: richer 60+ field output sample, three ready-to-run example scenarios, full field reference, and an expanded cross-country real-estate suite.

2026-07-01

  • Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
  • Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
  • Added ready-to-run example tasks that cover common real-world use cases.

2026-06-28

  • Health check passed — Actor verified working end-to-end on the Apify platform.
  • Changelog refreshed for Store quality compliance.

2026-06-20

  • Maintenance & reliability pass: re-verified end-to-end against live data and confirmed the Actor completes successfully within the 5-minute quality window on the default input.
  • Refreshed the prefilled example input and tuned run defaults for faster, lower-cost runs.

2026-06-15

  • Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

2026-06-07

  • Docs: added coverage for using the Actor as a Pisos.com unofficial API alternative, exporting Spain real estate data to CSV/JSON, and scraping Pisos.com without an API key or login.

2026-06-05

  • 🛡️ Reliability fix: results are no longer dropped by strict output validation — runs now complete cleanly even at high volume (thousands of results).
  • ⚡ Stability & performance hardening; fresh rebuild.

2026-06-04

  • Verified live & refreshed build — reliability/maintenance pass.

2026-06-01

  • Maintenance & reliability pass: pulled the latest source and rebuilt the Actor on the current base image; build verified.

*Maintained: last verified 2026-11-01 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).