Housing.com Scraper - Buy & Rent Property Listings avatar

Housing.com Scraper - Buy & Rent Property Listings

Pricing

from $0.70 / 1,000 results

Go to Apify Store
Housing.com Scraper - Buy & Rent Property Listings

Housing.com Scraper - Buy & Rent Property Listings

From $0.70/1K. Scrape residential property listings from Housing.com across 750+ cities. Extract structured data for properties available to buy or rent, including prices, locations, property details, and more.

Pricing

from $0.70 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

65

Total users

11

Monthly active users

4 days ago

Last modified

Share

Housing.com Scraper: India Property Listings, Prices & BHK Configurations

Housing.com Scraper turns Housing.com into structured property data across 750+ Indian cities. Search by city and locality, or paste Housing.com search links, to get price, BHK configurations, area, coordinates, amenities, images, seller details, EMI estimates and RERA tags for buy and rent listings. Run it once for a snapshot, or schedule it to track only new and changed listings, then export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • Two ways to find listings. Build a search from city, locality and service, or paste Housing.com search URLs directly.
  • 750+ Indian cities, with common aliases resolved automatically (Bangalore/Bengaluru, Bombay/Mumbai, Calcutta/Kolkata, Madras/Chennai, Gurgaon/Gurugram).
  • Rich property data. Price, individual BHK configurations with their own pricing and area, coordinates, amenities, images, seller and agency names, EMI estimates and tags such as RERA verification.
  • Buy and rent, new projects and resale, all through the same scraper.
  • Post-search filters for price range, BHK count and property type, so the dataset only contains what matches.
  • Built for schedules. Incremental mode returns only new and changed listings on recurring runs, and a run that stalls before completing fails loudly instead of returning an empty dataset.
  • Resume an interrupted pull without paying to recollect properties you already have.

Use Cases

  • Real estate investors and analysts: track prices per locality over time to spot undervalued areas or fast-moving markets.
  • Property portals and aggregators: enrich or cross-list Housing.com inventory inside your own site or app.
  • Agents and brokers: monitor competing listings, new projects and price changes in your service area.
  • Home buyers and renters: build a structured shortlist across multiple localities and cities instead of browsing page by page.
  • Market researchers: build historical datasets of listings, EMI estimates and amenities for analysis.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
listingId"P123ab4567cd"
title"Sunrise Heights"
subtitle / address"2, 3 BHK Flats" / "Andheri West, Mumbai"
propertyType"resale" (also "project", "rent")
price_display"Rs 1.85 Cr"
price_values[16500000, 21000000]
currency"INR"
area_value / area_unit950 / "sq.ft"
latitude / longitude19.1197 / 72.8468
features["2, 3 BHK", "Possession: Dec 2026", "Avg. Price: Rs 19,500/sq.ft"]
bhk_configsindividual BHK options, each with its own price_display, area and label
amenities["Swimming Pool", "Gym", "Power Backup"]
sellers / seller_firms / highlights["Anita Sharma"] / ["Sharma Realty"] / ["Covered Parking"]
emi / tags"Rs 1,28,450/mo" / ["rera_verified"]
images / image_countup to 15 image URLs / 12
urlfull listing URL on Housing.com
postedAt / updatedAt / city / transactionTypeISO timestamps posted / last updated; "Mumbai"; "buy" or "rent"
bedrooms / furnishing / facing2 / "Semi Furnished" / "west facing" (when the listing states them)
floorNumber / totalFloors"12" / 21
constructionStatus / possessionDate / ageOfProperty / pricePerArea"Ready to move" / "Sep, 2029" / "1 Years Old" / "31.43 K/sq.ft"
isVerified / verificationStatus / isReraVerifiedverification flags and type (e.g. DC_VERIFIED)
isBrokerageChargeable / isMostContacted / projectName / projectIdlisting flags and the project the listing belongs to
coverImageUrl / configurations / carpet_area_value / carpet_area_unitcover image, available BHK configurations, carpet area (only when listed)
scraped_at"2026-09-28T05:12:33"
changeType / changedFields / firstSeenAt / lastSeenAtincremental mode only: change label, changed field names and ISO timestamps for this state key

How to Use

  1. Pick a mode: search (build a query from city, locality and service) or url (paste Housing.com search links).
  2. Fill in the fields for that mode, and set any price, BHK or property type filters you want.
  3. Set Max Properties and Max Pages to control run size and cost, then click Start. Max Properties is capped at 100,000 per run (0 means that cap).
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Buy properties in Mumbai:

{
"mode": "search",
"service": "buy",
"city": "Mumbai",
"max_properties": 30
}

3 BHK apartments in Andheri West under a price cap:

{
"mode": "search",
"service": "buy",
"city": "Mumbai",
"locality": "andheri_west",
"min_bhk": 3,
"max_bhk": 3,
"max_price": 50000000,
"max_properties": 50
}

Paste a Housing.com search link:

{
"mode": "url",
"urls": ["https://housing.com/in/rent/bangalore/koramangala"]
}

