# Housing.com Scraper — 32 Cities, 26 Fields, Rent & Buy (`themineworks/housing-com-scraper`) Actor

Scrape Housing.com property listings across Indian cities — price, BHK, area, locality, amenities, coordinates and listing URL. Rent, buy, or commercial. No login, no browser, pay per property. Use it as an MCP server in Claude, ChatGPT & AI agents.

- **URL**: https://apify.com/themineworks/housing-com-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Real estate, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 housing.com listings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Housing.com Scraper: India Rent, Buy & Commercial Property Listings

### Overview

Housing.com Scraper turns any of Housing.com's major Indian cities into a clean, structured feed of property listings. Pick a city, choose rent, buy, or commercial (rent or sale), and it returns ready-to-use records: title, BHK, price, area, address, amenities, map coordinates, and the direct listing URL. No login, no Housing.com account, no API key.

It is a pay-as-you-go alternative to manual copy-paste research and expensive real-estate data feeds. You pay only for the listings you actually keep.

No login required. No API key. Pay only for listings returned. MCP ready for AI agents.

Reliability: blocked, empty, or failed searches are never charged. You only pay for listings actually delivered to your dataset.

### How it works

Housing.com's own search-result web pages are protected by Akamai Bot Manager on the residential rent and buy categories, which returns a hard block to conventional HTTP scraping and even to a full headless browser. Rather than fight that wall, this actor calls the same internal GraphQL API that Housing.com's own web app uses to fetch its search results (`mightyzeus-mum.housing.com/api/gql`). That endpoint is unauthenticated and returns the same live listing data the website itself displays, with no browser rendering required. This keeps runs fast, cheap, and free of the fragility that comes with scraping rendered HTML.

Because Housing.com identifies each city by an internal location code that has no derivable relationship to the city's name, this actor ships a verified lookup table covering 32 major metros (Bangalore, Mumbai, Delhi/NCR, Hyderabad, Pune, Chennai, Kolkata, Ahmedabad, and more — see the full list in the input field). Common aliases (`Bengaluru`, `Gurugram`, `New Delhi`, `Bombay`, `Calcutta`) resolve to the right city automatically.

For each search it walks the paginated result set, normalizes every raw record into a consistent shape, and stops automatically once Housing.com returns an empty page or your `maxResults` is reached. Only fields genuinely present on the listing are included, so records stay clean and null-free.

### Input configuration

```json
{
  "city": "Bangalore",
  "listingType": "rent",
  "maxResults": 50
}
```

| Field | Type | Description |
| --- | --- | --- |
| `city` | enum | Indian city to search. One of 32 supported major metros (see the input editor for the full list). Required. |
| `listingType` | enum | `rent`, `buy`, `commercial_rent`, or `commercial_buy`. Defaults to `rent`. |
| `maxResults` | integer | Max listings to return. Defaults to 50. |

### Output format

```json
{
  "listing_id": "20149201",
  "title": "2 BHK Flat",
  "listing_type": "rent",
  "property_type": "Flat",
  "bhk": 2,
  "price": 38000,
  "price_label": "₹38,000",
  "price_unit": "per month",
  "deposit": 125000,
  "area_sqft": 1300,
  "carpet_area_sqft": 1200,
  "address": "Viswa Vihar, C V Raman Nagar",
  "city": "Bangalore",
  "latitude": 12.982854,
  "longitude": 77.660843,
  "amenities": ["Furnishing: Semi Furnished", "Build Up: 1300 sq.ft"],
  "description": "This is a modern and stylish home available for affordable rent in Bengaluru...",
  "posted_on": "2026-07-22T08:29:51Z",
  "verified": false,
  "photo_url": "https://is1-3.housingcdn.com/01c16c28/.../bedroom_one.jpg",
  "listing_url": "https://housing.com/rent/20149201-1300-sqft-2-bhk-apartment-on-rent-in-c-v-raman-nagar-bengaluru",
  "scraped_at": "2026-07-31T18:31:29.544Z"
}
```

Every listing record can contain these fields (null or absent fields are omitted):

