# Uniplaces Scraper \[$2/1K💰] | Student Housing (`ahmed_jasarevic/uniplaces-scraper`) Actor

Scrape Uniplaces student accommodation by city: rent, bills, deposit, minimum stay, availability, address, amenities, photos, provider stats and reviews. $2 per 1,000 listings.

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

## Pricing

from $1.90 / 1,000 results

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

## Uniplaces Scraper – Student Accommodation Data

Scrape public **Uniplaces** student-accommodation listings — rooms, studios and apartments — by city. Get monthly rent, bills, deposit, minimum stay, availability, address, neighborhood, amenities, photos, provider details and reviews. **$2 per 1,000 listings.**

### Student Accommodation Across Europe

Uniplaces lists student rooms and homes in Lisbon, Barcelona, Madrid, Berlin, Paris, Milan, London, Porto, Prague, Amsterdam and other European cities. This Actor turns public city and listing pages into structured records for student-housing operators, relocation agencies, universities, landlords and rental-market researchers.

- **Housing supply** — map rooms, studios and apartments by city.
- **Price comparison** — compare rent, bills, deposit and minimum stay.
- **Relocation research** — find available homes near universities and city centers.
- **Provider research** — review verification flags and response statistics.
- **Market monitoring** — schedule runs to track new listings and availability.

### How It Works

![How the Uniplaces Scraper works: from a city or listing URL to structured student-accommodation records.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-uniplaces-scraper.webp)

The Actor reads public Uniplaces city and listing pages and merges search-card and detail fields into one dataset row. Choose city slugs or direct listing URLs, then set per-city and total limits.

- One row per listing.
- Search-card data is combined with detail-page fields.
- City and listing URLs are supported.
- Fields that Uniplaces does not publish stay `null` or empty.

### Search By City Or Listing URL

Use `citySlugs` for city-wide collection or `startUrls` for exact pages:

- **Cities** — Lisbon, Barcelona, Madrid, Berlin, Paris, Milan, London, Porto, Prague, Amsterdam and more.
- **Search pages** — pass a city accommodation page.
- **Listing pages** — pass individual room, studio or apartment URLs.
- **Limits** — cap results per city, in total, and by result pages per city.

### Rent, Bills, Deposit And Availability

Each record includes the offer ID, listing URL, name, description, monthly rent, old price, deposit type and amount, admin fee, bills included status and breakdown, bills cap, minimum stay, maximum guests, cancellation policy, contract type, instant booking, exclusivity, availability dates, address, neighborhood, city, country, coordinates, property type, accommodation type, unit type, room type, bedroom and bathroom counts, area, floor, amenities, rules, verification, video, photos, provider statistics and review data.

### Input – Configure A Uniplaces Run

| Field | Type | Default | Notes |
|---|---|---|---|
| `citySlugs` | array | `["lisbon", "barcelona"]` | City slugs from Uniplaces city URLs |
| `startUrls` | array | `[]` | Optional city search or individual listing URLs |
| `maxListingsPerCity` | integer | `25` | Maximum listings extracted per city |
| `maxListingsTotal` | integer | `100` | Overall cap across cities and start URLs |
| `maxPagesPerCity` | integer | `20` | Maximum result pages per city |
| `includeDetails` | boolean | `true` | Adds deposit, minimum stay, exact address, amenities, provider stats and photos |
| `proxy` | object | Apify Proxy off | Standard Apify Proxy configuration for large runs |

### Output – Student Accommodation Fields

Each dataset item can contain:

- `offerId`, `listingUrl`, `name`, `description`
- `monthlyRent`, `currency`, `oldPrice`
- `depositType`, `depositAmount`, `adminFee`
- `billsIncluded`, `billsIncludedBreakdown`, `billsCap`
- `minimumStayNights`, `minimumStayMonths`, `maxGuests`
- `cancellationPolicy`, `contractType`, `instantBooking`, `exclusive`
- `availableFrom`, `availabilityLastUpdatedAt`, `availablePeriods`
- `address`, `neighbourhood`, `city`, `country`, `coordinates`
- `propertyId`, `propertyType`, `accommodationType`, `unitType`, `roomType`
- `bedrooms`, `bathrooms`, `areaSqm`, `unitAreaSqm`, `floorNumber`
- `amenities`, `roomAmenities`, `rules`, `verified`, `videoUrl`, `photos`
- `provider`
- `reviewsAverage`, `reviewsCount`
- `listedAt`, `sponsored`, `insured`, `soldOut`, `scrapedAt`
- `detailUnavailable` on fallback rows

