Fotocasa Property Listings Extractor
Pricing
from $2.99 / 1,000 results
Fotocasa Property Listings Extractor
Scrape Fotocasa property listings from any search URL and get prices, rooms, size, location, agency contact and images as structured data you can export or pull into your own tools.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
Kawsar
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape property listings from Fotocasa.es, one of Spain's largest real estate portals, straight from any search results page. Apply your filters on Fotocasa, paste the URL, and get every listing back as clean, structured data you can export or feed into your own tools.
No browser to babysit, no copy and paste. Give the actor a search URL and it returns each property already parsed into fields: prices, sizes, addresses, agency contacts, and image galleries.
Table of contents
- What it does
- Key features
- Use cases
- Input
- How to get a Fotocasa search URL
- Output
- Output fields
- How to run it
- Using the data
- Performance and limits
- FAQ
- Disclaimer
What it does
Fotocasa shows listings across sales, rentals, and new construction. This actor reads the same data the results page displays and turns it into rows you can work with. Point it at a search for flats in Madrid under 300,000 euros, houses for rent in Valencia, or new builds in Barcelona, and it collects each property on the page: the asking price, price per square meter, room and bathroom counts, floor, surface area, the full address down to the neighborhood, map coordinates, the listing agency and its phone number, how long the listing has been live, the description, and the full image gallery.
It walks through as many result pages as you ask for, handles several searches in one run, and removes duplicate listings automatically so you get a clean dataset.
Key features
- Works from any search URL. Filter on Fotocasa the way you normally would, then paste the URL. Whatever the search returns is what you get.
- Full listing detail. Price, price per square meter, rooms, bathrooms, surface, floor, address, coordinates, agency contact, publish date, description, and every image.
- Multi-page crawling. Set how many result pages to walk through per search.
- Batch several searches. Pass a list of URLs and collect them all in one run.
- Automatic de-duplication. Listings that repeat across pages are dropped by listing ID.
- Resilient runs. If one page fails to load, the run keeps going with the rest.
- Clean exports. Download as JSON, CSV, Excel, or XML, or pull straight from the Apify API.
Use cases
- Market research. Track asking prices and price per square meter across a city or neighborhood over time.
- Investment analysis. Build a dataset of active listings to spot undervalued properties or yield opportunities.
- Competitor and agency monitoring. See what agencies are listing, at what prices, and how long stock stays on the market.
- Lead generation. Collect agency names and phone numbers tied to specific areas or property types.
- Valuation and comparables. Gather comparable listings to support pricing decisions.
- Data pipelines. Feed listings into a CRM, spreadsheet, database, or dashboard on a schedule.
Input
The actor takes a few simple fields. Only a search URL is required to start.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchUrl | string | Yes | - | A Fotocasa search results page URL. Apply filters on Fotocasa first, then paste the URL. |
searchUrls | array | No | [] | Optional list of extra search URLs to run in the same job. |
maxPages | integer | No | 1 | How many result pages to walk through per search URL. Each page holds about 30 listings. |
maxItems | integer | No | 100 | Cap on total listings collected per run, across all search URLs. Max 1000. |
requestTimeoutSecs | integer | No | 30 | Per-request timeout in seconds. |
Example input
{"searchUrl": "https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l","searchUrls": ["https://www.fotocasa.es/es/alquiler/viviendas/valencia-capital/todas-las-zonas/l"],"maxPages": 3,"maxItems": 200,"requestTimeoutSecs": 30}
How to get a Fotocasa search URL
- Open fotocasa.es in your browser.
- Search a location and choose buy or rent.
- Apply the filters you want: price range, number of rooms, property type, features.
- Copy the URL from the address bar once the results load.
- Paste it into the
searchUrlfield.
A few real examples:
- Flats for sale in Madrid:
https://www.fotocasa.es/es/comprar/viviendas/madrid-capital/todas-las-zonas/l - Homes for rent in Barcelona:
https://www.fotocasa.es/es/alquiler/viviendas/barcelona-capital/todas-las-zonas/l - Filtered search with a keyword:
https://www.fotocasa.es/es/comprar/viviendas/espana/todas-las-zonas/l?text=la
The page number lives in the URL path (/l for the first page, /l/2 for the second, and so on). You do not need to add it yourself. Set maxPages and the actor handles paging for you.
Output
Every listing becomes one dataset record. Here is a real example of a single item:
{"id": 190410253,"transactionType": "buy","propertyType": "Flat","propertySubtype": "Flat","price": "129.900 €","rawPrice": 129900,"pricePerSqm": 2095,"reducedPrice": null,"rooms": 3,"bathrooms": 1,"surface": 62,"floor": 6,"location": "Viñuela - Rescatado","neighborhood": "Viñuela - Rescatado","district": "Levante","municipality": "Córdoba","city": "Córdoba","province": "Córdoba","zipCode": "14007","country": "España","latitude": 37.889176,"longitude": -4.763464,"agencyName": "INMOSI","clientType": "professional","phone": "+34623720012","isNew": false,"isNewConstruction": false,"publishedDaysAgo": 14,"propertyDescription": "Piso amueblado en una zona con todo tipo de servicios...","primaryImage": "https://static.fotocasa.es/images/ads/c499cb86-...?rule=original","images": ["https://static.fotocasa.es/images/ads/c499cb86-...?rule=original","https://static.fotocasa.es/images/ads/ab87447c-...?rule=original"],"imageCount": 15,"listingUrl": "https://www.fotocasa.es/es/comprar/vivienda/cordoba-capital/.../190410253/d","sourceUrl": "https://www.fotocasa.es/es/comprar/viviendas/cordoba-capital/todas-las-zonas/l","scrapedAt": "2026-08-20T10:00:00+00:00"}
Output fields
| Field | Type | Description |
|---|---|---|
id | integer | Fotocasa listing ID, unique per property. |
transactionType | string | buy or rent. |
propertyType | string | Building type, for example Flat or House. |
propertySubtype | string | More specific subtype when available. |
price | string | Price as shown on the site, for example 129.900 €. |
rawPrice | integer | Numeric price with no formatting. |
pricePerSqm | integer | Price per square meter, calculated from price and surface. |
reducedPrice | number | Previous price if the listing shows a drop, otherwise null. |
rooms | integer | Number of rooms. |
bathrooms | integer | Number of bathrooms. |
surface | integer | Living area in square meters. |
floor | integer | Floor number. |
location | string | Short location label shown on the card. |
neighborhood | string | Neighborhood name. |
district | string | District within the municipality. |
municipality | string | Municipality. |
city | string | City. |
province | string | Province. |
zipCode | string | Postal code. |
country | string | Country. |
latitude | number | Map latitude. |
longitude | number | Map longitude. |
agencyName | string | Listing agency or advertiser name. |
clientType | string | Advertiser type, for example professional or private. |
phone | string | Contact phone number when published. |
isNew | boolean | Whether the listing is marked as new. |
isNewConstruction | boolean | Whether it is a new construction property. |
publishedDaysAgo | integer | How many days ago the listing was published. |
propertyDescription | string | Full listing description text. |
primaryImage | string | URL of the main image. |
images | array | URLs of all listing images. |
imageCount | integer | Number of images. |
listingUrl | string | Absolute URL of the full listing page. |
sourceUrl | string | The search page URL this listing came from. |
scrapedAt | string | ISO 8601 timestamp of when the record was collected. |
How to run it
On the Apify platform
- Open the actor in the Apify Console.
- Paste a Fotocasa search URL into
searchUrl. - Set
maxPagesandmaxItemsto control how much you collect. - Click Start.
- When the run finishes, open the Dataset tab to preview or export the results.
Using the data
- Export formats. From the run's Storage tab you can download the dataset as JSON, CSV, Excel, or XML.
- Scheduling. Use Apify Schedules to run the actor daily or weekly and build a price history.
- Integrations. Push results into Google Sheets, Airtable, a database, or a webhook using Apify integrations.
- Analysis. Load the CSV into a spreadsheet or a pandas DataFrame to chart prices, filter by neighborhood, or compute averages.
Performance and limits
- Each result page carries roughly 30 listings. Raise
maxPagesto collect more from a single search. maxItemscaps the total per run at 1000. Split larger jobs across several runs or several search URLs.- Duplicate listings across pages are removed by listing ID, so counts reflect unique properties.
- Very deep searches take longer. Start with a small
maxPagesto confirm the output looks right, then scale up.
FAQ
Which countries does it cover? Fotocasa lists properties in Spain, so the data covers the Spanish market.
Can I scrape both sales and rentals?
Yes. Use a comprar (buy) URL for sales and an alquiler (rent) URL for rentals. The transactionType field tells you which is which.
Does it return individual property pages?
It reads listing data from search result pages, which already include the core details, images, and the link to each full listing (listingUrl).
How many listings can I get in one run?
Up to 1000 per run via maxItems. For more, run several jobs or pass multiple search URLs.
Why are some fields empty? Not every listing publishes every detail. Fields like phone, reduced price, or floor appear only when the advertiser provides them.
Can I run it on a schedule? Yes. Apify Schedules can trigger the actor at any interval, which is ideal for tracking price changes over time.
Disclaimer
Use this actor responsibly and in line with Fotocasa's terms of service and applicable laws. It collects publicly visible listing information for research and analysis. You are responsible for how you use the data you collect.