Fotocasa All-in-One Scraper — Spain Buy & Rent Listings avatar

Fotocasa All-in-One Scraper — Spain Buy & Rent Listings

Pricing

from $5.00 / 1,000 property scrapeds

Go to Apify Store
Fotocasa All-in-One Scraper — Spain Buy & Rent Listings

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

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 comprar searches, with price, m², rooms, and agency contact fields
  • Rental research from alquiler searches, 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.

FieldTypePurpose
startUrlsarrayFotocasa search (…/l) or detail (…/{id}/d) URLs. Search URLs are paginated until maxItems.
locationstringSpanish city, province, or area when startUrls is empty (for example Madrid or Barcelona).
locationTypestringOptional suggestion level when several matches exist (municipality vs province).
operationstringbuy, rent, share, rentBuyOption, or transfer for location mode.
propertyTypestringCategory such as home, office, garages, or land.
minPrice / maxPriceintegerEUR filters (monthly rent for rent mode).
minSize / maxSizeintegerFloor-area filters in m².
fetchDetailsbooleanOptional detail-page enrich for energy-certificate attempts when present.
maxItemsintegerCap on returned rows and property event charges.
proxyConfigurationobjectPrefer 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.

FieldTypeMeaning
idstringFotocasa property identifier.
urlstringCanonical listing URL.
operationstringBuy, rent, or related operation label.
titlestring or nullPublic listing title.
pricenumber or nullAsking price in EUR.
currencystringUsually EUR.
roomsinteger or nullRoom count when published.
bathroomsinteger or nullBathroom count when published.
surfaceM2number or nullFloor area in square metres.
pricePerM2number or nullDerived €/m² when price and size exist.
floornumber or nullFloor level when published.
citystring or nullCity or municipality label.
neighborhoodstring or nullNeighborhood label.
zipCodestring or nullPostal code when published.
latitude / longitudenumber or nullGPS coordinates when published.
agencyNamestring or nullAgency or advertiser name.
agencyPhonestring or nullPublic agency phone when shown.
imageCountinteger or nullNumber of listing images.
listedAtstring or nullListing timestamp when published.
scrapedAtstringCollection 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 fetchDetails is 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_SUMMARY carry the run outcome and counts
  • url plus scrapedAt keep provenance inspectable
  • maxItems bounds both yield and PPE charges
  • Cost maps one returned search row to one property-scraped event; 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.