Daily monitoring of a search (incremental mode):

{
"mode": "search",
"service": "rent",
"city": "Bangalore",
"locality": "koramangala",
"max_properties": 200,
"incrementalMode": true,
"emitExpired": true
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/housing-com-scraper").call(run_input={"mode": "search", "service": "buy", "city": "Mumbai", "max_properties": 30})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["price_display"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/housing-com-scraper').call({ mode: 'search', service: 'buy', city: 'Mumbai', max_properties: 30 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Filters and Max Properties

min_price, max_price, min_bhk, max_bhk and property_type are post-filters: the actor fetches full pages of results from Housing.com first, then keeps only the properties that match. max_properties counts properties that passed those filters, not raw pages fetched, so a narrow filter combined with a low max_pages can return fewer properties than max_properties asks for simply because the scan ran out of pages to filter from. Raise max_pages to give it more to filter from.

Resume and recurring updates

Two distinct features:

  • Resume (resumeFromRunId) continues one interrupted pull. Paste a previous run ID or dataset ID to pick up where it left off.
  • Incremental mode (incrementalMode) is for scheduling this actor daily or weekly against the same city/locality/service (or URL set) and filters, and getting only what changed. The first run returns every matching property as NEW. Later runs return NEW, UPDATED and REAPPEARED properties by default; UNCHANGED properties are suppressed (not returned, not billed) unless emitUnchanged is on. EXPIRED properties (tracked previously, no longer found; a property that is still listed but aged past days_old is retired quietly with no row) are only produced when emitExpired is on and the run fully scanned the tracked search to its natural end, not when max_properties or max_pages capped it, and not when resumeFromRunId was used. stateKey names a monitoring campaign explicitly, or shares state across differently configured runs. ignoreFieldsForChanges lists extra fields to leave out of change detection; changing the list never causes a one-time wave of UPDATED rows. Fields added to the output in a later version (for example postedAt, updatedAt, isVerified, cityId, locality) are compared only once your saved baseline already contains them, so upgrading never causes a one-time wave of UPDATED rows; from the next run on they are compared like every other field.

Supported URL shapes and output views

In url mode the scraper accepts these Housing.com search links:

  • https://housing.com/in/buy/<city> and https://housing.com/in/rent/<city> (whole city)
  • https://housing.com/in/buy/<city>/<locality> and https://housing.com/in/rent/<city>/<locality> (one locality)

Links to a single project or listing page cannot be fetched and are skipped with a warning in the run log. If none of your links is usable the run fails with "No valid URLs parsed from input". Leaving urls untouched scrapes the four prefilled examples.

The dataset has four views: Overview, Map View, Full Details, and Changes (incremental), which shows changeType, changedFields, firstSeenAt, lastSeenAt, title, price and URL for runs with incremental mode on.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch builds a query from city, locality and service; url extracts listings from Housing.com search URLs you paste.
urlsarrayone example per supported shape (buy city, buy locality, rent city, rent locality)Housing.com URLs: /in/buy/<city>, /in/rent/<city>, and /in/<buy|rent>/<city>/<locality>. Search-result links (/search?f=..., /searches/...) are not supported (those pages do not exist on the site). Single project or listing pages are skipped with a warning. Used only in url mode; a URL-mode run with the field untouched now scrapes these four examples instead of failing.
servicestringbuybuy or rent. Used only in search mode.
citystringMumbaiCity name (e.g. Mumbai, Delhi, Bangalore, Pune). Used only in search mode.
localitystring(none)Locality within the city (e.g. andheri_west, bandra_west). Leave empty for the entire city. Used only in search mode.
citiesarray(none)Extra cities to scrape in the same run, on top of city. Same service for all; Max Properties is the total across cities. Search mode only.
days_oldinteger(none)Keep only listings posted within the last N days. Post-filter; listings with no posted date are kept.
min_priceinteger(none)Minimum price in INR. Post-filter, applied after fetching results.
max_priceinteger(none)Maximum price in INR. Post-filter, applied after fetching results.
min_bhknumber(none)Minimum BHK, 1 to 6. Post-filter.
max_bhknumber(none)Maximum BHK, 1 to 6. Post-filter.
property_typestring(none)project, resale, or rent. Post-filter.
max_propertiesinteger30Maximum number of properties to scrape, up to 100,000. 0 means that 100,000 maximum.
max_pagesinteger1000Maximum number of result pages to fetch, 30 listings per page.
dataset_namestring(none)Custom dataset name. Leave empty for the default dataset.
clear_datasetbooleanfalseClear the dataset before scraping.
resumeFromRunIdstring(none)Paste a previous run ID or dataset ID to continue an interrupted pull, picking up where it left off.
incrementalModebooleanfalseTurn on for daily or recurring monitoring of the same search. Later runs return only new, updated and reappeared properties.
stateKeystring(none)Name a monitoring campaign, or share state across differently configured runs. Incremental mode only.
emitUnchangedbooleanfalseAlso return (and bill) properties unchanged since the last run. Incremental mode only.
emitExpiredbooleanfalseAlso return (and bill) properties no longer found, once a run fully scans the tracked search. Incremental mode only.
ignoreFieldsForChangesstring listemptyField names (for example tags or highlights) that must not make a property UPDATED when only they change. They stay in the output but are left out of the comparison and of changedFields; scraped_at is always ignored. Incremental mode only.
proxyobject(none)Optional proxy configuration. The scraper works without one.
mcpConnectorsarray(none)Optional: send a summary of each property to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which property pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"listingId": "P123ab4567cd",
"title": "Sunrise Heights",
"subtitle": "2, 3 BHK Flats",
"address": "Andheri West, Mumbai",
"propertyType": "resale",
"price_display": "Rs 1.85 Cr",
"price_values": [16500000, 21000000],
"currency": "INR",
"area_value": 950,
"area_unit": "sq.ft",
"latitude": 19.1197,
"longitude": 72.8468,
"features": ["2, 3 BHK", "Possession: Dec 2026", "Avg. Price: Rs 19,500/sq.ft"],
"bhk_configs": [
{ "id": "cfg1", "price_display": "Rs 1.65 Cr", "area": "750 sq.ft", "label": "2 BHK" },
{ "id": "cfg2", "price_display": "Rs 2.1 Cr", "area": "950 sq.ft", "label": "3 BHK" }
],
"amenities": ["Swimming Pool", "Gym", "Power Backup", "Covered Parking"],
"sellers": ["Anita Sharma"],
"seller_firms": ["Sharma Realty"],
"highlights": ["Covered Parking", "24x7 Security"],
"emi": "Rs 1,28,450/mo",
"tags": ["rera_verified"],
"images": ["https://img.housingcdn.com/sample1.jpg", "https://img.housingcdn.com/sample2.jpg"],
"image_count": 12,
"url": "https://housing.com/in/buy/resale/mumbai/andheri-west/sunrise-heights-p123ab4567cd",
"scraped_at": "2026-09-28T05:12:33.123456"
}