| Field | Description |
| --- | --- |
| `listing_id` | Housing.com internal listing ID |
| `title` | Listing title (e.g. "2 BHK Flat") |
| `listing_type` | `rent`, `buy`, `commercial_rent`, or `commercial_buy` |
| `property_type` | Flat, Independent House/Villa, Office Space, Commercial Property, New Project, etc. |
| `bhk` | Number of bedrooms, parsed from the title. Null for commercial listings and new-project rows that list a project (not a unit) |
| `price` | Price in INR (monthly for rent, total for buy/commercial) |
| `price_label` | Formatted price string as shown on Housing.com (e.g. "₹38,000" or "₹1.04 Cr - 1.95 Cr" for a project's price range) |
| `price_unit` | `per month` for rent listings, `total` for buy/commercial |
| `deposit` | Security deposit in INR, where applicable |
| `area_sqft` | Built-up area in square feet |
| `carpet_area_sqft` | Carpet area in square feet, where Housing.com reports it separately |
| `address` | Locality / address string as shown on the listing |
| `city` | City searched |
| `latitude` / `longitude` | Coordinates |
| `amenities` | Readable highlight bullets (furnishing, build-up area, floors, seats, zone type, etc.) |
| `description` | Full listing description, HTML tags stripped |
| `posted_on` | Listing posted date |
| `verified` | Whether Housing.com marks the listing verified |
| `photo_url` | Primary listing photo URL |
| `listing_url` | Full Housing.com listing URL |
| `scraped_at` | ISO timestamp of capture |

### Common use cases

**Real estate market research**
Track asking rents and sale prices by locality across a whole city.
Build a price-per-sqft dataset for any of the 32 supported markets.

**Lead generation for agents and brokers**
Pull fresh listings in your operating localities every run and act on the newest ones first.
Compare BHK configurations and price bands to spot where supply is thin.

**Commercial real estate sourcing**
Pull office space and commercial property listings for rent or sale — floors, seats, zone type, and built-up/carpet area are captured for every commercial record.

**Proptech and analytics**
Feed a rental yield or affordability model with live, structured supply data.
Geo-plot inventory using the latitude and longitude on every record.

**Relocation and tenant tools**
Build a shortlist for a client or an internal relocation desk by city and listing type.
Compare furnishing and amenity highlights across neighbourhoods.

### Getting started

1. Pick the `city` you want to search from the dropdown, e.g. `Bangalore` or `Mumbai`.
2. Choose the `listingType`: rent, buy, or commercial (rent or sale).
3. Set `maxResults` to control volume and cost.
4. Click Start, then download the dataset as JSON, CSV, or Excel, or pull it via API or MCP.

### FAQ

**Which cities does it support?**
32 major Indian metros, selectable from the input dropdown: Ahmedabad, Bangalore, Bhopal, Bhubaneswar, Chennai, Coimbatore, Dehradun, Delhi/NCR, Faridabad, Gandhinagar, Ghaziabad, Goa, Greater Noida, Gurgaon, Guwahati, Hyderabad, Indore, Jaipur, Kolkata, Lucknow, Mohali, Mumbai, Nagpur, Nasik, Navi Mumbai, Noida, Pune, Ranchi, Surat, Thane, Vadodara, and Varanasi. Common aliases (Bengaluru, Gurugram, New Delhi, Bombay, Calcutta) are mapped automatically. Housing.com identifies each city with an internal code with no relationship to its name, so — unlike a plain-slug site — this actor ships a verified list rather than accepting freeform city text it cannot resolve.

**Does it scrape rent, buy, and commercial?**
Yes. Set `listingType` to `rent` or `buy` for residential, or `commercial_rent` / `commercial_buy` for commercial listings (office space, shops, warehouses). Commercial listings expose zone type, seats, and floor count in `amenities` where Housing.com provides them.

**Why doesn't it accept a freeform city name like the 99acres actor does?**
99acres' search URLs use a plain, derivable city slug. Housing.com's search API requires an opaque internal location hash per city that cannot be computed from the city name — it has to be looked up. This actor ships a verified table for 32 major metros rather than guessing.

**How much does it cost?**
Pay per event: $0.002 per listing returned. You are charged only for listings actually delivered, never for empty or blocked runs. No subscription and no monthly minimum.

**Does it need a login or API key?**
No. It calls only Housing.com's own public search API. It never logs in, never uses cookies, and never touches any account.

### Use in Claude, ChatGPT & any MCP agent

```
https://mcp.apify.com/?tools=themineworks/housing-com-scraper
```

Or call it programmatically with the Apify client:

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/housing-com-scraper').call({
  city: 'Bangalore',
  listingType: 'rent',
  maxResults: 50,
});

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

### Related real estate actors

Pair this with the rest of the themineworks India real-estate lineup:

- **[99acres Scraper](https://apify.com/themineworks/99acres-scraper)**: 99acres.com rent, buy, PG & commercial listings.
- **[MagicBricks Scraper](https://apify.com/themineworks/magicbricks-scraper)**: MagicBricks rent & buy listings.
- **[NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper)**: brokerage-free NoBroker rent & sale listings.
- **[Zillow Search Scraper](https://apify.com/themineworks/zillow-search-scraper)**: US for-sale listings by location.
- **[Redfin Scraper](https://apify.com/themineworks/redfin-scraper)**: US Redfin for-sale and sold listings.
- **[Realtor.com Scraper](https://apify.com/themineworks/realtor-scraper)**: US Realtor.com listings with agent data.

Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.

# Actor input Schema

## `city` (type: `string`):

Indian city to search. Housing.com identifies each city by an internal location code that cannot be derived from the name, so this actor supports this fixed list of major metros (verified live against each one).

## `listingType` (type: `string`):

What kind of listings to scrape.

## `maxResults` (type: `integer`):

Maximum number of listings to return.

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

Indian residential proxy is recommended.

## Actor input object example

```json
{
  "city": "Bangalore",
  "listingType": "rent",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# 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 = {
    "city": "Bangalore",
    "listingType": "rent",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/housing-com-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 = {
    "city": "Bangalore",
    "listingType": "rent",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/housing-com-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "city": "Bangalore",
  "listingType": "rent",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call themineworks/housing-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=themineworks/housing-com-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hmQxevPT325c1jXDz/builds/4QFl28ubW9xxy0oXG/openapi.json
