# CommonFloor Scraper - Property Listings & Prices (`thirdwatch/commonfloor-scraper`) Actor

Scrape property listings from CommonFloor.com. Get title, price, BHK, area, location, project name, coordinates, and more for buy/rent/PG listings across Indian cities.

- **URL**: https://apify.com/thirdwatch/commonfloor-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Real estate
- **Stats:** 8 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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?

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

## CommonFloor Scraper

> **Thirdwatch portfolio:** 5K users across 88 public Actors, 2M+ records delivered, and >99% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).

> Scrape rent, buy, and PG property listings from CommonFloor.com across Indian cities with 25+ fields per listing including price, deposit, coordinates, and amenities.

### What you get

Structured rent, buy, and PG property data from CommonFloor — one of India's largest real-estate portals, with 34,000+ Bangalore listings alone. Filter by BHK, locality, price range, area, furnishing, tenant type, and availability. With `fetchDetails: true` (default for rent and PG) the scraper also visits each listing's detail page to fill in deposit, furnishing, facing, floor, amenities, and the full description.

### Output fields

| Field | Description |
|-------|-------------|
| `listing_id` | Unique CommonFloor identifier |
| `title` | Listing headline |
| `searchMode` | `rent`, `buy`, or `pg` |
| `property_type` | Apartment / Villa / Plot / etc. |
| `bhk` | Human-readable BHK (e.g., "2 BHK") |
| `bedrooms` | Number of bedrooms |
| `bathrooms` | Number of bathrooms |
| `balconies` | Number of balconies |
| `carpet_area_sqft` | Carpet area in sq ft |
| `super_area_sqft` | Super built-up area in sq ft |
| `price_inr` | Numeric price in INR |
| `price_display` | Original CommonFloor price string (e.g., "1.35 Cr") |
| `price_per_sqft` | Derived price per sq ft |
| `deposit_inr` | Security deposit (rent) |
| `maintenance_inr` | Maintenance charges |
| `furnishing` | Furnished / Semi-Furnished / Unfurnished |
| `facing` | Direction the unit faces |
| `floor` | Floor this unit is on |
| `total_floors` | Total floors in building |
| `age_of_property` | Age of property |
| `possession_date` | Possession date (under-construction) |
| `available_from` | Date the property becomes available |
| `locality` | Neighborhood |
| `city` | City |
| `latitude`, `longitude` | GPS coordinates |
| `project_name` | Project or society name |
| `developer` | Builder or developer |
| `owner_name` | Listed-by contact name |
| `listed_by` | `owner`, `agent`, or `builder` |
| `bachelors_allowed` | Boolean |
| `pet_allowed` | Boolean |
| `amenities` | Array of amenity names |
| `images` | Array of image URLs |
| `description` | Full listing description |
| `url` | Full listing URL |
| `scraped_at` | ISO 8601 timestamp |

Fields are omitted when not populated.

### Example output

```json
{
    "listing_id": "uu7ys94004blhlma",
    "title": "Semi Furnished 2 BHK Apartment for Rent in Koramangala",
    "searchMode": "rent",
    "property_type": "Apartment",
    "bhk": "2 BHK",
    "bedrooms": 2,
    "bathrooms": 2,
    "carpet_area_sqft": 1100,
    "super_area_sqft": 1250,
    "price_inr": 45000,
    "price_display": "45,000",
    "price_per_sqft": 40.91,
    "deposit_inr": 180000,
    "furnishing": "Semi-Furnished",
    "facing": "East",
    "floor": "3 of 5",
    "available_from": "Ready To Move",
    "locality": "Koramangala",
    "city": "Bangalore",
    "latitude": 12.9352,
    "longitude": 77.6245,
    "project_name": "Prestige South Ridge",
    "listed_by": "agent",
    "bachelors_allowed": true,
    "amenities": ["Gym", "Club House", "Covered Car Parking", "24Hrs Water Supply"],
    "images": ["https://img.commonfloor.com/.../main.jpg"],
    "description": "Spacious 2 BHK semi-furnished apartment in the heart of Koramangala...",
    "url": "https://www.commonfloor.com/listing/.../uu7ys94004blhlma",
    "scraped_at": "2026-04-20T18:30:00+00:00"
}
```

### Input parameters

| Parameter | Required | Description |
|-----------|----------|-------------|
| `searchMode` | Yes | `rent`, `buy`, or `pg`. Default `rent`. |
| `city` | Yes | Indian city (e.g., `Bangalore`, `Mumbai`, `Delhi`, `Hyderabad`, `Pune`, `Chennai`, `Gurgaon`, `Noida`). Default `Bangalore`. |
| `localities` | No | List of neighborhoods to filter by (e.g., `["Koramangala", "HSR Layout"]`). Matched case-insensitively. |
| `bhk` | No | One or more of `"1"`, `"2"`, `"3"`, `"4"`, `"5"` (5 means 5+ BHK). |
| `propertyType` | No | One or more of `apartment`, `villa`, `independent-house`, `builder-floor`, `studio`, `plot`, `pg`. |
| `minPrice` | No | Minimum price in INR. Monthly rent for rent/PG; total for buy. |
| `maxPrice` | No | Maximum price in INR. |
| `minArea` | No | Minimum area in sq ft. |
| `maxArea` | No | Maximum area in sq ft. |
| `furnishing` | No | One or more of `furnished`, `semi-furnished`, `unfurnished` (rent). |
| `availability` | No | `any`, `ready`, or `under-construction` (buy only). Default `any`. |
| `tenantType` | No | One or more of `family`, `bachelor`, `company` (rent only). |
| `fetchDetails` | No | Fetch each listing's detail page for deposit, furnishing, facing, floor, bathrooms, amenities, and description. Default `true` for rent/PG, `false` for buy. |
| `maxResults` | No | Maximum listings to return. Default `15`. |
| `proxyConfiguration` | No | Pre-configured to use India-based addresses. Leave as-is for best results. |

