# Housing.com Scraper - India Property Listings & Prices (`haketa/housing-scraper`) Actor

Scrape property listings from Housing.com across India for buy or rent: price range, BHK configuration, address, property type, seller name & phone, posting date and features. Export to JSON, CSV or Excel for research and lead generation.

- **URL**: https://apify.com/haketa/housing-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Real estate, Lead generation
- **Features:** Limited permissions
- **Stats:** 19 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Housing.com Scraper 🏠🇮🇳 — India Property Listings, Prices & Seller Contacts

**Extract property listings from [Housing.com](https://housing.com) — one of India's largest real-estate portals — into clean, structured data.** This **Housing.com scraper** turns any Indian city into a downloadable dataset of **for-sale and rental properties**, capturing the **title, BHK configuration, price range, locality and full address, property type, seller/developer name and phone, possession status, posting date, photo count and listing features** — no login, no coding, no manual copy-paste.

Bulk export to **JSON, CSV, Excel, or API** with **1,000+ results pagination** for Indian real-estate B2B intelligence and lead generation.

> Built for **real-estate analysts, PropTech teams, lead-generation agencies, property brokers, developers, data journalists and institutional investors** who need fresh, structured Indian property data at scale.

[![Actor](https://img.shields.io/badge/Apify-Actor-00b04f?style=flat-square\&logo=apify)](https://apify.com/haketa/housing-scraper)
[![Market](https://img.shields.io/badge/Market-India%20🇮🇳-ff9933?style=flat-square)](https://apify.com/haketa/housing-scraper)
[![Buy & Rent](https://img.shields.io/badge/Buy%20%26%20Rent-Supported-brightgreen?style=flat-square)](https://apify.com/haketa/housing-scraper)
[![Scale](https://img.shields.io/badge/Pagination-1%2C000%2B%20Listings-blue?style=flat-square)](https://apify.com/haketa/housing-scraper)
[![Seller Phone](https://img.shields.io/badge/Leads-Seller%20Name%20%2B%20Phone-success?style=flat-square)](https://apify.com/haketa/housing-scraper)
[![Output](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel%20%7C%20API-2b7489?style=flat-square)](https://apify.com/haketa/housing-scraper)

***

### ⚡ At a glance

| Feature | Details |
|---|---|
| **Target Portal** | [Housing.com](https://housing.com) — India's leading residential real-estate & new-project marketplace |
| **Markets Covered** | All major Indian metros & Tier-2 cities (`mumbai`, `bangalore`, `pune`, `hyderabad`, `delhi`, `gurgaon`, `noida`, `chennai`, `kolkata`, `ahmedabad`, `thane`, `navi-mumbai` & more) |
| **Listing Modes** | **Buy** (`buy` — new projects & resale homes) and **Rent** (`rent` — rental apartments & houses) |
| **Core Data Extracted** | Listing ID, URL, Title, BHK Subtitle, Property Type, Price Display, `priceMin` & `priceMax` (INR), Locality, Detailed Address, Seller/Developer Name, Seller Type, Seller Phone, Posted Date, Possession Status & Date, Verification Status, Rating, Photo Count, Features |
| **Pagination & Scale** | Automatic locality (`-gid`) & filter (`-fid`) sub-page discovery + multi-city scaling supporting **1,000+ property listings** per run |
| **Deduplication** | 100% deduplicated by unique Housing.com `id` (`0 duplicates`) |
| **Export Formats** | Bulk export to **JSON, CSV, Excel (XLSX), HTML, XML, RSS, or REST API** |

***

### 🔎 Why scrape Housing.com?

[Housing.com](https://housing.com) is one of India's premier property portals, carrying vast inventory across every major metro and emerging Tier-2 corridor — RERA-registered developer projects, resale apartments, builder floors, independent villas, residential plots and rental homes. A single metro like Mumbai, Bengaluru or Pune contains **tens of thousands of active listings**, each rich with INR pricing bands, locality hierarchy, BHK configurations, possession timelines and seller/developer contact details.

However, extracting this data manually is impractical: listings sit behind an infinite-scroll front end protected by enterprise bot mitigation, city landing pages only display a small subset of curated carousels, and there is no public **Housing.com API** for bulk export.

This **Housing.com scraper** (`housing-scraper`) automates the entire discovery and extraction pipeline. Point it at one or more Indian cities (for sale or rent) — or paste custom Housing.com search/locality URLs — and it systematically traverses locality and filter groups, deduplicates every property by ID, and delivers a clean table ready for **real-estate lead generation**, price-per-square-foot benchmarking, and PropTech analytics.

**Common reasons teams use this Housing.com data extractor:**

- 📊 **Locality & BHK price analytics** — track `priceMin` and `priceMax` in INR across micromarkets (e.g. Andheri West vs Powai vs Whitefield vs Hinjewadi) by 1 BHK, 2 BHK, 3 BHK and 4+ BHK configurations.
- 📞 **Real-estate B2B lead generation** — export active **developer, broker and owner contacts** (`sellerName`, `sellerType`, `sellerPhone`) into your CRM or sales outreach workflow.
- 🏗️ **New-launch developer project tracking** — monitor new project launches, `possessionStatus` (`Under Construction`, `Ready to Move`, `Launched`), and expected `possessionDate` across Indian metros.
- 🏘️ **PropTech portal & valuation model feeds** — populate property comparison apps, automated valuation models (AVMs), and mortgage underwriting databases with live Indian housing inventory.
- 📈 **Institutional real-estate investment research** — compare absorption indicators, verified listing ratios, and developer market share across Mumbai MMR, NCR, Bengaluru, Hyderabad and Pune.
- 🕵️ **Competitor & broker inventory monitoring** — track which builders and channel partners dominate specific localities and price brackets.

***

### ✨ What this Housing.com scraper does

- ✅ **Scrape any Indian city by name** — pass `mumbai`, `bangalore`, `pune`, `delhi`, `hyderabad`, `chennai`, `gurgaon`, `noida`, `kolkata`, `ahmedabad`, `thane`, `navi-mumbai` and more. Leaving `cities` and `startUrls` empty automatically runs a diverse multi-metro sample.
- ✅ **Buy or Rent support** — toggle between properties for sale (`buy`) and rental listings (`rent`) with a single dropdown.
- ✅ **Deep locality (`-gid`) & filter (`-fid`) expansion** — instead of stopping at the 20–30 cards on a city homepage, the scraper automatically discovers and walks the city's underlying locality and filter sub-pages, unlocking **hundreds to 1,000+ unique listings** per run.
- ✅ **Incremental streaming & 100% deduplication** — streams deduplicated records directly to the Apify Dataset in real time keyed on Housing.com's unique `id`.
- ✅ **Normalized INR pricing** — extracts both the human-readable `priceDisplay` (e.g. `"₹2.24 Cr - 15.01 Cr"`, `"₹65.0 L"`, `"₹27,000"`) and numeric **`priceMin` / `priceMax` in Rupees (INR)** for immediate sorting and aggregation.
- ✅ **Seller & developer lead extraction** — captures **`sellerName`** (e.g. `"Avant Group"`, `"Lodha"`, `"Godrej Properties"`), **`sellerType`** (`Developer`, `Agent`, `Owner`, `Builder`), and **`sellerPhone`**.
- ✅ **Project & verification metadata** — includes **`postedDate`**, **`possessionStatus`**, **`possessionDate`**, **`isVerified`**, **`verificationStatus`**, **`imageCount`**, **`rating`** and **`features`**.
- ✅ **Paste-a-URL mode (`startUrls`)** — paste any Housing.com city, locality (`-gid`), filter (`-fid`), or `/searches/...` URL for surgical extraction.

***

### 🎯 Use cases & B2B intelligence workflows

#### 1. Real-Estate Broker & Channel Partner Lead Generation

Real-estate marketing agencies, interior design studios, home-loan DSA teams, and PropTech SaaS vendors extract `sellerName`, `sellerType` (`Developer`, `Agent`, `Owner`), `sellerPhone`, and `address` to build hyper-targeted B2B prospect lists segmented by city and price bracket.

#### 2. Developer Competitive Intelligence & Launch Monitoring

Residential developers in Mumbai MMR, Pune, Bengaluru, Hyderabad and Delhi-NCR schedule weekly runs to track competitor project launches (`propertyType: "project"`), BHK mix (`subtitle`), pricing bands (`priceMin` / `priceMax`), and `possessionDate` commitments across neighboring localities.

#### 3. Automated Valuation Models (AVM) & FinTech Underwriting

Housing finance companies (HFCs), banks, and real-estate research desks ingest thousands of active listings to maintain locality-level price indices by BHK configuration and construction stage (`Ready to Move` vs `Under Construction`).

#### 4. PropTech Aggregators & Relocation Portals

Consumer property apps and corporate relocation platforms use the Apify API to keep their Indian residential inventory synchronized with fresh listings, verification flags, and feature tags.

***

### 📥 Input parameters

The Actor provides a clean, no-code input form. Provide **`cities`** and/or Housing.com **`startUrls`**, select **`service`** (`buy` or `rent`), and set **`maxItems`**.

| Field | Type | Default | Description |
|---|---|---|---|
| `cities` | `array<string>` | `["mumbai"]` | One or more Indian cities to scrape (e.g. `mumbai`, `bangalore`, `delhi`, `pune`, `hyderabad`, `chennai`, `gurgaon`, `noida`, `kolkata`, `ahmedabad`). Leave empty to scrape a diverse multi-city sample. |
| `service` | `string` | `"buy"` | `"buy"` (properties for sale — new projects & resale) or `"rent"` (rental properties). |
| `startUrls` | `array` | `[]` | Optional Housing.com city, locality (`-gid`), filter (`-fid`), or `/searches/...` URLs (e.g. `https://housing.com/in/buy/real-estate-mumbai` or `https://housing.com/in/buy/mumbai/andheri-west-gid/`). Scraped in addition to `cities`. |
| `maxItems` | `integer` | `200` (prefill `100`) | Maximum number of unique property listings to collect across all cities and URLs. Set `0` for unlimited. |
| `proxyConfiguration` | `object` | IN Residential | Proxy settings. **Indian residential proxies (`IN`) are enabled by default** and strongly recommended for uninterrupted extraction. |

#### Option A — Scrape one or more cities (easiest)

```json
{
  "cities": ["mumbai", "pune", "bangalore"],
  "service": "buy",
  "maxItems": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

#### Option B — Scrape rental listings

```json
{
  "cities": ["bangalore", "hyderabad"],
  "service": "rent",
  "maxItems": 300
}
```

#### Option C — Scrape specific Housing.com locality or filter URLs

```json
{
  "startUrls": [
    { "url": "https://housing.com/in/buy/real-estate-hyderabad" },
    { "url": "https://housing.com/in/buy/mumbai/andheri-west-gid/" }
  ],
  "service": "buy",
  "maxItems": 500
}
```

#### Option D — Pan-India top 6 metro sweep (1,500+ listings)

```json
{
  "cities": ["mumbai", "bangalore", "pune", "hyderabad", "gurgaon", "noida"],
  "service": "buy",
  "maxItems": 1500
}
```

***

### 🏙️ Supported Indian Metros & Micromarket Coverage

| City Slug (`cities`) | Metro / State | Key Micromarkets & Localities Covered (`-gid` expansion) | Typical Inventory Mix |
|---|---|---|---|
| `mumbai` | Mumbai (Maharashtra) | Andheri West/East, Bandra, Powai, Goregaon, Malad, Kandivali, Borivali, Worli, Lower Parel, Chembur | High-rise RERA projects, luxury towers & suburban resale |
| `thane` / `navi-mumbai` | MMR Extended | Ghodbunder Road, Majiwada, Kharghar, Panvel, Vashi, Airoli, Ulwe | Township developments & mid-segment 1/2/3 BHK |
| `bangalore` | Bengaluru (Karnataka) | Whitefield, Sarjapur Road, Electronic City, Hebbal, Yelahanka, Koramangala, Indiranagar, Devanahalli | IT-corridor gated apartments, villas & plots |
| `pune` | Pune (Maharashtra) | Hinjewadi, Wakad, Baner, Balewadi, Kharadi, Hadapsar, Viman Nagar, Wagholi | IT-park residential projects & high-yield rentals |
| `hyderabad` | Hyderabad (Telangana) | Gachibowli, Kondapur, Kokapet, Tellapur, Miyapur, Madhapur, Kompally, Financial District | High-rise luxury gated communities & villas |
| `gurgaon` | Gurugram (NCR) | Dwarka Expressway, Golf Course Extension, Sohna Road, New Gurgaon, Sector 65–113 | Luxury builder floors, DLF/Sobha/Godrej high-rises |
| `noida` / `delhi` | Noida & Delhi NCR | Noida Expressway, Sector 150, Greater Noida West, Dwarka, South Delhi, Rohini | High-density residential societies & builder floors |
| `chennai` | Chennai (Tamil Nadu) | OMR, Sholinganallur, Porur, Anna Nagar, Velachery, Tambaram, ECR | IT-corridor apartments & independent houses |
| `kolkata` | Kolkata (West Bengal) | New Town, Rajarhat, EM Bypass, Salt Lake, Tollygunge, Joka | Township apartments & resale residential |
| `ahmedabad` | Ahmedabad (Gujarat) | SG Highway, Bopal, South Bopal, Shela, Gift City, Prahlad Nagar, Science City | 3/4 BHK apartments, penthouses & bungalows |

***

### 🔌 Data Warehouse & CRM Integration Workflows

#### Google Sheets & Excel Reporting

Export your dataset directly to **Excel (`.xlsx`)** or **CSV** from the Apify Console, or attach the native **Apify Google Sheets integration** to append fresh Indian property rows after every scheduled run. Pivot on `address` × `subtitle` (BHK) × `propertyType` (`project` vs `resale`) to compute median `priceMin` and `priceMax` per locality.

#### HubSpot, Salesforce & Zoho CRM Lead Enrichment

Pipe active seller records (`sellerName`, `sellerType`, `sellerPhone`, `address`, `url`) via **Make.com, Zapier, or n8n** into your real-estate CRM. Filter on `sellerType === "Developer"` or `sellerType === "Agent"` to route B2B channel-partner leads directly to regional sales teams.

#### PostgreSQL, BigQuery & Snowflake Time-Series Storage

Use an Apify Webhook to ingest each run's `defaultDatasetId` into your SQL warehouse keyed on `(id, postedDate)`. Diffing weekly snapshots reveals newly launched RERA projects, price revisions on existing towers, and possession timeline shifts (`possessionDate`).

***

### 📤 Output schema & sample data

Each property listing is emitted as a clean, flat JSON object (null/empty fields are omitted so records stay compact). Here is a **real item from a live Mumbai run**:

```json
{
  "id": 311427,
  "url": "https://housing.com/in/buy/projects/page/311427-avant-park-west-by-avant-group-in-vile-parle-west",
  "title": "Avant Park West",
  "subtitle": "1, 1.5, 2, 3, 4 BHK Apartments",
  "propertyType": "project",
  "listingType": "buy",
  "priceDisplay": "₹2.24 Cr - 15.01 Cr",
  "priceMin": 22416000,
  "priceMax": 150144000,
  "address": "Vile Parle East, Mumbai",
  "detailedAddress": "Cts No. 824 826 And 827, Ville Parle West, Western Suburbs, Mumbai",
  "sellerName": "Avant Group",
  "sellerType": "Developer",
  "sellerPhone": "77009XXXXX",
  "postedDate": "2023-11-30T14:21:04Z",
  "possessionStatus": "Under Construction",
  "possessionDate": "Jun, 2027",
  "isVerified": true,
  "verificationStatus": "Verified",
  "imageCount": 1,
  "rating": 4.2,
  "features": [
    "Possession Starts",
    "Avg. Price",
    "Formatted per unit price",
    "Sizes"
  ]
}
```

#### Output field reference

**Coverage key:** 🟢 High (~92–100% of listings) · 🟡 Conditional (populated for new-launch projects or verified listings)

##### 🏠 Property Identity & Configuration

| Field | Type | Coverage | Description |
|---|---|---|---|
| `id` | `integer \| string` | 🟢 High | Unique Housing.com listing or project ID (used for automatic deduplication). |
| `url` | `string` | 🟢 High | Canonical URL to the property or project detail page on Housing.com. |
| `title` | `string` | 🟢 High | Property headline or residential project name (e.g. `"Avant Park West"`). |
| `subtitle` | `string` | 🟢 High | BHK configuration & unit summary (e.g. `"2, 3 BHK Apartments"`, `"3 BHK Independent Builder Floor"`). |
| `propertyType` | `string` | 🟢 High | Inventory category: `"project"` (developer launch), `"resale"`, or `"rent"`. |
| `listingType` | `string` | 🟢 High | Transaction type: `"buy"` or `"rent"`. |

##### 💰 Pricing & Location

| Field | Type | Coverage | Description |
|---|---|---|---|
| `priceDisplay` | `string` | 🟢 High | Formatted Indian price string in Lakh / Crore / INR (e.g. `"₹2.24 Cr - 15.01 Cr"`, `"₹85.0 L"`, `"₹27,000"`). |
| `priceMin` | `number` | 🟢 High | Minimum numeric price in INR (e.g. `22416000`). |
| `priceMax` | `number` | 🟡 Conditional | Maximum numeric price in INR for multi-unit developer projects (e.g. `150144000`). |
| `address` | `string` | 🟢 High | Locality and city summary (e.g. `"Vile Parle East, Mumbai"`). |
| `detailedAddress` | `string` | 🟢 High | Full street/sub-locality address line when published. |

##### 📞 Seller / Developer Contact Leads

| Field | Type | Coverage | Description |
|---|---|---|---|
| `sellerName` | `string` | 🟢 High | Name of the developer, real-estate agency, or property owner. |
| `sellerType` | `string` | 🟢 High | Seller classification (`"Developer"`, `"Agent"`, `"Owner"`, `"Builder"`). |
| `sellerPhone` | `string` | 🟢 High | Seller phone number string as published by the portal (~99% fill rate). |

##### 🏗️ Timeline, Verification & Media Metadata

| Field | Type | Coverage | Description |
|---|---|---|---|
| `postedDate` | `string` | 🟢 High | ISO-8601 timestamp when the listing was posted or refreshed. |
| `possessionStatus` | `string` | 🟡 Conditional | Construction/possession stage (`"Ready to Move"`, `"Under Construction"`, `"Possession Started"`, `"Launched"`). |
| `possessionDate` | `string` | 🟡 Conditional | Target or actual possession date (e.g. `"Jun, 2027"`). |
| `isVerified` | `boolean` | 🟡 Conditional | Boolean flag indicating Housing.com verification status. |
| `verificationStatus` | `string` | 🟡 Conditional | Portal verification badge label (e.g. `"Verified"`). |
| `imageCount` | `integer` | 🟢 High | Total number of photos attached to the listing. |
| `rating` | `number` | 🟡 Conditional | Project or locality review score (out of 5) when available. |
| `features` | `array<string>` | 🟢 High | Highlighted listing feature labels. |

***

### 🔁 Pagination & 1,000+ scale

You never have to configure page numbers manually. When you run the **Housing.com scraper**:

1. **Landing & Hydration Extraction:** It fetches the requested city or `startUrls` page and extracts all immediately embedded property records.
2. **Deep Locality (`-gid`) & Filter (`-fid`) Traversal:** It recursively discovers locality and filter sub-pages across the city, extracting search-group hashes (`tokens`) from each sub-page.
3. **Interleaved Search Group Harvesting:** It queries each discovered search group and streams unique listings to your dataset until `maxItems` is reached — with no artificial 120-subpage ceiling.
4. **Multi-City Expansion for 1,000+ Runs:** If you request `1,000+` items (or `maxItems: 0` unlimited) without restricting `startUrls` and a single city's search groups finish before hitting your target, the Actor automatically expands into additional major Indian metros (`mumbai`, `bangalore`, `pune`, `hyderabad`, `delhi`, `gurgaon`, `noida`, `chennai`, `kolkata`, `ahmedabad`, `thane`, `navi-mumbai`) so large bulk runs always deliver full volume.

***

### 💻 API usage examples

#### Python (`apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("haketa/housing-scraper").call(run_input={
    "cities": ["mumbai", "pune"],
    "service": "buy",
    "maxItems": 500,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("id"), item.get("title"), item.get("priceDisplay"), item.get("address"), item.get("sellerName"))
```

#### Node.js (`apify-client`)

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

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

const run = await client.actor('haketa/housing-scraper').call({
    cities: ['bangalore'],
    service: 'buy',
    maxItems: 300,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} Bengaluru properties`);
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~housing-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "cities": ["mumbai"],
        "service": "buy",
        "maxItems": 200
      }'
```

***

### 💡 Best practices & pro tips

- **Start with a 100-listing city sample:** Run the default `mumbai` prefill (`maxItems: 100`) to inspect the output columns in ~20–35 seconds before launching a 1,000+ multi-city harvest.
- **Use `buy` for maximum locality depth:** Housing.com's for-sale (`buy`) hierarchy exposes the richest set of locality (`-gid`) and filter (`-fid`) search groups per city. For `rent`, combine multiple cities (`["mumbai", "bangalore", "pune", "hyderabad", "gurgaon", "noida"]`) when building large rental datasets.
- **Target specific micromarkets via `startUrls`:** Copy any locality URL from Housing.com (e.g. `https://housing.com/in/buy/mumbai/andheri-west-gid/` or `https://housing.com/in/buy/bangalore/whitefield-gid/`) and paste it into `startUrls` to focus exclusively on that sub-market.
- **Keep Indian Residential Proxy (`IN`) enabled:** Housing.com is protected by strict edge security that blocks datacenter IPs; the default Indian residential proxy configuration ensures smooth, high-fill runs.
- **Automate CRM & BI ingestion:** Connect the Actor to Google Sheets, BigQuery, Snowflake, HubSpot, Make, or Zapier using Apify Webhooks or Schedules.

***

### ❓ Frequently asked questions

**Do I need a Housing.com account or API key?**
No. The Actor extracts publicly accessible property listings directly — no login, cookies, or third-party API keys are required.

**How many property listings can I collect in one run?**
A single major metro like Mumbai, Bengaluru, Pune or Hyderabad yields **hundreds of unique listings**, and combining multiple cities (or letting automatic multi-city expansion run with `maxItems: 1000+`) scales smoothly into **1,000+ deduplicated properties** per run.

**Does the output include seller and developer phone numbers?**
Yes. Every listing includes `sellerName`, `sellerType` (`Developer`, `Agent`, `Owner`), and `sellerPhone` as published by Housing.com (note that Housing.com partially masks the last digits of phone numbers on public pages, e.g. `77009XXXXX`). In live verification runs, `sellerName` and `sellerType` populate at **100%** and `sellerPhone` at **~99%**.

**Can I scrape both new developer projects and resale apartments?**
Yes. Both `"propertyType": "project"` (RERA developer launches) and `"propertyType": "resale"` (individual/broker resale units) are captured automatically and distinguished by the `propertyType` column.

**Why are `possessionStatus` and `rating` only populated on some rows?**
Those fields apply primarily to new-launch developer projects (`propertyType: "project"`). Resale and rental units often do not publish a project rating or construction possession date on the portal.

**What happens if I run the Actor with empty input `{}`?**
It automatically seeds a diverse list of major Indian metros (`mumbai`, `bangalore`, `pune`, `hyderabad`, `delhi`, `gurgaon`) and collects a fast 100-listing sample so empty API tests never return 0 results.

***

### ⚠️ Limitations

- Seller phone numbers are returned in the partially masked format (`77009XXXXX`) that Housing.com exposes publicly without OTP login.
- Rental (`service: "rent"`) pages expose fewer locality search tokens per city than for-sale (`service: "buy"`) pages; pass multiple cities in `cities` when scaling rental runs to ratusan/thousands of items.
- Indian residential proxies (`apifyProxyCountry: "IN"`) are required for reliable access.

***

### 🔗 Related scrapers

Scraping real estate and classifieds across global markets? Explore these companion Actors:

- [Daft.ie Scraper](https://apify.com/haketa/daft-scraper) — Ireland's #1 property portal (sale, rent, sharing, commercial, BER & Eircodes).
- [Yad2 Scraper](https://apify.com/haketa/yad2-scraper) — Israel's leading classifieds and real-estate marketplace.
- [ZAP Imóveis Scraper](https://apify.com/haketa/zapimoveis-scraper) — Brazil real-estate listings, prices and condo fees.
- [Boliga Scraper](https://apify.com/haketa/boliga-scraper) — Danish housing listings, prices and historical sales data.
- [Realtor.ca Scraper](https://apify.com/haketa/realtor-ca-scraper) — Canadian MLS property listings and agent profiles.
- [Domain.com.au Scraper](https://apify.com/haketa/domain-com-au-scraper) — Australian real-estate listings for sale, rent and sold history.

***

### 📋 Changelog

- **v1.2 (2026-11-10)** — **Unlocked 1,000+ deep pagination & multi-city scaling:** replaced the fixed 120-subpage ceiling with an interleaved locality (`-gid`) / filter (`-fid`) discovery loop that continues harvesting search groups until `maxItems` is reached, added recursive sub-page discovery and automatic fallback city expansion for `1,000+` runs, added default multi-metro seeding on empty `{}` input, and tuned fast 100-item prefill execution.
- **v1.1 (2026-11-02)** — **Locality & filter sub-page expansion:** added automatic city landing-page expansion into `-gid` and `-fid` sub-pages, increasing single-city yield to 400+ deduplicated listings with 100% core field fill rate.
- **v1.0 (2026-08-14)** — **Initial release:** Housing.com buy and rent property extraction with INR `priceMin`/`priceMax`, BHK configuration, locality/address, seller contact fields and project possession metadata.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/housing-scraper/changelog.md

# Actor input Schema

## `cities` (type: `array`):

One or more Indian cities to scrape (e.g. mumbai, bangalore, delhi, pune, hyderabad, chennai, gurgaon, noida). The scraper harvests listings across the city's localities automatically.

## `service` (type: `string`):

Whether to scrape properties for sale (buy) or for rent.

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

Paste Housing.com city or search URLs (e.g. https://housing.com/in/buy/real-estate-mumbai or a https://housing.com/in/buy/searches/... results URL). Scraped in addition to the cities above.

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

Maximum number of property listings to collect across all cities and URLs. Set 0 for unlimited.

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

Proxy settings. An Indian residential proxy is recommended for reliable, uninterrupted results.

## Actor input object example

```json
{
  "cities": [
    "mumbai"
  ],
  "service": "buy",
  "startUrls": [],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `id` (type: `string`):

Housing.com listing ID

## `url` (type: `string`):

Listing page URL

## `title` (type: `string`):

Property / project name

## `subtitle` (type: `string`):

BHK configuration

## `propertyType` (type: `string`):

Property type

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

Buy or rent

## `priceDisplay` (type: `string`):

Formatted price

## `priceMin` (type: `string`):

Minimum price (INR)

## `priceMax` (type: `string`):

Maximum price (INR)

## `address` (type: `string`):

Locality / address

## `sellerName` (type: `string`):

Seller / developer name

## `sellerPhone` (type: `string`):

Seller phone

## `postedDate` (type: `string`):

Posting date

## `possessionStatus` (type: `string`):

Possession status (Ready to Move / Under Construction / Launched)

## `possessionDate` (type: `string`):

Expected / actual possession date

## `imageCount` (type: `string`):

Number of listing photos

# 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 = {
    "cities": [
        "mumbai"
    ],
    "service": "buy",
    "startUrls": [],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/housing-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 = {
    "cities": ["mumbai"],
    "service": "buy",
    "startUrls": [],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/housing-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 '{
  "cities": [
    "mumbai"
  ],
  "service": "buy",
  "startUrls": [],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call haketa/housing-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/housing-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/a92QjbGazBcdgol9J/builds/V37r2Y0FnR61CUcNz/openapi.json
