Fotocasa All-in-One Scraper — Spain Buy & Rent Listings
Pricing
from $5.00 / 1,000 property scrapeds
Fotocasa All-in-One Scraper — Spain Buy & Rent Listings
Scrape fotocasa.es Spain real estate by city or search URL. Buy, rent, share & transfer. Price, m², rooms, baths, GPS, agency phone, images. HTTP-only, MCP-ready, no login.
Pricing
from $5.00 / 1,000 property scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Fotocasa All-in-One Scraper is an Apify Actor for collecting public Spain real-estate listings from Fotocasa.es. It accepts a city or area name, or a pasted Fotocasa search or detail URL, and returns one structured record per listing. Each record can include price, surface in m², rooms, bathrooms, floor, city, neighborhood, ZIP, GPS coordinates, agency name, agency phone, image count, listing timestamps, and the canonical listing URL. It runs over HTTP with Apify Residential Spain proxies and is usable through Apify MCP.
Best fit and connected workflows
This Actor fits workflows centered on Spanish residential inventory from Fotocasa:
- Buy-side research from
comprarsearches, with price, m², rooms, and agency contact fields - Rental research from
alquilersearches, with monthly rent and size fields - URL-driven collection when you already filtered on Fotocasa and want the Actor to follow that search
- Location-driven collection when you want the Actor to resolve a city such as Madrid or Barcelona and run buy or rent filters
- CRM and spreadsheet import where one flat row per listing is the next step
If your workflow centers on another property market, these verified related Actors provide natural routing options:
- Then use Idealista Scraper to extend Fotocasa All-in-One Scraper with a neighboring Spain/Italy/Portugal Idealista source when the brief calls for Idealista data
- Then use Rightmove All-in-One Scraper to extend Fotocasa All-in-One Scraper with a neighboring UK BUY/RENT/SOLD source when the brief calls for Rightmove data
- Then use Zillow All-in-One Scraper to extend Fotocasa All-in-One Scraper with a neighboring US property source when the brief calls for Zillow data
Fotocasa All-in-One Scraper — Spain Buy & Rent Listings is designed as a focused standalone workflow for Fotocasa Spain.
Practical scenario
Lucia is comparing Madrid Capital buy listings for a relocation client. She sets location to Madrid, operation to buy, and maxItems to 10. The dataset returns fields such as price, surfaceM2, rooms, bathrooms, neighborhood, agencyPhone, and url. Lucia sorts by €/m² using pricePerM2, shortlists three districts, and opens each url to review photos before sharing a shortlist with the client.
Input
Use either a Fotocasa URL in startUrls or a location-based search with location and operation.
| Field | Type | Purpose |
|---|---|---|
startUrls | array | Fotocasa search (…/l) or detail (…/{id}/d) URLs. Search URLs are paginated until maxItems. |
location | string | Spanish city, province, or area when startUrls is empty (for example Madrid or Barcelona). |
locationType | string | Optional suggestion level when several matches exist (municipality vs province). |
operation | string | buy, rent, share, rentBuyOption, or transfer for location mode. |
propertyType | string | Category such as home, office, garages, or land. |
minPrice / maxPrice | integer | EUR filters (monthly rent for rent mode). |
minSize / maxSize | integer | Floor-area filters in m². |
fetchDetails | boolean | Optional detail-page enrich for energy-certificate attempts when present. |
maxItems | integer | Cap on returned rows and property event charges. |
proxyConfiguration | object | Prefer Apify Residential Spain for stable yield. |
Focused input example:
{"location": "Madrid","operation": "buy","propertyType": "home","maxItems": 10,"fetchDetails": false}
Output
Each dataset item is one flat JSON record per listing.
| Field | Type | Meaning |
|---|---|---|
id | string | Fotocasa property identifier. |
url | string | Canonical listing URL. |
operation | string | Buy, rent, or related operation label. |
title | string or null | Public listing title. |
price | number or null | Asking price in EUR. |
currency | string | Usually EUR. |
rooms | integer or null | Room count when published. |
bathrooms | integer or null | Bathroom count when published. |
surfaceM2 | number or null | Floor area in square metres. |
pricePerM2 | number or null | Derived €/m² when price and size exist. |
floor | number or null | Floor level when published. |
city | string or null | City or municipality label. |
neighborhood | string or null | Neighborhood label. |
zipCode | string or null | Postal code when published. |
latitude / longitude | number or null | GPS coordinates when published. |
agencyName | string or null | Agency or advertiser name. |
agencyPhone | string or null | Public agency phone when shown. |
imageCount | integer or null | Number of listing images. |
listedAt | string or null | Listing timestamp when published. |
scrapedAt | string | Collection timestamp for the row. |
Illustrative JSON record:
{"id": "189625641","url": "https://www.fotocasa.es/es/comprar/vivienda/madrid-capital/example/189625641/d","operation": "buy","title": "Alcalá, Barrio de Salamanca","price": 1620000,"currency": "EUR","rooms": 3,"bathrooms": 2,"surfaceM2": 130,"pricePerM2": 12461.54,"city": "Madrid Capital","neighborhood": "Goya","zipCode": "28006","latitude": 40.427532,"longitude": -3.6726725,"agencyName": "ESPÍGUL IMMOBILIARIA","agencyPhone": "+34913439848","imageCount": 22,"listedAt": "2026-05-08T15:08:35.443Z","scrapedAt": "2026-09-15T19:00:00.000Z"}
How it works
The Actor resolves a city through Fotocasa's public suggest API, then pages the property-search API until maxItems is reached. Pasted search URLs are resolved through location metadata when HTML SSR payloads are empty behind residential proxies, then the same property-search path fills the dataset. Optional fetchDetails follows listing pages for best-effort energy fields. Every terminal run writes OUTPUT and RUN_SUMMARY with an explicit outcome such as COMPLETE, VALID_EMPTY, or INVALID_INPUT.
Pricing
This Actor uses Apify Pay per event plus standard Apify platform usage (passed through to the caller). Charged events:
- Actor start — $0.00005
- Property scraped — $0.005 per returned search listing
- Property detailed — $0.008 per detail-enriched listing when
fetchDetailsis on
Open the live Pricing tab in the Apify Console for the current source of truth. A run that returns ten search listings charges the start event once and the property-scraped event ten times, plus platform usage for compute and proxy.
Use with AI agents (MCP)
This Actor is available through Apify MCP as apify--fotocasa-all-in-one-scraper. Exact Actor identity: khadinakbar/fotocasa-all-in-one-scraper.
Tool shape: resolve a Spain city or Fotocasa URL, return flat listing rows with price, size, rooms, agency phone, GPS, and URL for CRM or agent reasoning.
Search Fotocasa for homes for sale in Madrid, return price, surfaceM2, rooms, bathrooms, neighborhood, agencyPhone, and url for each listing. Cap at 10 rows and summarize €/m² from pricePerM2.
Agent readback guidance:
- Dataset rows are the primary result store
OUTPUT/RUN_SUMMARYcarry the run outcome and countsurlplusscrapedAtkeep provenance inspectablemaxItemsbounds both yield and PPE charges- Cost maps one returned search row to one
property-scrapedevent; check the Pricing tab for live amounts alongside platform usage
Apify API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("khadinakbar/fotocasa-all-in-one-scraper").call({location: "Barcelona",operation: "rent",maxItems: 10,fetchDetails: false});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Best results and outcome guidance
Prefer Residential Spain proxies (the default). Segment large cities by district or price band instead of one oversized cap. Paste a ready-made Fotocasa search URL when filters are already set on the site. Leave fetchDetails off unless you specifically need detail-page energy attempts. Empty inventory for niche operations such as share can finish as VALID_EMPTY with zero property charges.
Design note
I found that Fotocasa search HTML served through Residential often ships without window.__INITIAL_DATA__, so URL mode that only scraped SSR would look empty even when inventory existed. The durable path is: extract the location slug from the URL, resolve it through the suggest API, then page web.gw.fotocasa.es/v2/propertysearch/search — that is what keeps buy and rent URL runs complete on the private release build.
FAQ
How do I scrape rentals instead of sales?
Set operation to rent, or paste an alquiler search URL into startUrls.
How do I scrape a single listing?
Paste a detail URL ending in /{id}/d into startUrls.
How do I keep agency outreach fields?
Use the default search path; agencyName and agencyPhone are returned when Fotocasa publishes them on the card.
How do I bound cost?
Set maxItems to the number of listings you need; each accepted search row maps to one property-scraped event.
Responsible use
This Actor collects public listing fields from Fotocasa.es. Callers are responsible for complying with Fotocasa terms, Spanish and EU law, and their own data-protection obligations. Keep request volume appropriate to the research scope, and review agency contact fields before any outreach automation.
Fotocasa and Fotocasa.es are trademarks of their respective owners. This independent Actor is not affiliated with, associated with, or endorsed by Fotocasa or Adevinta Spain.