### Example Input – Lisbon And Barcelona

```json
{
  "citySlugs": ["lisbon", "barcelona"],
  "startUrls": [],
  "maxListingsPerCity": 25,
  "maxListingsTotal": 100,
  "includeDetails": true,
  "proxy": { "useApifyProxy": false }
}
```

### Example Output – Lisbon Room

```json
{
  "offerId": "a1b2c3d4-5e6f-7890-abcd-ef1234567890",
  "listingUrl": "https://www.uniplaces.com/accommodation/lisbon/a1b2c3d4-5e6f-7890-abcd-ef1234567890",
  "name": "Private room in a shared apartment",
  "monthlyRent": 450,
  "currency": "EUR",
  "depositAmount": 450,
  "depositType": "equal-to-first-payment",
  "billsIncluded": true,
  "billsIncludedBreakdown": ["water", "electricity", "internet"],
  "minimumStayNights": 90,
  "availableFrom": "2026-11-01",
  "neighbourhood": "Arroios",
  "city": "Lisbon",
  "country": "Portugal",
  "propertyType": "Apartment",
  "roomType": "Private room",
  "bedrooms": 3,
  "bathrooms": 1,
  "areaSqm": 14,
  "amenities": ["Wi-Fi", "Furnished", "Washing machine"],
  "verified": true,
  "reviewsAverage": 4.5,
  "reviewsCount": 18,
  "scrapedAt": "2026-10-31T12:00:00.000Z"
}
```

### Export Student Accommodation Data To JSON, CSV Or Excel And Schedule Runs

Download results as JSON, CSV, Excel or XML from the run page or through the Apify API. Connect runs to Google Sheets, Make, Zapier or webhooks, or schedule weekly refreshes to track new listings, rent changes and availability.

### Related Actors

