Student & Mid-Term Rental Scraper for Uniplaces avatar

Student & Mid-Term Rental Scraper for Uniplaces

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Student & Mid-Term Rental Scraper for Uniplaces

Student & Mid-Term Rental Scraper for Uniplaces

Scrape Uniplaces student & mid-term rental listings: title, price, property type, neighbourhood, availability, coordinates, reviews and provider (verification, response rate). For rental market research and lead-gen. Independent tool, not affiliated with Uniplaces.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Uniplaces Scraper — Student & Mid-Term Rental Listings, Prices & Provider Leads

This Uniplaces scraper extracts student and mid-term rental listings from Uniplaces at scale — title, price & currency, property type, neighbourhood, availability, map coordinates, reviews, and the provider's verification and response statistics. Enter city names or Uniplaces URLs and scrape Uniplaces into clean, structured data in seconds — no login, no coding.

Export to JSON, CSV, Excel, or API.

Built for rental-market analysts, student-housing operators, relocation and study-abroad services, property investors, data teams, and lead-gen agencies who need fresh, structured Uniplaces data instead of copy-pasting from the website.


🔎 Why scrape Uniplaces?

Uniplaces is one of Europe's largest marketplaces for student and mid-term rental housing, listing studios, apartments, private rooms and shared flats across cities like Madrid, Lisbon, Porto, Berlin, Milan, Rome, Barcelona, Valencia and many more. Each listing carries a rich payload: monthly or fortnightly price, contract type, availability date, property specifications, exact map coordinates, and — crucially for lead generation — a provider profile with verification flags and response-performance stats.

That data is valuable but painful to collect by hand. The listings are rendered by a modern Next.js front end, results are paginated 48 at a time, and the fields you actually want (price, coordinates, provider response rate) are buried inside the page's embedded JSON. Copying listing after listing across dozens of result pages and multiple cities does not scale, and the data goes stale the moment you stop. A Uniplaces scraper turns that whole manual process into a single repeatable run.

This Actor reads the site's own structured listing data and returns one clean, typed record per accommodation offer. You get the same numbers Uniplaces shows its users — price as a number, coordinates as decimals, verification as booleans — ready for a spreadsheet, a database, or a pricing model.

Common reasons people scrape Uniplaces:

  • Benchmark student-rental prices by property type, neighbourhood and city to understand the market.
  • Build lead lists of landlords and agencies pre-qualified by verification and response rate.
  • Monitor inventory and availability — which properties are listed, where, and from when.
  • Map rental hotspots using per-listing latitude/longitude for investment or expansion analysis.
  • Track price changes and discounts over time with scheduled runs (old price vs. current price).
  • Feed a housing CRM, comparison site, or relocation tool with fresh, structured listings.
  • Research supply and demand for study-abroad, corporate-relocation and co-living businesses.

✨ What this Uniplaces scraper does

  • ✅ Searches by city or URL. Pass one or many city names (e.g. madrid, lisbon, berlin) and/or paste Uniplaces accommodation URLs — each target is scraped separately.
  • ✅ Automatic pagination. The scraper walks every result page (48 listings per page) until it reaches the end of a city's inventory or your limit, returning hundreds to thousands of de-duplicated listings per run. (Madrid alone exposes 41 pages / roughly 1,900+ listings in a single pass.)
  • ✅ De-duplication built in. Listings are keyed by offerId, so the same accommodation is never written twice even across overlapping city/URL inputs.
  • ✅ Rich listing fields. For every offer it captures: title, description, price, currency, oldPrice, contractType, availableFrom, allBillsIncluded, isInstantBooking, maxGuests, hasVariablePrice and listedAt.
  • ✅ Property details. propertyType (apartment / studio / house), accommodationType (private / shared / residence), rentBy, neighbourhood, numberOfRooms, numberOfBathrooms, hasResidentLandlord, propertyVerified, plus exact latitude / longitude.
  • ✅ Reviews. reviewsAverage and reviewsCount where the listing has ratings.
  • ✅ Provider signals for lead-gen. providerId, providerEmailVerified, providerPhoneVerified, providerTrusted, responseRate (percentage) and responseTimeHours — pre-qualify landlords and agencies before you reach out.
  • ✅ Media & links. photoHash, a ready-to-use photoUrl, and the canonical listingUrl.
  • ✅ Export anywhere. Download as JSON, CSV, Excel or HTML, or pipe straight to the Uniplaces API, Google Sheets, a webhook, Make, Zapier or a database.
  • ✅ Fast & reliable. Pure-HTTP extraction over the site's embedded SSR JSON — no headless browser — with automatic retries and proxy rotation for robust, repeatable runs (a 400-listing Madrid snapshot completes in about 40 seconds).

