# Spotahome Scraper — Mid-Term Rentals in Europe (`hipersoft/spotahome-scraper`) Actor

Scrape Spotahome furnished rentals (apartments, studios, rooms, residences) in Madrid, Barcelona, London, Paris, Berlin, Lisbon, Milan, Rome, Dublin and more: monthly rent, address, coordinates, size, bedrooms, availability, deposit, fees, description and photos.

- **URL**: https://apify.com/hipersoft/spotahome-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0005 / listing

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Spotahome Scraper: Furnished Mid-Term Rentals in Europe

**Spotahome Scraper** extracts furnished rental listings from **Spotahome**, the European platform for **mid-term and long-term rentals** with verified homes in **Madrid, Barcelona, Valencia, London, Paris, Berlin, Lisbon, Milan, Rome, Dublin, Brussels** and many more cities. Get every **apartment, studio, room and student residence** with the **title, monthly rent (fixed or variable, min and max), currency, street, postal code, coordinates, area in m², bedrooms, bathrooms, capacity, availability date, security deposit, admin fee, contract types, cancellation policy, instant booking, superlister flag, landlord response rate, rating and reviews, full description and photos**. Filter by **property type, rent, bedrooms and availability date**. Export to **CSV, Excel or JSON**. Ideal for **relocation services, student housing, rental market research and proptech**.

### What does Spotahome Scraper do?

- 🌍 **Spotahome cities across Europe**: Spain, UK, France, Germany, Portugal, Italy, Ireland, Belgium…
- 🏠 **Apartments, studios, rooms and residences**.
- 💶 **Monthly rent** (fixed or variable by month), deposit and admin fee.
- 📍 **Street, postal code and coordinates**.
- 📐 **Area, bedrooms, bathrooms and capacity**.
- 📅 **Availability date** and contract types.
- ⚡ **Instant booking**, superlister and cancellation policy.
- ⭐ **Rating, reviews and landlord response rate**.
- 📝 **Full description** and **photos**.
- 🔎 **Filters**: property type, rent, bedrooms, available by date.

### What data can you scrape from Spotahome?

| Field | Description |
|---|---|
| Listing | ID, link, title, property type, shared room, new flag |
| Location | City, street, postal code, neighbourhood, latitude, longitude |
| Rent | Rent per month, price type, min and max, currency |
| Space | Area m², room area, bedrooms, bathrooms, capacity |
| Booking | Available from, deposit, admin fee, contract types, cancellation policy, instant booking |
| Trust | Superlister, landlord response rate, rating, reviews count |
| Content | Description, main image, photos, first published, updated |

### Use cases for rental data

- **Relocation agencies and HR teams**: find furnished housing for employees moving to a new city.
- **Universities and student services**: shortlist rooms and residences near campus.
- **Rental market research**: compare mid-term rents across European cities and neighbourhoods.
- **Proptech and investors**: analyse furnished rental supply, prices and availability.

### How to scrape Spotahome

1. Click **Try for free** to open Spotahome Scraper in Apify Console.
2. Enter **cities** (e.g. Madrid, London, Berlin).
3. Optionally pick **property types**, **rent range**, **minimum bedrooms** or **available by** date.
4. Set **Max listings** and click **Start**.
5. Download the listings as **CSV, Excel or JSON**.

### Input

#### Example input

```json
{
  "cities": ["Barcelona", "Madrid"],
  "propertyTypes": ["studio", "apartment"],
  "priceMax": 2000,
  "bedroomsMin": 1,
  "availableFrom": "2026-11-01",
  "maxItems": 1000
}
```

| Field | Description |
|---|---|
| **Cities** | One search per city. |
| **Property types** | Apartment, studio, room, residence. |
| **Minimum / Maximum rent** | Monthly rent range. |
| **Minimum bedrooms** | At least this many bedrooms. |
| **Available by** | Only listings available on or before this date. |
| **Max listings** | Stop after this many (0 = no limit). |

### Output

#### Listing example

