Housing.com Scraper icon

Housing.com Scraper

From $0.70/1K. Scrape residential property listings from Housing.com across 750+ cities. Extract structured data for properties available to buy or…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Housing.com Scraper at a glance

Housing.com Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes listingid, title, address, type and price, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.00 per 1,000 results on the Apify Free plan and from $0.70 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Real Estate, Developer Tools, Automation
Pricing
$1.00 per 1,000 results (Free plan), from $0.70 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
25 options

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.

What Housing.com Scraper can do

  • 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.

Choose what to collect

These inputs let you configure Housing.com Scraper - Buy & Rent Property Listings. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredScraping mode: 'search' builds query from city/locality, 'url' extracts locality from provided housing.com URLs

Choices: search, url

urlsarrayHousing.com URLs (url mode only): city pages /in/buy/ or /in/rent/, locality pages /in/buy//, (buy or rent). Search-result links such as /search?f=... are not supported. Single project or listing pages are not supported and are skipped with a warning.
servicestringBuy or Rent

Choices: buy, rent

citystringCity name (e.g. 'Mumbai', 'Delhi', 'Bangalore', 'Pune'). Use the city listing to find exact names.
localitystringLocality/area within the city (e.g. 'andheri_west', 'bandra_west'). Leave empty for entire city.
citiesarrayExtra cities to scrape in the same run, in addition to City (e.g. ["Pune", "Bangalore"]). Same Service applies to all. Max Properties is a total across all cities. Ignored in URL mode.
min_priceintegerMinimum price in INR. Post-filter, applied client-side after fetching results. For buy: e.g. 5000000 = 50 Lakhs. For rent: e.g. 30000 = ₹30K/month.
Show 18 more inputs
More input fields
InputWhat it controls
max_priceintegerMaximum price in INR. Post-filter, applied client-side.
min_bhknumberMinimum BHK (e.g. 2 for 2+ BHK). Post-filter, applied client-side.
max_bhknumberMaximum BHK (e.g. 3 for up to 3 BHK). Post-filter, applied client-side.
property_typestringFilter by property type. Post-filter, applied client-side.

Choices: project, resale, rent

days_oldintegerOnly keep listings posted within the last N days. Post-filter on the listing's posted date; listings with no posted date are kept. In incremental mode a tracked listing that is still live but has aged past the window is retired quietly, with no EXPIRED row.
max_propertiesintegerMaximum number of properties to scrape (0 = the 100,000 maximum)
max_pagesintegerMaximum number of result pages (30 listings per page)
dataset_namestringCustom dataset name (leave empty for default)
clear_datasetbooleanClear the dataset before scraping
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull of properties without returning or charging for properties already collected there. Use this after an interrupted run, or when continuing a pull in another run. For recurring daily monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring of the same city/locality/URL search. The first run returns all matching properties as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED properties -- a property is UPDATED only when its own listed details change (price, title, area, amenities, images, etc.); the scraped_at timestamp is ignored for this comparison since it always differs run to run by construction (every returned property still carries its current scraped_at value). Turn on "Emit unchanged" or "Emit expired" only when you also want those properties returned (and billed). State is kept separately for each city/locality/service or URL set and filter combination; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the city/locality/service (or URLs) and filters used -- different search setups then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return properties that have not changed since the last run, marked UNCHANGED. This returns -- and bills -- extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return properties that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search to its natural end -- not when Max Properties or Max Pages capped it, or when Resume was used. This returns -- and bills -- extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayIncremental mode only. Field names (for example tags or highlights) that must NOT make a property count as UPDATED when only they change. The fields are still returned in every row; they are just left out of the comparison and out of changedFields. scraped_at is always ignored. Fields added in a later version are compared only once your saved baseline already contains them (no one-time wave of UPDATED rows). Leave empty to compare every other field.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

listingIdlistingId
titleTitle
addressAddress
propertyTypeType
price_displayPrice
area_valueArea
area_unitUnit
subtitleConfig
urlurl
latitudeLat
longitudeLng
featuresfeatures
Show 26 more fields
bhk_configsbhk_configs
amenitiesamenities
sellersSeller
emiEMI
tagsTags
postedAtpostedAt
updatedAtupdatedAt
possessionDatepossessionDate
isVerifiedisVerified
verificationStatusverificationStatus
projectNameprojectName
citycity
transactionTypetransactionType
furnishingfurnishing
facingfacing
floorNumberfloorNumber
totalFloorstotalFloors
bedroomsbedrooms
constructionStatusconstructionStatus
ageOfPropertyageOfProperty
pricePerAreapricePerArea
isReraVerifiedisReraVerified
changeTypeChange
changedFieldsChanged fields
firstSeenAtFirst seen
lastSeenAtLast seen

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "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"
}

Ways to use this data

  • 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.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Housing.com Scraper return?

The documented output for Housing.com Scraper includes listingid, title, address, type, price, area, unit and config. Availability of each field depends on the source page and the selected mode.

How much does Housing.com Scraper cost?

It costs $1.00 per 1,000 results on the Apify Free plan and from $0.70 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

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.

Ready to collect with Housing.com Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.