Plan Requirement

No proxy is needed by default: the scraper reads Housing.com's public search data directly, and the run does not use a proxy unless you configure one. Under Proxy & connection you can optionally add Apify Proxy (with your chosen groups, which needs a paid Apify plan) or your own proxy URL; when set, every request goes through it. Proxy traffic is billed to your account, so leave it off unless you need extra headroom for large multi-city runs or frequent monitoring.

FAQ

How much does it cost?

You pay per property returned. Two events apply: apify-default-dataset-item is charged once per property written to the dataset (the unit is one property row), and apify-actor-start is charged once per run, at the start. The Pricing tab on the actor page shows the current rates. Suppressed unchanged properties in incremental mode are not returned and not billed. Use Max Properties to cap the cost of any run.

This actor collects only publicly available property listings. You are responsible for how you use the data: follow Housing.com's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Seller and agent contact details may be personal data in some jurisdictions, handle them accordingly.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. The first scheduled run returns every matching property as NEW; later runs return only NEW, UPDATED and REAPPEARED properties, and unchanged ones are not billed unless you turn on emitUnchanged.

Why did I get fewer properties than Max Properties?

min_price, max_price, min_bhk, max_bhk and property_type are post-filters: the actor fetches full pages of results from Housing.com first, then keeps only the properties that match. If your filters are narrow, raise Max Pages so the actor has more listings to filter from; a low page cap can run out of pages before reaching your target count.

Why did my run fail instead of returning an empty dataset?

If a search stops before reaching Housing.com's own end of results, and nothing was collected, the run fails with a clear message instead of finishing as an empty success. When the requests themselves keep failing (five in a row) the run stops at once instead of retrying every remaining search, and the message says it is a connection problem: run it again in a few minutes. When the city or locality is not recognised, the message names the value you entered and asks you to check its spelling (the way Housing.com writes it, for example andheri_west) instead. A search that genuinely has no matching properties, or whose results were all excluded by your filters, still finishes successfully with an empty or partial dataset.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

🔗 Want more real estate data?

Pair this actor with these related scrapers from the same team:

🏨 Hipflat Scraper Thailand Property & Projects
Scrape hipflat.co.th property listings and new-project data across Thailand: price, price...
🏠 Property Finder UAE Scraper
Scrape PropertyFinder.ae listings at scale. Extract prices, property details, images...
🏠 Fotocasa.es
From $1/1K. Scrape Spain property listings from fotocasa.es. Get price, surface, rooms...
🏠 ImmobilienScout24.de Scraper
$0.9💰/1K for Gold discount. Extract property listings from immobilienscout24.de...
🏠 Idealista Scraper
From $1/1K. Scrape Idealista properties across Spain, Italy, and Portugal. Extract 35+...
🏠 PropertyGuru SG Scraper
From $0.80/1K. Scrape PropertyGuru.com.sg sale and rental listings with 30+ structured...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.