Fotocasa Property Listings Extractor avatar

Fotocasa Property Listings Extractor

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Fotocasa Property Listings Extractor

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

Kawsar

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

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

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.

FieldTypeRequiredDefaultDescription
searchUrlstringYes-A Fotocasa search results page URL. Apply filters on Fotocasa first, then paste the URL.
searchUrlsarrayNo[]Optional list of extra search URLs to run in the same job.
maxPagesintegerNo1How many result pages to walk through per search URL. Each page holds about 30 listings.
maxItemsintegerNo100Cap on total listings collected per run, across all search URLs. Max 1000.
requestTimeoutSecsintegerNo30Per-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

  1. Open fotocasa.es in your browser.
  2. Search a location and choose buy or rent.
  3. Apply the filters you want: price range, number of rooms, property type, features.
  4. Copy the URL from the address bar once the results load.
  5. Paste it into the searchUrl field.

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

FieldTypeDescription
idintegerFotocasa listing ID, unique per property.
transactionTypestringbuy or rent.
propertyTypestringBuilding type, for example Flat or House.
propertySubtypestringMore specific subtype when available.
pricestringPrice as shown on the site, for example 129.900 €.
rawPriceintegerNumeric price with no formatting.
pricePerSqmintegerPrice per square meter, calculated from price and surface.
reducedPricenumberPrevious price if the listing shows a drop, otherwise null.
roomsintegerNumber of rooms.
bathroomsintegerNumber of bathrooms.
surfaceintegerLiving area in square meters.
floorintegerFloor number.
locationstringShort location label shown on the card.
neighborhoodstringNeighborhood name.
districtstringDistrict within the municipality.
municipalitystringMunicipality.
citystringCity.
provincestringProvince.
zipCodestringPostal code.
countrystringCountry.
latitudenumberMap latitude.
longitudenumberMap longitude.
agencyNamestringListing agency or advertiser name.
clientTypestringAdvertiser type, for example professional or private.
phonestringContact phone number when published.
isNewbooleanWhether the listing is marked as new.
isNewConstructionbooleanWhether it is a new construction property.
publishedDaysAgointegerHow many days ago the listing was published.
propertyDescriptionstringFull listing description text.
primaryImagestringURL of the main image.
imagesarrayURLs of all listing images.
imageCountintegerNumber of images.
listingUrlstringAbsolute URL of the full listing page.
sourceUrlstringThe search page URL this listing came from.
scrapedAtstringISO 8601 timestamp of when the record was collected.

How to run it

On the Apify platform

  1. Open the actor in the Apify Console.
  2. Paste a Fotocasa search URL into searchUrl.
  3. Set maxPages and maxItems to control how much you collect.
  4. Click Start.
  5. 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 maxPages to collect more from a single search.
  • maxItems caps 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 maxPages to 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.