### Use cases

- **Renters and home buyers**: Find matching rent, buy, or PG inventory filtered by locality, BHK, and budget.
- **Proptech builders**: Power rental search, valuation, and relocation tools with live CommonFloor supply.
- **Investors**: Track price per sq ft and new launches across target micro-markets.
- **AI agents**: Answer natural-language property queries ("2 BHK semi-furnished in Koramangala under 50k") with live data.

### Pricing

Pay-per-result pricing. Tiered discounts apply automatically based on usage volume.

| Tier | Price per result |
|------|------------------|
| FREE | $0.003 |
| BRONZE | $0.0025 |
| SILVER | $0.002 |
| GOLD | $0.0015 |

### Limitations

- Phone numbers are gated behind login on CommonFloor and are not returned.
- Coordinates, project name, or area are sometimes absent — those fields are simply omitted from the output.
- `furnishing`, `tenantType`, and `availability` filters require `fetchDetails: true` (the default for rent/PG). With `fetchDetails: false` they are skipped.
- Tier-2 and tier-3 cities have sparser coverage than metros.
- Each run targets one city — run the actor once per city and combine outputs downstream.

### Compared to alternatives

- **vs. CommonFloor official API**: CommonFloor does not publish a public API; this actor is the structured-data alternative.
- **vs. manual CSV exports from CommonFloor**: CommonFloor does not publish exports. This actor gives any buyer structured data with no minimum.

Pairs well with [99acres Scraper](https://apify.com/thirdwatch/acres99-scraper?fpr=9m2cd6), [MagicBricks Scraper](https://apify.com/thirdwatch/magicbricks-scraper?fpr=9m2cd6), and [NoBroker Scraper](https://apify.com/thirdwatch/nobroker-scraper?fpr=9m2cd6) for full India residential supply coverage.

### FAQ

**Does this work for metros only?**
No — any Indian city with CommonFloor inventory works. Metros have the densest coverage.

**Can I run multiple cities in one run?**
Not currently. Run the actor once per city and combine outputs downstream.

**How is `price_inr` normalized?**
CommonFloor returns "1.35 Cr", "75 L", "45,000" etc. The actor converts these to rupees: 1.35 Cr to 13,500,000, 75 L to 7,500,000, 45,000 to 45000. The original string is preserved in `price_display`.

**How fresh is the data?**
Pulled live from CommonFloor on every run.

Last verified: 2026-04

More scrapers at [thirdwatch.dev](https://thirdwatch.dev).

# Actor input Schema

## `searchMode` (type: `string`):

What kind of listings to scrape. `rent` = rentals, `buy` = sale listings, `pg` = paying guest / shared accommodation.

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

Indian city to search in. Examples: Bangalore, Mumbai, Delhi, Hyderabad, Pune, Chennai, Gurgaon, Noida, Kolkata, Ahmedabad.

## `localities` (type: `array`):

Filter to specific neighbourhoods/localities within the city. Example: \["Koramangala", "HSR Layout", "Indiranagar"]. Leave empty to get all localities.

## `bhk` (type: `array`):

Filter by number of bedrooms. Select one or more. Leave empty for all. (5 = 5+ BHK.)

## `propertyType` (type: `array`):

Filter by property type. Leave empty for all types. Note: `pg` auto-applies when Search Mode = PG.

## `minPrice` (type: `integer`):

Minimum price in Indian Rupees. For `rent`/`pg`: monthly rent (e.g. 10000). For `buy`: total price (e.g. 5000000 for 50 Lakh).

## `maxPrice` (type: `integer`):

Maximum price in Indian Rupees. For `rent`/`pg`: monthly rent (e.g. 50000). For `buy`: total price (e.g. 20000000 for 2 Cr).

## `minArea` (type: `integer`):

Minimum property area in square feet.

## `maxArea` (type: `integer`):

Maximum property area in square feet.

## `furnishing` (type: `array`):

Filter by furnishing status. Typically applies to rent listings.

## `availability` (type: `string`):

For buy listings: restrict to ready-to-move-in or under-construction properties.

## `tenantType` (type: `array`):

For rent listings: restrict to listings that allow the chosen tenant type(s).

## `fetchDetails` (type: `boolean`):

Fetch each listing's detail page for extra fields: deposit, furnishing, facing, floor, bathrooms, amenities, description, etc. Default: true for rent/PG, false for buy. Adds ~1 second per listing.

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

Maximum number of listings to return. CommonFloor returns 30 listings per page.

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

Pre-configured to use India-based addresses for best results. Leave as-is unless you have a specific need.

## Actor input object example

```json
{
  "searchMode": "rent",
  "city": "Bangalore",
  "localities": [],
  "bhk": [],
  "propertyType": [],
  "furnishing": [],
  "availability": "any",
  "tenantType": [],
  "maxResults": 15,
  "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 = {
    "searchMode": "rent",
    "city": "Bangalore",
    "maxResults": 15,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

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

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/commonfloor-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 '{
  "searchMode": "rent",
  "city": "Bangalore",
  "maxResults": 15,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call thirdwatch/commonfloor-scraper --silent --output-dataset

```

## MCP server setup

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