- [Google Maps Scraper](https://apify.com/apify/google-maps-scraper) — add neighborhood context and nearby amenities
- [Google Search Scraper](https://apify.com/ahmed_jasarevic/google-search-scraper) — research universities and student cities
- [Contact Details Scraper](https://apify.com/ahmed_jasarevic/contact-details-scraper) — enrich provider and agency websites
- [Website Content Crawler](https://apify.com/apify/website-content-crawler) — collect public university housing information

### FAQ

#### What is Uniplaces?

Uniplaces is a student-accommodation marketplace for rooms, studios and apartments in European cities.

#### Do I need a Uniplaces account?

No. The Actor reads public listings and never asks for your Uniplaces credentials.

#### Why is the provider name missing?

Uniplaces does not expose the provider’s public display name on every listing. The Actor returns the provider ID, verification flags and performance statistics instead.

#### Why is `depositAmount` empty?

Some listings use a deposit rule instead of a fixed amount, such as “equal to first payment.” In that case `depositAmount` is `null` and `depositType` explains the rule.

#### Why are ratings sometimes zero?

Ratings are sparse on Uniplaces. The Actor returns the published value and does not invent a score when no reviews exist.

#### What does `includeDetails` change?

With `includeDetails: true`, each listing page adds deposit, minimum stay, exact address, amenities, provider statistics and the full photo set. Set it to `false` for a faster search-card-only run.

#### How much does it cost?

FREE and BRONZE users pay **$0.002 per listing** ($2 per 1,000), SILVER pays **$0.00195** and GOLD+ pays **$0.0019**, plus a small Actor Start event.

#### Can I scrape a single listing?

Yes. Pass its listing URL in `startUrls`.

### For AI Agents & LLM Apps

Returns one row per Uniplaces listing with rent, bills, deposit, availability, location, amenities, provider details and reviews.

Minimal working input:

```json
{ "citySlugs": ["lisbon"], "maxListingsTotal": 24, "includeDetails": true }
```

Output fields: `offerId, listingUrl, name, description, monthlyRent, currency, oldPrice, depositType, depositAmount, adminFee, billsIncluded, billsIncludedBreakdown, billsCap, minimumStayNights, minimumStayMonths, maxGuests, cancellationPolicy, contractType, instantBooking, exclusive, availableFrom, availabilityLastUpdatedAt, availablePeriods, address, neighbourhood, city, country, coordinates, propertyId, propertyType, accommodationType, unitType, roomType, bedrooms, bathrooms, areaSqm, unitAreaSqm, floorNumber, amenities, roomAmenities, rules, verified, videoUrl, photos, provider, reviewsAverage, reviewsCount, listedAt, sponsored, insured, soldOut, scrapedAt`.

Behaviors an agent should know:

- `citySlugs` accepts Uniplaces city slugs from city URLs.
- `includeDetails: true` adds the deep listing fields; `false` returns search-card data only.
- `maxListingsPerCity` and `maxListingsTotal` are independent caps.
- `depositAmount` can be `null` when the listing uses a deposit rule instead of a fixed amount.
- `reviewsAverage` is often `0` because reviews are sparse.
- Free users get a 10-listing preview.

Billing: **$0.002 per listing** on FREE/BRONZE ($2 per 1,000), $0.00195 on SILVER and $0.0019 on GOLD+, plus a small Actor Start event.

### Legal & Compliance Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Uniplaces.

It collects publicly available accommodation listings — no login and no private account. Listing details and prices are provider-reported and may change. Users are responsible for complying with Uniplaces' terms and applicable housing, privacy and consumer law. Nothing here is legal or financial advice.

### SEO Keywords

uniplaces scraper, student accommodation europe, uniplaces listings, lisbon student housing, barcelona student accommodation, student rooms europe, student housing data, uniplaces api, student accommodation api, monthly rent data, bills included rooms, student flats, university housing data, europe rental market, student housing export, accommodation listings, room rental europe, student housing research

# Actor input Schema

## `citySlugs` (type: `array`):

Uniplaces city slugs to scrape, e.g. lisbon, barcelona, madrid, berlin, paris, milan, london, porto, prague, amsterdam. The slug is the last part of a city URL: https://www.uniplaces.com/accommodation/<slug>.

## `startUrls` (type: `array`):

Optional. City search pages (e.g. https://www.uniplaces.com/accommodation/lisbon) or individual listing pages (e.g. https://www.uniplaces.com/accommodation/lisbon/58669). Combine with city slugs or use on their own.

## `maxListingsPerCity` (type: `integer`):

Maximum number of listings to extract for each city.

## `maxListingsTotal` (type: `integer`):

Overall cap across all cities and start URLs. Protects your compute budget.

## `maxPagesPerCity` (type: `integer`):

How many result pages (48 listings each) may be requested per city before the actor stops paginating.

## `includeDetails` (type: `boolean`):

If true (recommended), each listing page is fetched for deposit, minimum stay, exact address, amenities, provider stats and photo set. If false, only search-page data is returned (faster, fewer fields).

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "citySlugs": [
    "lisbon",
    "barcelona"
  ],
  "startUrls": [],
  "maxListingsPerCity": 25,
  "maxListingsTotal": 100,
  "maxPagesPerCity": 20,
  "includeDetails": true,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "citySlugs": [
        "lisbon",
        "barcelona"
    ],
    "startUrls": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/uniplaces-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 = {
    "citySlugs": [
        "lisbon",
        "barcelona",
    ],
    "startUrls": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/uniplaces-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 '{
  "citySlugs": [
    "lisbon",
    "barcelona"
  ],
  "startUrls": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/uniplaces-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/uniplaces-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/siH1oFag3giHPZIVA/builds/GO66wwCj8Nt43umr2/openapi.json
