HousingAnywhere Scraper [$0.70/1K💰] | Mid-Term Rentals
Pricing
from $0.70 / 1,000 results
HousingAnywhere Scraper [$0.70/1K💰] | Mid-Term Rentals
Scrape HousingAnywhere mid-term rentals in one request per city. Get rent, estimated bills, total monthly EUR cost, room type, size, furnishing, availability, landlord type, address and photos. ~80 fields per listing.
Pricing
from $0.70 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
8 days ago
Last modified
Categories
Share
HousingAnywhere Scraper — Mid-Term Rental Listings With Real Monthly Cost
Extract HousingAnywhere mid-term rental listings — the specialist site for students and professionals renting for a term rather than a night — with rent, bills, room type, size, furnishing, availability window, landlord type, address, coordinates and photos.
Returns roughly 80 fields per listing, and it computes the number most rental scrapers never give you: totalMonthlyEur — rent plus estimated bills, in euros. That is the number a student or relocating professional actually cares about.
Why not use a database snapshot?
Competing Actors serve HousingAnywhere data from their own pre-built database — refreshed weekly, not live. The housingfeed Actor, for example, states its coverage as a fixed count with a "newest scrape" date and a weekly refresh. That model is genuinely fast and cheap, and it is the right choice if you want one normalized schema across 70+ rental sites.
It is the wrong choice when you need today's inventory or a filter that snapshot pipelines rarely keep. This Actor reads the site's live search index — the same source the search box queries — so a listing that appeared this morning is in your run this morning. That also unlocks the filters the snapshot model drops: availableFrom and availableTo windows, landlordTypes, marketTypes, utilities, neighborhoods, furnishedOnly, sortBy and full-text query.
The output is also far richer: roughly 80 fields per listing, including the ones that matter most in mid-term rentals — totalMonthlyEur, billsIncluded, minimumStayMonths, sizeSqm and landlordType.
The field no other HousingAnywhere scraper returns
totalMonthlyEur — rent plus estimated monthly bills, converted to EUR.
Most normalized rental schemas give you a rent number and stop there. A listing at €700/month with €120 of bills is a €820/month property, and a listing at €700 with bills included is a €700/month property. Sorting by price puts them in the wrong order. Sorting by totalMonthlyEur puts them in the right one.
You also get estimatedBills, estimatedBillsEur, billsIncluded (included / excluded / partially_included) and the raw utilitiesCode (I / E / P) so you can apply your own bills assumption instead of inheriting someone else's.
Main use cases
- Student accommodation search — city, room type, price band, move-in date, bills included
- Relocation and mid-term rental research — the mid-term segment Airbnb does not cover
- Housing cost benchmarking by city —
priceEurandtotalMonthlyEurnormalized across currencies - Landlord and letting-agency analysis —
landlordType,isPartnerand property counts - Availability and supply tracking — re-run a city monthly to see listings that never got taken
- Bills-included market analysis —
billsIncludedtells you what a real all-in rent looks like in a given city - Property and neighbourhood research —
neighborhood,address,geoand facility flags per listing - Contact-list building for landlords —
advertiserIdper listing groups inventory by advertiser
Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | no | ["https://housinganywhere.com/s/Amsterdam--Netherlands"] | Search URLs and listing URLs. Search URLs are parsed into filters (city, price, availability); listing URLs are resolved directly, skipping enumeration. |
cities | array | no | [] | Exact site values: Berlin, Amsterdam, Munich, Milan, Barcelona, Lisbon, Paris, Vienna, London, Valencia, Rome, Hamburg, Madrid. |
countries | array | no | [] | Exact site values: Germany, Netherlands, Italy, Spain, Portugal, France, Austria, United Kingdom, Belgium, Poland, Ireland, Sweden, Denmark, Finland, Czech Republic, Switzerland, Norway, Australia, Canada, United States. |
propertyTypes | array | no | [] | PRIVATE_ROOM, SHARED_ROOM, APARTMENT, STUDIO, HOUSE, BUILDING, UNKNOWN. Omit for all. |
landlordTypes | array | no | [] | private-landlord, rental-company, student-company. Applied client-side — expect fewer results than requested. |
utilities | array | no | [] | I = bills included, E = excluded, P = partial. |
currencies | array | no | [] | EUR, GBP, USD, PLN, SEK, DKK, NOK, CHF, CZK, AUD, CAD. |
query | string | no | "" | Free-text query matched against city, street, neighbourhood, property name and description. |
neighborhoods | array | no | [] | Exact values for the area/neighbourhood field. |
priceMin | integer | no | 0 | Only listings at or above this monthly price, in the listing's own currency. |
priceMax | integer | no | 0 | Only listings at or below this monthly price, in the listing's own currency. |
availableFrom | string | no | "" | Only listings still bookable on or after this date (YYYY-MM-DD). Listings with an open-ended end date always match. |
marketTypes | array | no | [] | student_housing, co_living. Applied client-side — not filterable server-side. |
furnishedOnly | boolean | no | false | Only listings whose bedroom is marked furnished. |
sortBy | string | no | relevance | relevance (site's own ranking), priceAsc, priceDesc, newest, advertiserRating. |
includeUnsearchable | boolean | no | false | By default only listings the site flags as live are returned — the ones a visitor can actually see. Enable to also collect stale or partially indexed records. |
maxListings | integer | no | 1000 | Hard cap on listings returned. 0 or unset = 1000. Free-plan users are limited to 10. |
hitsPerPage | integer | no | 1000 | Listings per request (1–1000). 1000 is fastest — that is one request for a whole city. |
debug | boolean | no | false | Verbose logging including the resolved filter string. |
Two inputs are filtered client-side — read this
landlordTypes and marketTypes cannot be filtered server-side by HousingAnywhere. The Actor fetches the results first and then filters them, so you get fewer listings than you asked for — possibly far fewer. Every other filter above is applied server-side and returns exactly what you requested.
If your run comes back short and you used either of these two, that is why. debug: true prints the resolved filter string so you can confirm what was actually sent.
Examples
Whole city in one request, bills-included only, cheapest:
{"cities": ["Berlin"],"utilities": ["I"],"maxListings": 1000,"hitsPerPage": 1000,"priceMax": 900}
Students looking for a private room in Barcelona, available September:
{"cities": ["Barcelona"],"propertyTypes": ["PRIVATE_ROOM"],"marketTypes": ["student_housing"],"availableFrom": "2026-09-01","priceMax": 800,"furnishedOnly": true,"sortBy": "priceAsc","currencies": ["EUR"]}
Cross-city cost benchmarking, cheapest first:
{"cities": ["Amsterdam", "Berlin", "Paris", "Vienna"],"propertyTypes": ["PRIVATE_ROOM", "STUDIO"],"sortBy": "priceAsc","maxListings": 1000,"hitsPerPage": 1000}
Just from a search URL you already have — filters are extracted automatically:
{"startUrls": ["https://housinganywhere.com/s/Amsterdam--Netherlands/private-rooms?priceMax=1200"]}
Landlord-type analysis:
{"cities": ["Munich", "Milan"],"landlordTypes": ["student-company"],"maxListings": 500,"debug": true}
Output
One dataset, three views: Overview (key facts), Pricing & bills (cost comparison including utilities) and Full details (everything extracted).
Listing identity
| Field | Description |
|---|---|
listingId | HousingAnywhere unitTypeInternalID — the ut<id> value in the URL. The join key. |
objectId / internalId / propertyId / advertiserId | Site-internal identifiers; advertiserId groups inventory by landlord |
url | Canonical listing page URL |
title / titleSource | Listing title, and whether it came from the index (index) or was derived (derived) |
propertyAlias / unitTypePath / propertyPath / searchUrl | Site paths and the originating search |
Price — the fields that matter
| Field | Description |
|---|---|
price | Monthly rent in the listing currency (major units) |
priceEur | Monthly rent converted to EUR |
estimatedBills / estimatedBillsEur | Estimated monthly bills, in listing currency and EUR |
totalMonthlyEur | Rent + estimated bills in EUR — the real monthly cost |
minPrice / maxPrice / pricePerMonth / priceType | Alternative price representations as published |
pricingMonthly / pricingMonthlyEur | Full monthly pricing breakdown objects |
currency | ISO code of price |
billsIncluded | included, excluded, partially_included, or null |
utilitiesCode | Raw facet code: I, E, P |
Property
| Field | Description |
|---|---|
propertyType / propertyTypeLabel | private_room, shared_room, apartment, studio, house, building |
roomType | e.g. private room in apartment |
bedrooms / beds / bathrooms / bathroomCount / toilet | Sleeping and bathroom counts |
sizeSqm / propertySizeSqm | Total property size in m² |
roomSizeSqm | Size of the individual room in m² (shared rooms) |
hasBalcony / kitchenType / furnishing | Furnishing flags (furnished, hasBed, hasDesk, hasWardrobe, flooring), balcony, kitchen |
facilities | On-site facilities object |
photos[] / photoCount / videoCount / photo360Count / thumbnail | Media |
description | Full listing description |
Location
| Field | Description |
|---|---|
city / country / countryCode / street / neighborhood / address | Address components |
geo | { lat, lng } |
Availability
| Field | Description |
|---|---|
availableFrom / availableTo | First and last bookable dates (YYYY-MM-DD). Open-ended listings have availableTo: null. |
firstBookableDate / lastBookableDate | Raw availability fields |
contractType / rentalPeriodType | e.g. daily, monthly |
minimumStayMonths / maximumStayMonths / maxBookableDays | Stay constraints |
isBookable / freePlaces / currentOccupancy | Availability state and capacity |
publishedDate / creationDate / updatedAt | Record dates |
isMultiUnit / isApartmentAggregation | Whether the listing aggregates a whole building |
Landlord and policy
| Field | Description |
|---|---|
landlordType / landlordTypeLabel | private_landlord, rental_company, student_company |
isPartner / isExcellentAdvertiser | Verification and quality flags |
depositPolicy / cancellationPolicy | e.g. classical deposit, strict |
couplesAllowed / preferredGender / minAge / maxAge / registrationPossible | Tenant requirements |
marketTypes / searchable | student_housing / co_living; whether the listing is live on the site |
Provenance
| Field | Description |
|---|---|
source | index — the site's own search results |
scrapedAt | ISO timestamp |
How to read this dataset correctly
- Sort by
totalMonthlyEur, notprice. Two listings at the same rent can differ by hundreds of euros a month once bills are counted. titleSourcetells you how much to trusttitle.indexmeans the site published a title.derivedmeans the Actor generated one from the property name, so the text is a fallback, not a quotation.searchablemirrors the site's own visibility flag. The source calls this fieldisSearchable; the Actor normalises it tosearchablein the dataset. With the defaultincludeUnsearchable: falsethe Actor already filters to live records, sosearchablewill betrueon almost every row — it only starts to vary when you flip that input totrue.- Filter on
currencybefore comparingprice.priceis in the listing's own currency;priceEuris the normalized column for cross-city analysis.
Example output
{"listingId": "ut1234567","objectId": "abc123def456","propertyId": "p98765","advertiserId": "adv-4471","url": "https://housinganywhere.com/room/ut1234567/de/Berlin/prenzlauer-berg","searchUrl": "https://housinganywhere.com/s/Berlin--Germany/private-rooms","title": "Bright furnished room in a shared 2-bedroom flat in Prenzlauer Berg","titleSource": "index","currency": "EUR","price": 690,"priceEur": 690,"estimatedBills": 85,"estimatedBillsEur": 85,"totalMonthlyEur": 775,"billsIncluded": "excluded","utilitiesCode": "E","minPrice": 690,"maxPrice": 690,"pricePerMonth": 690,"propertyType": "PRIVATE_ROOM","propertyTypeLabel": "private_room","roomType": "private room in apartment","marketTypes": ["student_housing"],"bedrooms": 2,"beds": 2,"bathrooms": "shared_w_girls","sizeSqm": 58,"roomSizeSqm": 18,"hasBalcony": true,"kitchenType": "shared","furnishing": { "furnished": true, "hasBed": true, "hasDesk": true, "hasWardrobe": true, "flooring": "wood" },"availableFrom": "2026-09-15","availableTo": "2027-02-28","contractType": "monthly","minimumStayMonths": 3,"maximumStayMonths": 12,"freePlaces": 1,"currentOccupancy": 1,"city": "Berlin","country": "Germany","countryCode": "DE","street": "Kastanienallee 12","neighborhood": "Prenzlauer Berg","address": "Kastanienallee 12, 10435 Berlin, Germany","geo": { "lat": 52.5402, "lng": 13.4131 },"landlordType": "private-landlord","landlordTypeLabel": "private_landlord","isPartner": false,"isExcellentAdvertiser": false,"depositPolicy": "classical deposit","cancellationPolicy": "strict","couplesAllowed": false,"minAge": 18,"maxAge": 35,"registrationPossible": true,"photos": ["https://housinganywhere.com/photos/ut1234567/1.jpg"],"photoCount": 11,"videoCount": 0,"photo360Count": 0,"thumbnail": "https://housinganywhere.com/thumbs/ut1234567.jpg","description": "Bright, fully furnished private room in a friendly two-bedroom flat...","searchable": true,"publishedDate": "2026-08-02","source": "index","scrapedAt": "2026-09-30T12:15:33.000Z"}
Track mid-term rental supply and prices on a schedule
Mid-term rental listings are seasonal and many get taken within weeks. Recurring runs are how you see supply before it disappears:
- Weekly — same city and filters; diff
availableFromandupdatedAtfor newly listed and re-priced rooms - Monthly —
sortBy: priceAscsweeps to track the cheapest all-in cost per city over time - Term-boundary runs — schedule a few weeks before each intake season to capture supply before it clears
- Availability analysis —
availableTo: nullidentifies open-ended listings, the ones most likely still to be takeable - Landlord supply — group by
advertiserIdto see which letting agents dominate a city - Wire into your stack — Apify webhooks, Zapier, Make, Google Sheets and 100+ integrations fire on run completion; the dataset exports as JSON, CSV, Excel, XML, HTML or RSS
includeUnsearchable: false keeps you aligned with what a live visitor sees. Flip it to true for a deeper archive run that also captures records the site has stopped displaying.
Related Actors
- HousingAnywhere Scraper by housingfeed (
housingfeed/housinganywhere-scraper) — fastest and cheapest option; serves a weekly-refreshed database snapshot in one normalized schema shared across 70+ rental sites - HousingAnywhere Scraper by crawlerbros (
crawlerbros/housinganywhere-scraper) — the most-used HousingAnywhere Actor, wider city coverage - HousingAnywhere Rental Listings Scraper by automation-lab (
automation-lab/housinganywhere-rental-listings-scraper) — mid-term rental focus - Spotahome Scraper (
ahmed_jasarevic/spotahome-scraper) — mid-term and professional rentals on the other specialist platform - Funda Scraper (
ahmed_jasarevic/funda-scraper) — the Netherlands' main property portal, same cities and filters
FAQ
Is there an official HousingAnywhere API?
No. HousingAnywhere has no public listings API and no documented developer program for bulk listing data. What it exposes is the public search index its own search box queries, and that is what this Actor reads. For commercial, very-high-volume or redistribution use, go through HousingAnywhere directly and request a data partnership — that is the right channel, and scraping is not a substitute for it.
Why is one request worth so much here?
Because this Actor reads the search index instead of paginating HTML. The site returns up to 1,000 listings per request at hitsPerPage: 1000, versus 30 per HTML page. A full city sweep is a single call. That is the difference between a scrape that takes minutes and one that takes hours — or times out.
What is totalMonthlyEur and why should I sort by it?
It is rent plus estimated monthly bills, converted to euros — the real cost of occupying the property. Most mid-term listings quote rent excluding utilities, so two listings at the same price can differ by over €100 a month in practice. Sort and filter on totalMonthlyEur, and keep billsIncluded and estimatedBills alongside it.
Why do I get fewer results than I asked for with landlordTypes or marketTypes?
Because those two cannot be filtered server-side by HousingAnywhere — the Actor has to fetch first and filter after, so results are removed from an already-fetched set. Every other filter is server-side and returns exactly what you requested. If your run came back short, check whether you used either of these two, and run with debug: true to print the resolved filter string.
Should I use price or priceEur?
priceEur for any comparison. price is in each listing's own currency, so a mixed-currency dataset sorted on price mixes EUR, GBP, PLN, SEK and CZK in one numeric column. priceEur and totalMonthlyEur are the normalized fields.
What does titleSource mean?
Where the title came from. index means HousingAnywhere published it. derived means the Actor built a fallback title from the property name because the index record had none. Useful when you need to know whether a title is the landlord's own wording or generated — relevant for sentiment and brand analysis.
What does searchable mean, and what does includeUnsearchable do?
The site keeps its own visibility flag called isSearchable. The Actor reads it and exposes it in the dataset as searchable, so you will only ever see searchable in your output — never isSearchable.
With the default includeUnsearchable: false the Actor filters to live records, meaning searchable is true on almost every row. Set includeUnsearchable to true to also collect stale or partially indexed records: more coverage, and a searchable value that actually varies — but some of those rows will no longer be bookable.
Does it need a browser or a proxy?
No. It queries the public search index with JSON requests, no JavaScript rendering, no headless browser, no CAPTCHA solving. Default run uses no proxy at 256 MB. A full city at hitsPerPage: 1000 is one request.
For AI Agents & LLM Apps
Callable via the Apify MCP server and the Apify API. Returns one dataset — one row per rental listing — with three views: overview, pricing, details.
Minimal valid input — one city, one request, full result set:
{ "cities": ["Berlin"], "maxListings": 1000, "hitsPerPage": 1000 }
Cost-aware search, bills-included only:
{"cities": ["Barcelona"],"propertyTypes": ["PRIVATE_ROOM"],"utilities": ["I"],"availableFrom": "2026-09-01","priceMax": 800,"sortBy": "priceAsc"}
From a search URL — filters are parsed out automatically:
{ "startUrls": ["https://housinganywhere.com/s/Amsterdam--Netherlands/private-rooms?priceMax=1200"] }
Output field list — identity: listingId, objectId, internalId, propertyId, advertiserId, url, title, titleSource, propertyAlias, unitTypePath, propertyPath, searchUrl. Cost: price, priceEur, estimatedBills, estimatedBillsEur, totalMonthlyEur, minPrice, maxPrice, pricePerMonth, priceType, pricingMonthly, pricingMonthlyEur, currency, billsIncluded, utilitiesCode. Property: propertyType, propertyTypeLabel, roomType, marketTypes, bedrooms, beds, bathrooms, bathroomCount, toilet, sizeSqm, roomSizeSqm, propertySizeSqm, hasBalcony, kitchenType, furnishing, facilities, photos, photoCount, videoCount, photo360Count, thumbnail, description. Location: city, country, countryCode, street, neighborhood, address, geo. Availability: availableFrom, availableTo, firstBookableDate, lastBookableDate, contractType, rentalPeriodType, minimumStayMonths, maximumStayMonths, maxBookableDays, isBookable, freePlaces, currentOccupancy, publishedDate, creationDate, updatedAt, isMultiUnit, isApartmentAggregation. Landlord: landlordType, landlordTypeLabel, isPartner, isExcellentAdvertiser, depositPolicy, cancellationPolicy, couplesAllowed, preferredGender, minAge, maxAge, registrationPossible, searchable. Provenance: source, scrapedAt.
Behaviors an agent should know
hitsPerPagedefaults to1000, which is one request for a whole city. Do not lower it unless you are deliberately paginating — at 30 per page a single city becomes dozens of requests.landlordTypesandmarketTypesare filtered client-side, so result counts can come back well belowmaxListings. Every other filter is server-side. Never assumemaxListingslistings exist.titlemay be derived, not real. ChecktitleSource === "index"before treating a title as the landlord's own wording.priceis in the listing's own currency — usepriceEurortotalMonthlyEurfor any cross-city comparison.currencynames which.availableTo: nullmeans the listing is open-ended, not missing data. Open-ended listings always match anavailableFromfilter.- Free-plan users are capped at 10 listings, regardless of
maxListings. - One billing event per dataset row. Budget linearly with
maxListings. includeUnsearchable: false(default) means you get only listings visible on the live site. Settruefor archive-style coverage of stale records.- The join key is
listingId(theut<id>in the URL). Group landlord inventory onadvertiserId. - Three dataset views available:
overview,pricing,details. Usepricingwhen the task is cost comparison.
Billing model — pay per event: result ($0.0007–$0.00075 per listing row) plus a per-run Actor Start event scaled by memory. Free-plan users are limited to 10 rows per run.
Legal & Compliance Disclaimer
This Actor is an independent third-party tool. It is not affiliated with, endorsed by, sponsored by, or connected with HousingAnywhere, HousingAnywhere Group, or any of its affiliates.
It reads only publicly accessible data — the public search index that HousingAnywhere's own website queries for logged-out visitors, and publicly visible listing pages. It does not log in, does not create an account, does not solve CAPTCHAs, does not use proxies by default, and does not access any private, staff-only or paid interface.
Output includes landlord and property address data — street, neighbourhood, full address and coordinates, plus advertiserId identifiers and in some listings tenant-requirement attributes such as preferredGender, minAge and maxAge. Address data for rental properties can be sensitive in the UK and EU, and the tenant-requirement fields can constitute special-category-adjacent personal data in some jurisdictions. You are responsible for your own lawful basis for processing this data, for data minimisation, and for compliance with the UK GDPR, EU GDPR and applicable national data protection law including the EU Data Act's prohibitions on certain non-personal rental data reuse.
HousingAnywhere's terms of use prohibit automated scraping and the commercial reuse of listing content, and many listings reproduce landlords' own photographs and descriptions. Review their terms carefully before any collection or redistribution, obtain permission before republishing listing content or photographs, and request a data partnership for commercial-scale use rather than treating scraping as a substitute.
This Actor is a data-collection tool; it does not provide legal advice and makes no claim that any particular use is permitted.
SEO Keywords
housinganywhere scraper, mid-term rental data, student accommodation data, long term student rental, housinganywhere api alternative, room rental listings, term housing data, relocation housing data, student housing search data, rental bills included, monthly rental cost data, berlin student housing, amsterdam housing data, barcelona rentals, private room rental data, shared room listings, housing cost benchmarking, landlord analysis, rental availability data, property rental dataset, europe rental market data, housing supply analysis, furnished room listings, rental index data