# MagicBricks India Scraper - Rent & Buy Property Listings (`thirdwatch/magicbricks-scraper`) Actor

Scrape MagicBricks rent and buy property listings for any Indian city. Filter by BHK, locality, price, area, furnishing, tenant type and availability. Returns price, BHK, carpet area, floor, furnishing, RERA ID, developer, GPS coordinates and 25+ other fields per listing.

- **URL**: https://apify.com/thirdwatch/magicbricks-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Real estate
- **Stats:** 172 total users, 32 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?

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

## MagicBricks 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 and buy property listings from MagicBricks — India's largest real-estate portal — with 35+ fields per listing including price, BHK, area, RERA ID, GPS coordinates, and amenities.

### Quick start

Open the Actor in Apify Console, paste the input below, and click **Start**. This returns up to 15 current rental listings for two Bangalore localities; results appear as structured rows in the default dataset and can be downloaded as JSON, CSV, or Excel.

```json
{
  "city": "Bangalore",
  "searchMode": "rent",
  "localities": ["Koramangala", "Indiranagar"],
  "bhk": [2, 3],
  "maxResults": 15
}
```

Start without filters by keeping only `city`, `searchMode`, and `maxResults`.

### What you get

Structured rent and buy property data from MagicBricks.com for any Indian city. Filter by BHK, locality, price range, area, furnishing, availability, and tenant type. Every listing includes normalized price in INR, deposit, carpet and super area, coordinates, project name, developer, RERA registration, and the listing URL.

### Output fields

