Fotocasa Scraper $0.95/1K — Spain Real Estate Data & Agencies avatar

Fotocasa Scraper $0.95/1K — Spain Real Estate Data & Agencies

Pricing

from $0.95 / 1,000 property listings

Go to Apify Store
Fotocasa Scraper $0.95/1K — Spain Real Estate Data & Agencies

Fotocasa Scraper $0.95/1K — Spain Real Estate Data & Agencies

Scrape Fotocasa.es property listings for sale and rent across Spain: price, surface, GPS, the full 8-level location hierarchy with IDs, photos tagged by room, and the listing agency with its phone. Median 45 of 78 fields filled. Energy certificates and street via detail pages. No login.

Pricing

from $0.95 / 1,000 property listings

Rating

0.0

(0)

Developer

Oswaldo Carabano

Oswaldo Carabano

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Fotocasa Scraper — Spain real estate data, agencies and geo

Scrape property listings from Fotocasa.es, Spain's second-largest real estate portal (Adevinta). Homes, commercial units, land, garages and storage rooms, for sale and for rent, anywhere in Spain.

Every row carries the price, the surface, the full eight-level location hierarchy with numeric IDs, the GPS point, the listing agency with its phone, and every photo tagged by the room it shows.

No login. No session cookies. No browser. $0.95 per 1,000 listings.


What you can use this for

If you are…You want
Building a Spain real estate dataset or market modelthe nationwide listing feed, with price, surface and GPS on every row (n = 3,184)
Doing real estate lead generationthe agency directory: name, business phone, logo and profile URL
Running a property data API inside your productstructured JSON over the Apify API, with the age of every row declared
Tracking housing market data or price movementspublished_at, price_reduced and a run you can schedule daily
Valuing or comparing propertiesenergy certificate, construction type, plot surface and street from detail pages
Researching a specific market — Madrid, Barcelona, Costa del Sol, Valenciaany location in Fotocasa's own tree, from country down to neighbourhood

What actually arrives in a row

Most Fotocasa scrapers give you a price, a size and a URL. This one gives you a median of 45 populated fields out of 78 — and 58 of 78 when you turn on detail pages.

Every percentage on this page was measured against the live site on 18 Sep 2026, and every one of them carries its sample size. We do not list a field whose fill rate we have not measured.

Always there — 100% (n = 3,184 listings across 16 search profiles)

id · url · price · currency · operation · property_type · published_at · description · latitude · longitude · postal_code · country · region · province · municipality and their numeric IDs · photo_count · advertiser_type_id

The location hierarchy is the part nobody else ships whole. Eight levels, each with its name and its fotocasa ID, so you can group and join across runs without matching strings.

Usually there

FieldFill raten
surface_m299.9%3,184
agency_phone (professional advertisers)96.4%1,911
district90.2%3,184
bathrooms73.5%3,184
rooms67.9%3,184
neighborhood64.9%3,184
conservation_state_id50.5%3,184
has_air_conditioning49.4%3,184
floor45.7%3,184
has_elevator44.0%3,184
has_heating39.9%3,184
price_reduced28.3%3,184
has_terrace29.0%3,184
has_balcony13.9%3,184
has_garden7.1%3,184
has_swimming_pool6.4%3,184
has_parking3.7%3,184

rent_periodicity_id is 98.9% on rentals and 0% on sales (n = 784 / 2,400), because it only exists on a rental. Quoting a single blended number for it would be meaningless, so we do not.

Photos tagged by room

room_types_photographed tells you which rooms a listing actually photographed — kitchen, bathroom, terrace, garden, bedroom, living room, exterior. 81.5% of listings have at least one tagged photo (n = 840). No competing actor exposes this.

What we do NOT promise

Four fields come back empty every single time, so they are not in the schema and you will never see them: storage room, furnished flag, photo-report flag and external contact. otherFeatures was null in 0 of 3,184 listings, so it is gone too.


The agency dataset — a second product, at zero extra cost

Turn on includeAgencies and you get a separate agencies dataset: name, phone, logo and profile URL of every professional agency found. There are roughly 7 distinct agencies per 30 listings, and building it costs zero extra requests — the data is already in the search response.

No competing actor in this niche ships an agency dataset.


Detail pages — read this before turning them on

scrapeDetails adds 78 fields that only exist on the listing page:

FieldFill raten
created_at, construction_type, ground_surface_m2100%220
energy_certificate_value, environment_impact_value100%220
energy_certificate_rating, environment_impact_rating99.1%220
extra_features98.6%220
quality_rate83.6%220
street_name72.0%150
agency_web62.7%220
street_number22.0%150

Two honest caveats

1. Street number only when fotocasa says the address is exact. We measured three address visibility modes (n = 150): exact 22.0%, and two blurred modes at 50.0% and 28.0%. We ship street_name whenever fotocasa publishes it, street_number only in exact mode, and address_is_exact plus address_visibility_mode on every row so you can filter by precision instead of trusting us.

2. A detail page costs 65× a listing. 614 KB against 9.4 KB. That is why detail pages are off by default and billed as a separate event: switching them on by default would multiply your bill by 65 without asking.


Privacy: whose phone you get, and whose you don't

fotocasa has two kinds of advertiser, and this actor treats them differently on purpose.

Measured on n = 2,164 listings, sampled in rural provinces where private advertisers concentrate.