```json
{
  "listingId": 1724456,
  "url": "https://www.spotahome.com/barcelona/for-rent:apartments/1724456",
  "title": "2-bedroom flat for rent in El Raval, Barcelona",
  "propertyType": "apartment",
  "city": "Barcelona",
  "street": "Carrer de Maria Casas Mira",
  "postalCode": "08001",
  "latitude": 41.37885,
  "longitude": 2.16917,
  "pricePerMonth": 1780,
  "currency": "EUR",
  "areaM2": 50,
  "bedrooms": 2,
  "bathrooms": 1,
  "availableFrom": "2026-10-07",
  "depositType": "noSecurityDeposit",
  "adminFee": 0,
  "contractTypes": ["temporal"],
  "cancellationPolicy": "standard",
  "description": "Welcome to this furnished 2-bedroom apartment available for rent in the vibrant El Raval neighborhood…",
  "search": "Barcelona"
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `listingId`, `url`, `title`, `propertyType`, `sharedRoom`, `isNew` | mixed | Listing. |
| `city`, `street`, `postalCode`, `neighborhood`, `latitude`, `longitude` | mixed | Location. |
| `pricePerMonth`, `priceType`, `minPrice`, `maxPrice`, `currency` | mixed | Rent. |
| `areaM2`, `roomAreaM2`, `bedrooms`, `bathrooms`, `capacity` | number | Space. |
| `availableFrom`, `depositType`, `deposit`, `adminFee`, `contractTypes`, `cancellationPolicy`, `instantBooking` | mixed | Booking. |
| `superlister`, `landlordResponseRate`, `rating`, `reviewsCount` | mixed | Trust. |
| `description`, `imageUrl`, `photos`, `firstPublished`, `updatedAt` | mixed | Content. |
| `search`, `scrapedAt` | string | Source info. |

### How much does it cost?

Spotahome Scraper uses **pay-per-listing** pricing: a small fixed price per listing, with automatic discounts on higher Apify plans. See the **Pricing** tab for the exact price.

### More rental data

- [HousingAnywhere Scraper](https://apify.com/hipersoft/housinganywhere-scraper): mid-term rentals in Europe.
- [RE/MAX Portugal Scraper](https://apify.com/hipersoft/remax-pt-scraper): Portuguese property.
- [ShowMojo Scraper](https://apify.com/hipersoft/showmojo-scraper): US rentals.

### FAQ

**Can I scrape all listings in a city?**
Yes. Enter the city and set **Max listings** to 0.

**Why do some rentals have a min and max price?**
Some landlords set different prices per month; `minPrice` and `maxPrice` show the range.

**What formats can I export?**
CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.

**Can I integrate Spotahome Scraper with other apps?**
Spotahome Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JS/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

**Is it legal to scrape Spotahome?**
The scraper only collects publicly listed rentals. You are responsible for using the data in line with Spotahome's terms and GDPR.

### Related Actors

- [HousingAnywhere Scraper](https://apify.com/hipersoft/housinganywhere-scraper)
- [ShowMojo Scraper](https://apify.com/hipersoft/showmojo-scraper)

### Notes

Original clean-room implementation. Returns only public data. Not affiliated with Spotahome.

# Actor input Schema

## `cities` (type: `array`):

Spotahome cities, e.g. Madrid, Barcelona, Valencia, London, Paris, Berlin, Lisbon, Milan, Rome, Dublin, Brussels.

## `propertyTypes` (type: `array`):

Only these property types.

## `priceMin` (type: `integer`):

Lowest monthly rent (local currency).

## `priceMax` (type: `integer`):

Highest monthly rent (local currency).

## `bedroomsMin` (type: `integer`):

At least this many bedrooms.

## `availableFrom` (type: `string`):

Only listings available on or before this date (YYYY-MM-DD).

## `maxItems` (type: `integer`):

Stop after this many listings. 0 means no limit.

## `proxyConfiguration` (type: `object`):

Not required for normal use.

## Actor input object example

```json
{
  "cities": [
    "Madrid"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "cities": [
        "Madrid"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/spotahome-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "cities": ["Madrid"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/spotahome-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "cities": [
    "Madrid"
  ],
  "maxItems": 50
}' |
apify call hipersoft/spotahome-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/spotahome-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vbOIT4zlTdMIGpLWC/builds/3OM1wQHWKCecEqdZG/openapi.json
