# HousingAnywhere Property Scraper (`confidential_gnat/housinganywhere-property-scraper`) Actor

Scrapes rental listings from HousingAnywhere (housinganywhere.com), including price, city, coordinates, room count, floor area, house rules, facilities and images.

- **URL**: https://apify.com/confidential\_gnat/housinganywhere-property-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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

## HousingAnywhere Property Scraper

**Scrape rental listings from HousingAnywhere (housinganywhere.com)** — pull title, price, city, coordinates, room count, floor area, house rules, facilities and photos for every listing on a city search page or a single room URL. Results export as **JSON, CSV or Excel**, or feed straight into your own pipeline through the **API**. Paste a city search URL or a listing URL and press Start — no configuration required.

**Target website:** [housinganywhere.com](https://housinganywhere.com)

### ✨ Features of this HousingAnywhere scraper

- **Listing extraction** — title, description, monthly rent, city, coordinates, room count, floor area, house rules and preferences, facilities/amenities and photos.
- **No browser required by default** — search and listing pages are fetched over plain HTTP, which keeps runs fast and cheap.
- **Optional landlord and FAQ extraction** — a toggle switches on a full browser render to also capture landlord profile info and the listing's FAQ accordion, both of which only appear after the page's JavaScript runs.
- **Automatic URL detection** — search URLs and listing URLs are told apart automatically, so you can mix both in Start URLs.
- **Whole-site mode** — one toggle crawls HousingAnywhere's main city search pages instead of a hand-picked list.
- **Cross-run caching** — an optional project name skips listings already scraped in an earlier run.
- **Proxy support** — optional Apify proxy configuration (datacenter or residential).

### 🚀 How to scrape HousingAnywhere listings in 5 steps

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Fill in the **Input** fields (at least one start URL is required).
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 Pricing

This actor uses **pay-per-result** billing based on the compute units a run consumes.

- New Apify accounts include **$5 of free monthly credit**.
- Because listing and search pages are fetched over plain HTTP by default (no headless browser), runs cost significantly less than browser-based scrapers — enable the landlord/FAQ toggle only when you need those two fields.

### 🔧 Input configuration

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| `startUrls` | array | ✅ | `[{"url": "https://housinganywhere.com/s/Berlin--Germany"}]` | HousingAnywhere city search URLs (`/s/City--Country`) or direct listing URLs (`/room/...`). The type of each URL is detected automatically. |
| `maxItems` | integer | — | `3` | Maximum number of listings to scrape for each start URL. |
| `scrapeExtraDetails` | boolean | — | `false` | Landlord info and the FAQ section only render after JavaScript hydration. Enabling this uses a full browser to fetch listing pages so these two fields can be included; leaving it off scrapes listings faster and cheaper without them. |
| `scrapeWholeSite` | boolean | — | `false` | Ignore Start URLs and crawl HousingAnywhere's main city search pages instead. |
| `cacheProjectName` | string | — | — | Optional. When set, listings already scraped under this project name in a previous run are skipped instead of being scraped again. |
| `proxyConfiguration` | object | — | `{"useApifyProxy": true}` | HousingAnywhere responds fine without a proxy. Enable datacenter proxies first if you start seeing blocks, and residential only if datacenter still fails. |

**Supported URL types:**

- **Search pages** — city searches such as `https://housinganywhere.com/s/Berlin--Germany`.
- **Listing pages** — `https://housinganywhere.com/room/{unitTypeId}/{country}/{City}/{slug}`.

### 📦 HousingAnywhere scraper output data

Each run produces a JSON dataset (exportable to CSV or Excel) with one record per listing containing: `url`, `listingId`, `title`, `description`, `features`, `price`, `currency`, `priceText`, `city`, `latitude`, `longitude`, `numberOfRooms`, `propertyArea`, `rulesAndPreferences`, `facilities`, `images`, and — only when `scrapeExtraDetails` is enabled — `landlordInfo` and `faq`. The dataset has one view, **Overview**, showing title, city, price, currency, room count, area and URL in a compact table.

**Sample output:**

```json
{
  "url": "https://housinganywhere.com/room/ut1739758/de/Berlin/zur-nachtheide",
  "listingId": "ut1739758",
  "title": "Apartment for rent in Berlin, Zur Nachtheide",
  "description": "• Studio apartment with a balcony for rent in Köpenick for women\n• Available: from the 1st of October\n• Location: infront of the tram station \"Zur Nachtheide\" in Köpenick\n• Fully furnished: everything you need is there.\n• Only for women!\n• No smoking, no pets",
  "features": "Entire apartment, 45 m²Furnished, Furnished, 1 bedroom, Floor: 3",
  "price": 900,
  "currency": "EUR",
  "priceText": "€900per month",
  "city": "Berlin",
  "latitude": "52.4246918",
  "longitude": "13.5877019",
  "numberOfRooms": "1",
  "propertyArea": "45 m²Furnished",
  "rulesAndPreferences": [
    { "name": "Age", "value": "No preference" },
    { "name": "Gender", "value": "Female" },
    { "name": "Smoking allowed", "value": "No" }
  ],
  "facilities": [
    "Private living room",
    "Private toilet",
    "Private kitchen",
    "WiFi"
  ],
  "images": [
    "https://housinganywhere.imgix.net/unit_type/1739758/e0ecf041-6c85-4f22-8d05-e889118573ea.jpg?auto=format%2Ccompress&cs=srgb&fit=clip&h=300&w=490"
  ]
}
```

### 🐍 How to scrape HousingAnywhere with Python, JavaScript or the API

Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("<username>/housinganywhere-property-scraper").call(run_input={
    "startUrls": [{"url": "https://housinganywhere.com/s/Berlin--Germany"}],
    "maxItems": 20,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('<username>/housinganywhere-property-scraper').call({
    startUrls: [{ url: 'https://housinganywhere.com/s/Berlin--Germany' }],
    maxItems: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**cURL** — start a run and wait for the dataset:

```bash
curl -X POST "https://api.apify.com/v2/acts/<username>~housinganywhere-property-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": [{"url": "https://housinganywhere.com/s/Berlin--Germany"}], "maxItems": 20}'
```

### 💡 What you can use HousingAnywhere rental data for

- Tracking rental prices across European cities over time
- Benchmarking a portfolio against comparable listings
- Relocation and student-housing research
- Market supply analysis by city and price band
- Feeding property dashboards and alerting tools

Rental market analysts, relocation services and PropTech teams use this data to track current European rental pricing and supply without opening listings one by one.

### ⚠️ Limitations & known issues

- **Search results come from HousingAnywhere's own listing index** — one search URL returns a batch of matching listings; use `maxItems` and multiple city searches to widen coverage.
- **Rent is read from the page body** — HousingAnywhere does not expose the monthly price as structured data, so it's parsed from the rendered listing text.
- **Landlord info and FAQ need `scrapeExtraDetails`** — these two fields only render after the page's JavaScript runs, so they're only included when that option is enabled (which also makes the run slower and more expensive).

### ❓ Frequently asked questions

#### Can I scrape HousingAnywhere legally?

Yes — this actor only collects data that is already publicly visible on HousingAnywhere listing pages; it does not log in, message advertisers, or access account-only areas. Scraping publicly available data is generally considered lawful (see *hiQ Labs v. LinkedIn* as precedent). You remain responsible for complying with HousingAnywhere's Terms of Service and applicable privacy law (e.g. GDPR) if listing data contains personal information.

#### Does this scraper get landlord contact details or reviews?

No. It collects the landlord's public first name, avatar-linked profile URL and identity-verification badge when `scrapeExtraDetails` is enabled — HousingAnywhere never exposes private contact details until a rental is confirmed on its own platform.

#### How many listings can I scrape from one URL?

Set `maxItems` to control how many listings are collected per start URL — there's no hard cap, though very high values on a single city search will take longer and cost more compute units.

#### Do I need a proxy to scrape HousingAnywhere?

No. HousingAnywhere responds reliably without one, which keeps run costs down. Enable datacenter proxies first if you start seeing blocks, and residential only if datacenter proxies stop working.

#### How do I scrape HousingAnywhere with Python?

Install `apify-client`, call this actor with your `startUrls` and `maxItems` in `run_input`, then iterate the resulting dataset — see the Python example above.

#### Can I run this HousingAnywhere scraper on a schedule?

Yes, use [Apify Schedules](https://docs.apify.com/platform/schedules) to run it daily or weekly. Set `cacheProjectName` to the same value across scheduled runs so previously scraped listings are skipped automatically.

#### What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the **Output** tab or through the Apify API.

### 🔗 Other actors you may find useful - Student Housing and Rent Website Scrapers

| Actor | Description |
| ----- | ----------- |
| 🏠 [Spotahome Property Scraper](https://apify.com/confidential_gnat/spotahome-property-scraper) | Scrapes mid-term rental listings from Spotahome, including price, address, coordinates, room count and amenities. |
| 🏡 [Casita Property Scraper](https://apify.com/confidential_gnat/casita-property-scraper) | Scrapes student accommodation listings from Casita, including property details, room types, pricing and facilities. |
| 🎓 [UniAcco Housing Scraper](https://apify.com/confidential_gnat/universityliving-housing-scraper) | Scrapes student housing listings and property details from University Living. |
| 🛏️ [Amber Student Accommodation Scraper](https://apify.com/confidential_gnat/amberstudent-accomodation-scraper) | Scrapes Amber Student accommodation listings — pricing, availability, photos, amenities, location and reviews — from city, area or individual property pages. |
| 🔍 [Rightmove Listing Availability Checker](https://apify.com/confidential_gnat/rightmove-listing-availability-checker) | Checks whether Rightmove property listings are still active or have been removed, given a list of listing URLs. |

### 💬 Support & contact

If you encounter any issues or have questions, please [open an issue](https://github.com/) or reach out via the [Apify Community Forum](https://community.apify.com/).

You can also find more of our actors on the [Apify Store](https://apify.com/store).

# Actor input Schema

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

HousingAnywhere city search URLs (/s/City--Country) or direct listing URLs (/room/...). The type of each URL is detected automatically.

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

Maximum number of listings to scrape for each start URL.

## `scrapeExtraDetails` (type: `boolean`):

Landlord info and the FAQ section only render after JavaScript hydration. Enabling this uses a full browser to fetch listing pages so these two fields can be included; leaving it off scrapes listings faster and cheaper without them.

## `cacheProjectName` (type: `string`):

Optional. When set, listings already scraped under this project name in a previous run are skipped instead of being scraped again.

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

HousingAnywhere responds fine without a proxy. Enable datacenter proxies first if you start seeing blocks, and residential only if datacenter still fails.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://housinganywhere.com/s/Berlin--Germany"
    }
  ],
  "maxItems": 3,
  "scrapeExtraDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://housinganywhere.com/s/Berlin--Germany"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/housinganywhere-property-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 = {
    "startUrls": [{ "url": "https://housinganywhere.com/s/Berlin--Germany" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("confidential_gnat/housinganywhere-property-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 '{
  "startUrls": [
    {
      "url": "https://housinganywhere.com/s/Berlin--Germany"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call confidential_gnat/housinganywhere-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/housinganywhere-property-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/zE8HrnOGmrNWAegbd/builds/JTQqcl66RpKKqNkCr/openapi.json