| Field | Description |
|-------|-------------|
| `listing_id` | MagicBricks internal listing ID |
| `title` | Listing title |
| `searchMode` | `rent` or `buy` |
| `propertyType` | Normalized key (e.g., `apartment`, `villa`) |
| `propertyType_display` | Raw label from MagicBricks |
| `bhk` | Number of bedrooms |
| `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 — monthly rent for rent, total for buy |
| `price_display` | Pretty-formatted price (e.g., "1.45 Cr") |
| `price_per_sqft` | INR per sq ft |
| `deposit_inr` | Security deposit (rent) |
| `maintenance_inr` | Monthly maintenance charge |
| `maintenance_period` | Maintenance billing period |
| `furnishing` | Furnished / Semi-Furnished / Unfurnished |
| `facing` | Direction the property faces |
| `floor` | Floor number |
| `total_floors` | Total floors in building |
| `age_of_property` | Age bracket |
| `possession_date` | Ready, Under Construction, or month/year |
| `available_from` | Availability date (rent) |
| `locality` | Neighborhood name |
| `city` | City |
| `state` | State |
| `latitude`, `longitude` | GPS coordinates |
| `project_name` | Project or society name |
| `developer` | Builder or developer |
| `rera_id` | RERA registration code |
| `listed_by` | `owner`, `agent`, or `builder` |
| `contact_name` | Seller or agent display name |
| `parking` | Parking availability |
| `flooring_type` | Flooring material |
| `ownership_type` | Ownership type |
| `preferred_tenants` | Tenant preference string (rent) |
| `water_status` | Water availability flag (rent) |
| `power_status` | Power status flag (rent) |
| `air_conditioning` | AC flag (rent) |
| `images` | Array of image URLs |
| `amenities` | Array of amenity names |
| `description` | Listing description (HTML stripped) |
| `url` | Full MagicBricks listing URL |
| `posted_at` | ISO timestamp when listing was posted |
| `scraped_at` | ISO timestamp of this run |

Fields are omitted when not populated.

### Example output

```json
{
    "listing_id": "71872407",
    "title": "3 BHK Apartment in Whitefield",
    "searchMode": "rent",
    "propertyType": "apartment",
    "bhk": 3,
    "bedrooms": 3,
    "bathrooms": 3,
    "balconies": 2,
    "carpet_area_sqft": 1450,
    "super_area_sqft": 1750,
    "price_inr": 45000,
    "price_display": "45,000",
    "price_per_sqft": 26,
    "deposit_inr": 200000,
    "maintenance_inr": 3500,
    "maintenance_period": "Monthly",
    "furnishing": "Semi-Furnished",
    "facing": "East",
    "floor": 8,
    "total_floors": 15,
    "locality": "Whitefield",
    "city": "Bangalore",
    "latitude": 12.9698,
    "longitude": 77.7500,
    "project_name": "Prestige Lakeside Habitat",
    "developer": "Prestige Group",
    "rera_id": "PRM/KA/RERA/1251/446/PR/171014/000456",
    "listed_by": "owner",
    "preferred_tenants": "Family",
    "images": ["https://img.staticmb.com/mbimages/..."],
    "url": "https://www.magicbricks.com/propertyDetails/...",
    "posted_at": "2026-04-12T08:14:30+00:00",
    "scraped_at": "2026-04-20T12:31:02+00:00"
}
```

### Input parameters

| Parameter | Required | Description |
|-----------|----------|-------------|
| `searchMode` | Yes | `rent` or `buy`. Default `rent`. |
| `city` | Yes | Indian city name (e.g., `Bangalore`, `Mumbai`, `New Delhi`) or a full MagicBricks search URL. Default `Bangalore`. |
| `localities` | No | List of neighborhoods (e.g., `["Koramangala", "HSR Layout"]`). Matched case-insensitively. |
| `bhk` | No | Number of bedrooms as integers (e.g., `[2, 3]`). Multiple values are OR-combined. |
| `propertyType` | No | One or more of `apartment`, `villa`, `independent-house`, `builder-floor`, `studio`, `penthouse`, `plot`. |
| `minPrice` | No | Minimum price in INR. Monthly rent for rent; 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 | `ready`, `under-construction`, or `any` (buy only). Default `any`. |
| `tenantType` | No | One or more of `family`, `bachelor`, `company` (rent only). |
| `maxResults` | No | Maximum listings to return. Default `15`. |
| `proxyConfiguration` | No | Proxy settings. Defaults work out of the box for Indian cities. |

### Use cases

- **Proptech builders**: Power rental search, valuation, and home-buying tools with live MagicBricks supply.
- **Price research**: Build per-locality price-per-sqft distributions and track week-over-week rental trends.
- **Valuation models**: Pull large samples across micro-markets to train automated valuation models.
- **Brokers and aggregators**: Keep your own listings database enriched with RERA IDs, coordinates, and project metadata.
- **AI agents**: Plug into Claude or GPT to answer questions like "2 BHK apartments 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 MagicBricks and are not returned.
- RERA IDs are populated for roughly 60-70% of listings; older and owner-listed ones often lack them.
- GPS coordinates are available for roughly 75% of listings; some are project-level only.
- Commercial properties are out of scope — residential rent and buy only.

### Compared to alternatives

- **vs. epctex/magicbricks-scraper** (~$5/run flat fee): This actor is pay-per-result, returns 35+ fields including RERA and GPS, and never charges a flat fee for empty results.
- **vs. MagicBricks official exports**: MagicBricks does not publish CSV exports or a public API. This actor is the structured-data alternative.

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

### FAQ

**Does this work for rent listings?**
Yes — set `searchMode` to `rent`. It's the default.

**Can I filter by BHK and price range together?**
Yes — pass `bhk: [2, 3]` with `minPrice` / `maxPrice`.

**How do I restrict to specific neighborhoods?**
Pass an array like `"localities": ["Koramangala", "Indiranagar"]`. Matching is case-insensitive substring.

**Does it include commercial properties?**
Residential only.

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

Last verified: 2026-04

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

# Actor input Schema

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

Whether to scrape rental listings or properties for sale.

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

Indian city to search in. Accepts a city name (e.g. 'Bangalore', 'Mumbai', 'New Delhi') or a full MagicBricks search URL (e.g. https://www.magicbricks.com/flats-in-bangalore-for-rent).

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

Optional list of locality / neighborhood names to filter by (e.g. Koramangala, Indiranagar, HSR Layout). Matched case-insensitively against the listing's locality. Leave empty to include the whole city.

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

Filter by number of bedrooms. Valid values: 1, 2, 3, 4, 5. Multiple values are OR-combined.

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

Filter by property type. Defaults: 'apartment' for rent; 'apartment' + 'villa' for buy.

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

For rent: monthly rent in INR. For buy: total price in INR. Leave blank for no minimum.

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

For rent: monthly rent in INR. For buy: total price in INR. Leave blank for no maximum.

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

Minimum carpet / built-up area in square feet.

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

Maximum carpet / built-up area in square feet.

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

Filter by furnishing status. Primarily relevant for rent listings.

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

For buy listings: whether the property is ready to move or under construction. Ignored for rent.

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

For rent listings: preferred tenant type. Ignored for buy.

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

Maximum number of listings to return.

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

Proxy settings. Pre-configured defaults work for Indian cities — only change if you have specific networking needs.

## Actor input object example

```json
{
  "searchMode": "rent",
  "city": "Bangalore",
  "localities": [
    "Koramangala",
    "Indiranagar",
    "HSR Layout"
  ],
  "bhk": [
    2,
    3
  ],
  "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",
    "localities": [
        "Koramangala",
        "Indiranagar",
        "HSR Layout"
    ],
    "bhk": [
        2,
        3
    ],
    "maxResults": 15,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/magicbricks-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",
    "localities": [
        "Koramangala",
        "Indiranagar",
        "HSR Layout",
    ],
    "bhk": [
        2,
        3,
    ],
    "maxResults": 15,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/magicbricks-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",
  "localities": [
    "Koramangala",
    "Indiranagar",
    "HSR Layout"
  ],
  "bhk": [
    2,
    3
  ],
  "maxResults": 15,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call thirdwatch/magicbricks-scraper --silent --output-dataset

```

## MCP server setup

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