🎯 Use cases

  • Rental-market analysts benchmarking student and mid-term rent levels by city, neighbourhood and property type.
  • Student-housing & co-living operators sizing competitor supply, prices and availability in target markets.
  • Lead-generation agencies building verified landlord/agency lists filtered by response rate and verification.
  • Property investors mapping rental hotspots with coordinates, prices and property mix for acquisition decisions.
  • Relocation & study-abroad services surfacing available, bookable rentals for students and professionals.
  • Comparison sites & aggregators enriching a housing catalogue with fresh Uniplaces listings and photos.
  • Data & BI teams feeding a warehouse or pricing model with clean, typed rental data on a schedule.
  • Real-estate researchers studying mid-term rental supply dynamics across European university cities.

📥 Input

Provide at least one city or Uniplaces URL. Everything else is optional.

FieldTypeDescription
citiesarrayCity names to search, e.g. berlin, lisbon, madrid, porto, milan. Each is searched and paginated separately.
startUrlsarrayUniplaces accommodation URLs (e.g. https://www.uniplaces.com/en/accommodation/berlin). Use instead of or alongside city names.
maxItemsintegerMaximum listings across all cities/URLs. 0 = no limit (paginate to the end). Default 0.
maxPagesintegerMaximum result pages to paginate per city (48 listings per page). Default 30.
proxyConfigurationobjectApify Proxy settings. Residential proxy is required (Uniplaces blocks datacenter IPs) and enabled by default — leave as-is unless you have a reason to change it.

Example input

{
"cities": ["madrid", "lisbon", "barcelona", "porto", "berlin"],
"maxItems": 400,
"maxPages": 20,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Prefer URLs? Pass them directly:

{
"startUrls": [
"https://www.uniplaces.com/en/accommodation/berlin",
"https://www.uniplaces.com/en/accommodation/porto"
],
"maxItems": 300
}

📤 Output

Each listing is one dataset record. A representative item from a live run:

{
"offerId": "45183",
"title": "Cute double bedroom in well-connected Arguelles",
"description": "",
"price": 650,
"currency": "EUR",
"oldPrice": null,
"hasVariablePrice": false,
"availableFrom": "2027-01-25T00:00:00+00:00",
"contractType": "monthly",
"allBillsIncluded": true,
"isInstantBooking": false,
"maxGuests": 1,
"reviewsAverage": 5,
"reviewsCount": 10,
"isSponsored": false,
"listedAt": "2016-06-08T14:41:37+00:00",
"propertyType": "apartment",
"accommodationType": "private",
"rentBy": "unit",
"neighbourhood": "Argüelles (Moncloa)",
"numberOfRooms": 3,
"numberOfBathrooms": 1,
"hasResidentLandlord": true,
"propertyVerified": true,
"latitude": 40.4209212,
"longitude": -3.7156865,
"providerId": "0b4e6424-b880-4e28-9b0f-58c3f68c9304",
"providerEmailVerified": true,
"providerPhoneVerified": true,
"providerTrusted": true,
"responseRate": 86,
"responseTimeHours": 14.8,
"photoHash": "1d8846b6b605d6c4730cfc9384d001ef017cbb83fbd1f248757c7840f9c8cde9",
"photoUrl": "https://uniplaces-photos.imgix.net/1d8846b6b605d6c4730cfc9384d001ef017cbb83fbd1f248757c7840f9c8cde9",
"listingUrl": "https://www.uniplaces.com/en/accommodation/madrid/45183",
"city": "madrid",
"scrapedAt": "2026-11-02T01:38:10.121Z"
}

Field reference

FieldDescription
offerIdUniplaces offer ID (unique; used for de-duplication).
titleListing title.
descriptionListing / landlord-policy text. Present when the listing provides one.
pricePrice as a number, for the listing's contractType.
currencyCurrency code (e.g. EUR, GBP).
oldPricePrevious price. Present only on discounted listings.
hasVariablePricetrue if the price varies by dates.
availableFromDate the accommodation becomes available (ISO).
contractTypeBilling basis of the price: monthly, fortnight or nightly.
allBillsIncludedtrue if utilities are included.
isInstantBookingtrue if the listing supports instant booking.
maxGuestsMaximum number of guests.
reviewsAverage / reviewsCountAverage rating and number of reviews (0 when not yet reviewed).
isSponsoredtrue if the listing is promoted.
listedAtWhen the listing was first created (ISO).
propertyTypeapartment, studio, house, etc.
accommodationTypeprivate, shared, residence, etc.
rentByRental unit: unit, property, subunit.
neighbourhoodNeighbourhood name. Present when available.
numberOfRooms / numberOfBathroomsRoom and bathroom counts.
hasResidentLandlordtrue if the landlord lives in the property.
propertyVerifiedtrue if the property is verified by Uniplaces.
latitude / longitudeExact map coordinates (decimal degrees).
providerIdProvider (landlord/agency) ID.
providerEmailVerified / providerPhoneVerified / providerTrustedProvider verification flags.
responseRateProvider response rate (percentage).
responseTimeHoursProvider average response time in hours.
photoHash / photoUrlImage hash and ready-to-use photo URL.
listingUrlCanonical URL of the accommodation on Uniplaces.
cityThe city (from your input/URL) the listing belongs to.
scrapedAtISO timestamp when the record was collected.

In a fresh 400-listing verification run, the core fields populated on 100% of records: offerId, title, price, currency, contractType, availableFrom, propertyType, accommodationType, latitude/longitude, room/bathroom counts, provider verification and response stats, photoUrl, listingUrl and city. A few fields are data-dependent and present when available: neighbourhood was populated on ~83% of listings, while description (~13%) and oldPrice (~11%, discounted listings only) appear where the listing provides them, and reviewsAverage/reviewsCount are 0 until a listing has been reviewed.

🔁 Pagination & scale

The scraper paginates automatically. For each city or URL it requests page 1, reads the total page count from the site's own response (total_page_number), then advances ?page=2, ?page=3, … collecting 48 listings per page until it reaches the last page, your maxPages limit, or your global maxItems cap — whichever comes first. Empty pages end a city early.

This lets a single run return hundreds to thousands of de-duplicated listings across one or many cities. For reference, in testing Madrid reported 41 pages available (≈1,900+ listings) and the Actor pulled a clean 400-listing slice across 9 pages in about 40 seconds. Control scale with two inputs:

  • maxItems — a hard ceiling on total listings (0 = no limit).
  • maxPages — a per-city page ceiling (default 30, i.e. up to ~1,440 listings per city).

De-duplication by offerId means overlapping inputs never produce duplicate rows.

⚙️ How to use

  1. Open the Actor on the Apify Console and click Try for free.
  2. Enter targets — add one or more Cities (e.g. madrid, lisbon, berlin) or paste Uniplaces URLs.
  3. Set limits — choose maxItems and/or maxPages to control how much you collect.
  4. Run it — click Start and watch listings stream into the dataset.
  5. Export — download JSON, CSV, Excel or HTML, or fetch results via the Apify API.
  6. Automate — use Apify Schedules to run daily/weekly, and integrations (Make, Zapier, Google Sheets, webhooks) to push data straight into your stack.

Run via API (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/uniplaces-scraper").call(run_input={
"cities": ["madrid", "lisbon"],
"maxItems": 500,
})
for l in client.dataset(run["defaultDatasetId"]).iterate_items():
print(l["title"], "·", l["price"], l["currency"], "·", l["propertyType"], "·", l["neighbourhood"])

Build a verified-provider lead list (Node.js)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/uniplaces-scraper').call({
cities: ['porto'], maxItems: 300,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const leads = items.filter(l => l.providerEmailVerified && (l.responseRate || 0) >= 80);
console.log(leads.length, 'listings from verified, responsive providers');

💡 Tips

  • City names: use lowercase (berlin, lisbon, madrid, porto, milan, barcelona) or paste full Uniplaces accommodation URLs.
  • maxItems: 0 paginates to the end of each city's inventory — great for a full snapshot.
  • Pre-qualify leads by filtering on providerEmailVerified, providerTrusted and responseRate after export.
  • Mind the contractType. Price is quoted for its contract basis (monthly, fortnight, nightly) — normalise to a monthly figure if you're comparing across listings.
  • Spot discounts by comparing oldPrice to price, and flag hasVariablePrice listings whose cost depends on dates.
  • Keep residential proxy on. Uniplaces blocks datacenter IPs; the default residential proxy keeps runs reliable.
  • Schedule it to track new listings, availability and price changes over time.

❓ FAQ

Is scraping Uniplaces legal? This Actor collects only publicly available listing data from Uniplaces for research and business use. You are responsible for complying with Uniplaces' Terms of Service and with applicable data-protection laws, especially when handling provider contact data. Don't use the data for spam or any unlawful purpose.

Do I need a Uniplaces account or login? No. The scraper reads publicly visible listing data — no account or login is required.

How many listings can it return, and how fast? A run can return hundreds to thousands of listings. The scraper collects 48 listings per page and paginates automatically; in a fresh verification run it pulled 400 de-duplicated Madrid listings in about 40 seconds, and a single large city can expose 1,900+ listings across 40+ pages. Volume is bounded by maxItems and maxPages.

Do I need proxies? Yes — Uniplaces blocks datacenter IPs, so a residential proxy is required. It is included and enabled by default, so you don't need to bring your own; just run the Actor.

Is there a Uniplaces API? Uniplaces does not offer a public data API for listings. This Actor is the practical way to get Uniplaces data programmatically — run it on Apify and pull results via the Apify API, dataset export, or webhooks.

What export formats are supported? JSON, CSV, Excel and HTML, plus the Apify API. You can also push to Google Sheets, a webhook, Make, Zapier or a database.

Is the price monthly? Price is quoted for the listing's contractType, which can be monthly, fortnight or nightly. Each record includes contractType and currency so you can normalise prices yourself.

Can I filter by city or property type? Searches are per city (via cities or startUrls). Property type, neighbourhood, price band and provider quality come through as fields on each record — filter them after export (examples above).

How fresh is the data? Every run reads Uniplaces live, so results reflect the listings available at run time. Each record carries a scrapedAt timestamp; schedule the Actor to keep a dataset continuously up to date.

Why is description or oldPrice empty on some listings? Those fields are data-dependent: description appears only when a listing provides text, and oldPrice only on discounted listings. Core fields (price, type, location, provider stats) populate on essentially every listing.


Ready to scrape Uniplaces? Enter a city, click Start, and export fresh student & mid-term rental listings — prices, specs, coordinates and provider leads — as JSON, CSV, Excel or via API.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Uniplaces or its operators. All trademarks are the property of their respective owners. It collects only publicly available listing information. Respect Uniplaces' Terms of Service and robots directives, comply with data-protection laws when handling provider details, use reasonable request volumes, and do not use the data for spam, harassment, or any unlawful purpose.