Professional agencyPrivate individual
Share of listings88.3%11.7%
Phone present in the source96.4%0.0%
What we shipname, phone, logo, profilecontact fields redacted

An agency phone is professional contact data and is part of what you are buying. A private individual's is not, and we do not ship it — including the phone numbers typed inside the free-text description, which 2.4% of private listings contain (n = 124). Those we strip.

If an advertiser type appears that we have not verified, the actor redacts first and asks questions later, flags the row via is_professional_advertiser: false, and does not charge for it.


Data freshness

Every row carries from_cache, fetched_at and data_age_hours. You always know how old your data is. maxCacheAgeDays: 0 forces a fresh fetch.


How the crawl works, and why there is a cap

The search API stops returning new results after page 392 — and then quietly returns the same 30 listings again with HTTP 200 forever. So this actor never trusts a status code: it detects the end of pagination by duplicate IDs, and it never charges you for a duplicate.

To go past 11,760 listings per query it splits by fotocasa's own location tree, using the child counters fotocasa returns in every response. We verified the split is exactly disjoint in 17 of 18 partitions across 6 provinces and 3 levels — and the actor detects the 18th case, where a node returns siblings instead of children, and paginates instead of descending.

There is no download-everything mode. maxItems is a hard cap. The Spanish sale inventory alone is about 470,000 listings, and extracting a substantial part of a database is exactly what the EU sui generis database right protects against.


Input

FieldDefaultNotes
locationall of Spainfotocasa combinedLocationIds
transactionTypesalesale, rent
propertyTypehomehome, commercial, land, garage, storage
sortByrelevancerelevance, price, newest, surface, rooms
minPrice / maxPrice / minRooms / minSurface / maxSurface
maxItems1000hard cap
scrapeDetailsfalse65× the bandwidth, separate event
includeAgenciesfalsezero extra requests
maxCacheAgeDays70 = always fresh

Every option here was verified to change the result against the live API. fotocasa silently ignores parameters it does not recognise and returns the entire catalogue with HTTP 200 — we tested five plausible-looking filters that do exactly that, and none of them are in this form. A filter that does not filter is worse than no filter, because you cannot tell.


Pricing

EventPrice
Actor start$0.00001
Property listing$0.00095
Agency$0.002
Detail page$0.006

You are never charged for an error row, a duplicate, a listing without a price, or a row whose advertiser contact had to be redacted.


Support and data removal

Questions, bugs and feature requests: open an issue on the actor page. We answer within 48 hours.

Data removal: if a listing concerns you and you want it out of our cache, write to privacy@actorstack.dev. We keep a suppression list, and removal does not require a redeploy.


Frequently asked questions

What data can I scrape from Fotocasa? Price, surface in m², rooms, bathrooms, floor, property type and operation (sale/rent), the GPS coordinates, the postcode, the full eight-level location hierarchy with Fotocasa's own numeric IDs, the publication date, the description, every photo URL tagged by room, and the listing agency with its name, phone, logo and profile URL. A median of 45 fields out of 78 come back populated (n = 3,184).

Can I get real estate agency phone numbers from Fotocasa? Yes, for professional agencies: the phone came back on 96.4% of the 1,911 professional advertisers measured. Turn on includeAgencies for a separate deduplicated agency dataset. Private individuals are excluded — Fotocasa does not publish their phone at all (0% of 253 measured) and this actor redacts their contact details, including phone numbers typed inside the description text.

Does it need a Fotocasa account or login? No. There is no account, no session cookie and no browser. The actor reads the same public search endpoint the website itself calls.

How much does it cost? $0.00095 per listing, which is $0.95 per 1,000. Agencies are $0.002 each and detail pages $0.006. You are never charged for an error row, a duplicate, a listing without a price, or a row whose advertiser contact had to be redacted.

How many listings are there on Fotocasa? About 470,000 homes for sale in Spain at the time of measuring, plus 52,020 rentals, 78,064 land plots, 39,178 commercial units, 8,047 storage rooms and 2,200 garages. maxItems caps every run — there is no bulk-mirror mode.

Can I scrape a specific city or province? Yes. Pass any combinedLocationIds from Fotocasa's own location tree: Spain, a province like Barcelona or Málaga, a city like Madrid, or a single neighbourhood. The actor walks the tree automatically when a location holds more listings than one query can return.

Can I get the street address? Partly, and we are precise about it. The street name comes back on 72% of detail pages, and the street number only when Fotocasa marks the address as exact — 22% of detail pages (n = 150). Every row carries address_is_exact and address_visibility_mode so you can filter by precision rather than trust us.

Does it get energy performance certificates? Yes, from detail pages: the efficiency rating letter on 99.1% and its kWh/m² value on 100% (n = 220), plus the CO₂ emissions rating and value.

How fresh is the data? Every row declares from_cache, fetched_at and data_age_hours. Set maxCacheAgeDays: 0 to always fetch fresh.

How does it compare to other Fotocasa scrapers? The difference is fields per row and honesty about them: this actor publishes the measured fill rate of every field with its sample size, ships the location hierarchy whole, tags photos by room, and builds an agency dataset that no competing actor offers. It is also slightly cheaper than the market floor.


Disclaimer

This actor extracts publicly available listing data — no login, no session cookies, no account. You are responsible for how you use the data, including compliance with the GDPR and with fotocasa's terms where they apply to you. It is not affiliated with or endorsed by fotocasa or Adevinta.