HousingAnywhere Scraper [$0.70/1K💰] | Mid-Term Rentals avatar

HousingAnywhere Scraper [$0.70/1K💰] | Mid-Term Rentals

Pricing

from $0.70 / 1,000 results

Go to Apify Store
HousingAnywhere Scraper [$0.70/1K💰] | Mid-Term Rentals

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

Ahmed Jasarevic

Maintained by Community

Actor 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 — priceEur and totalMonthlyEur normalized across currencies
  • Landlord and letting-agency analysis — landlordType, isPartner and property counts
  • Availability and supply tracking — re-run a city monthly to see listings that never got taken
  • Bills-included market analysis — billsIncluded tells you what a real all-in rent looks like in a given city
  • Property and neighbourhood research — neighborhood, address, geo and facility flags per listing
  • Contact-list building for landlords — advertiserId per listing groups inventory by advertiser

Input

FieldTypeRequiredDefaultNotes
startUrlsarrayno["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.
citiesarrayno[]Exact site values: Berlin, Amsterdam, Munich, Milan, Barcelona, Lisbon, Paris, Vienna, London, Valencia, Rome, Hamburg, Madrid.
countriesarrayno[]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.
propertyTypesarrayno[]PRIVATE_ROOM, SHARED_ROOM, APARTMENT, STUDIO, HOUSE, BUILDING, UNKNOWN. Omit for all.
landlordTypesarrayno[]private-landlord, rental-company, student-company. Applied client-side — expect fewer results than requested.
utilitiesarrayno[]I = bills included, E = excluded, P = partial.
currenciesarrayno[]EUR, GBP, USD, PLN, SEK, DKK, NOK, CHF, CZK, AUD, CAD.
querystringno""Free-text query matched against city, street, neighbourhood, property name and description.
neighborhoodsarrayno[]Exact values for the area/neighbourhood field.
priceMinintegerno0Only listings at or above this monthly price, in the listing's own currency.
priceMaxintegerno0Only listings at or below this monthly price, in the listing's own currency.
availableFromstringno""Only listings still bookable on or after this date (YYYY-MM-DD). Listings with an open-ended end date always match.
marketTypesarrayno[]student_housing, co_living. Applied client-side — not filterable server-side.
furnishedOnlybooleannofalseOnly listings whose bedroom is marked furnished.
sortBystringnorelevancerelevance (site's own ranking), priceAsc, priceDesc, newest, advertiserRating.
includeUnsearchablebooleannofalseBy 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.
maxListingsintegerno1000Hard cap on listings returned. 0 or unset = 1000. Free-plan users are limited to 10.
hitsPerPageintegerno1000Listings per request (1–1000). 1000 is fastest — that is one request for a whole city.
debugbooleannofalseVerbose 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

FieldDescription
listingIdHousingAnywhere unitTypeInternalID — the ut<id> value in the URL. The join key.
objectId / internalId / propertyId / advertiserIdSite-internal identifiers; advertiserId groups inventory by landlord
urlCanonical listing page URL
title / titleSourceListing title, and whether it came from the index (index) or was derived (derived)
propertyAlias / unitTypePath / propertyPath / searchUrlSite paths and the originating search

Price — the fields that matter

FieldDescription
priceMonthly rent in the listing currency (major units)
priceEurMonthly rent converted to EUR
estimatedBills / estimatedBillsEurEstimated monthly bills, in listing currency and EUR
totalMonthlyEurRent + estimated bills in EUR — the real monthly cost
minPrice / maxPrice / pricePerMonth / priceTypeAlternative price representations as published
pricingMonthly / pricingMonthlyEurFull monthly pricing breakdown objects
currencyISO code of price
billsIncludedincluded, excluded, partially_included, or null
utilitiesCodeRaw facet code: I, E, P

Property

FieldDescription
propertyType / propertyTypeLabelprivate_room, shared_room, apartment, studio, house, building
roomTypee.g. private room in apartment
bedrooms / beds / bathrooms / bathroomCount / toiletSleeping and bathroom counts
sizeSqm / propertySizeSqmTotal property size in m²
roomSizeSqmSize of the individual room in m² (shared rooms)
hasBalcony / kitchenType / furnishingFurnishing flags (furnished, hasBed, hasDesk, hasWardrobe, flooring), balcony, kitchen
facilitiesOn-site facilities object
photos[] / photoCount / videoCount / photo360Count / thumbnailMedia
descriptionFull listing description

Location

FieldDescription
city / country / countryCode / street / neighborhood / addressAddress components
geo{ lat, lng }

Availability

FieldDescription
availableFrom / availableToFirst and last bookable dates (YYYY-MM-DD). Open-ended listings have availableTo: null.
firstBookableDate / lastBookableDateRaw availability fields
contractType / rentalPeriodTypee.g. daily, monthly
minimumStayMonths / maximumStayMonths / maxBookableDaysStay constraints
isBookable / freePlaces / currentOccupancyAvailability state and capacity
publishedDate / creationDate / updatedAtRecord dates
isMultiUnit / isApartmentAggregationWhether the listing aggregates a whole building

Landlord and policy

FieldDescription
landlordType / landlordTypeLabelprivate_landlord, rental_company, student_company
isPartner / isExcellentAdvertiserVerification and quality flags
depositPolicy / cancellationPolicye.g. classical deposit, strict
couplesAllowed / preferredGender / minAge / maxAge / registrationPossibleTenant requirements
marketTypes / searchablestudent_housing / co_living; whether the listing is live on the site

Provenance

FieldDescription
sourceindex — the site's own search results
scrapedAtISO timestamp

How to read this dataset correctly

  • Sort by totalMonthlyEur, not price. Two listings at the same rent can differ by hundreds of euros a month once bills are counted.
  • titleSource tells you how much to trust title. index means the site published a title. derived means the Actor generated one from the property name, so the text is a fallback, not a quotation.
  • searchable mirrors the site's own visibility flag. The source calls this field isSearchable; the Actor normalises it to searchable in the dataset. With the default includeUnsearchable: false the Actor already filters to live records, so searchable will be true on almost every row — it only starts to vary when you flip that input to true.
  • Filter on currency before comparing price. price is in the listing's own currency; priceEur is 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 availableFrom and updatedAt for newly listed and re-priced rooms
  • Monthly — sortBy: priceAsc sweeps 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: null identifies open-ended listings, the ones most likely still to be takeable
  • Landlord supply — group by advertiserId to 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.



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

  • hitsPerPage defaults to 1000, 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.
  • landlordTypes and marketTypes are filtered client-side, so result counts can come back well below maxListings. Every other filter is server-side. Never assume maxListings listings exist.
  • title may be derived, not real. Check titleSource === "index" before treating a title as the landlord's own wording.
  • price is in the listing's own currency — use priceEur or totalMonthlyEur for any cross-city comparison. currency names which.
  • availableTo: null means the listing is open-ended, not missing data. Open-ended listings always match an availableFrom filter.
  • 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. Set true for archive-style coverage of stale records.
  • The join key is listingId (the ut<id> in the URL). Group landlord inventory on advertiserId.
  • Three dataset views available: overview, pricing, details. Use pricing when 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.


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