# MagicBricks Scraper (`parsebird/magicbricks-scraper`) Actor

Scrape property listings from MagicBricks: rent and buy prices, area, BHK, amenities, RERA IDs, location, and full descriptions for Indian cities.

- **URL**: https://apify.com/parsebird/magicbricks-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 listing scrapeds

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/platform/actors/running/actors-in-store#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

MagicBricks Scraper extracts structured rent and buy property listings from [MagicBricks](https://www.magicbricks.com), India's largest real estate portal.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search any Indian city or neighborhood and filter by BHK, property type, price, area, furnishing, and tenant type — get clean, structured listing data including price, area, amenities, RERA IDs, and full descriptions.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this Actor: Actor ID `parsebird/magicbricks-scraper` on Apify — call it with the Apify API or `ApifyClient` (e.g. Python: `ApifyClient(token).actor("parsebird/magicbricks-scraper").call(run_input={"searchMode": "rent", "city": "Bangalore", "localities": ["Koramangala"], "bhk": [2, 3], "maxResults": 15})`) — key inputs are `searchMode` (string: "rent" | "buy", default "rent"), `city` (string, Indian city name or a full MagicBricks search URL, default "Bangalore"), `localities` (array of neighborhood names), `bhk` (array of integers, OR-combined), `propertyType`/`furnishing`/`tenantType` (arrays of enum strings), `minPrice`/`maxPrice`/`minArea`/`maxArea` (integers), `availability` (string, buy only), `maxResults` (integer, default 15), and `proxyConfiguration` (object, defaults to Apify's Indian residential proxy) — output items include `listing_id`, `title`, `propertyType`, `bhk`, `price_inr`, `price_display`, `carpet_area_sqft`, `super_area_sqft`, `furnishing`, `locality`, `city`, `state`, `latitude`/`longitude`, `project_name`, `developer`, `rera_id`, `amenities`, `images`, `description`, `url`, and `scraped_at` — full API spec at `https://apify.com/parsebird/magicbricks-scraper/api` and an API token from the Apify Console under Settings → Integrations.

### What does MagicBricks Scraper do?

MagicBricks Scraper is a **MagicBricks API alternative** that turns a city, neighborhood, or saved search into a structured property dataset — for both **renting** and **buying**. Give it a city (or a full MagicBricks search URL) and it collects price, area, BHK configuration, furnishing, amenities, RERA registration, contact details, and the full listing description for every matching property.

- 🏙️ Search a whole city or specific neighborhoods (e.g. Koramangala, HSR Layout, Indiranagar)
- 🏠 Covers apartments, villas, independent houses, builder floors, studios, penthouses, and plots
- 🛏️ Filter by BHK, price range, area range, furnishing, and — for rentals — preferred tenant type
- 📍 GPS coordinates, locality, city, and state for every listing
- 🏗️ Project name, developer, and RERA registration ID when the listing is tied to a registered project
- ⚙️ Runs on the Apify platform: schedule recurring scrapes, trigger runs via API or webhook, and export results as JSON, CSV, Excel, HTML, or XML
- 🆓 New Apify accounts get free platform credits, enough to try this Actor at no cost

### What data can you extract from MagicBricks?

| Field | Description |
|-------|-------------|
| `title` | Listing title |
| `propertyType` / `propertyType_display` | Normalized type (e.g. "apartment") and MagicBricks' raw label |
| `bhk` / `bedrooms` / `bathrooms` / `balconies` | Room configuration |
| `carpet_area_sqft` / `super_area_sqft` | Area in square feet |
| `price_inr` / `price_display` / `price_per_sqft` | Price (monthly rent or total sale price) |
| `deposit_inr` / `maintenance_inr` | Security deposit and monthly maintenance (rent) |
| `furnishing` / `facing` / `floor` / `total_floors` | Property attributes |
| `locality` / `city` / `state` / `latitude` / `longitude` | Location |
| `project_name` / `developer` / `rera_id` | Project and legal details |
| `amenities` / `images` | Amenity list and photo URLs |
| `description` | Full listing description (HTML stripped) |
| `url` | Public MagicBricks listing URL |

### Input parameters

| Parameter | Required | Default | Description |
|-----------|----------|---------|-------------|
| searchMode | Yes | "rent" | "rent" or "buy" |
| city | Yes | "Bangalore" | Indian city name (e.g. "Bangalore", "Mumbai", "New Delhi") or a full MagicBricks search URL |
| 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 / maxPrice | No | — | Price range in INR (monthly rent for rent, total for buy) |
| minArea / maxArea | No | — | Area range in sq ft |
| furnishing | No | — | One or more of furnished, semi-furnished, unfurnished |
| availability | No | "any" | ready, under-construction, or any (buy only) |
| tenantType | No | — | One or more of family, bachelor, company (rent only) |
| maxResults | No | 15 | Maximum listings to return |
| proxyConfiguration | No | Indian residential | Proxy settings — MagicBricks requires an Indian IP, so the default works out of the box |

### Output example

```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.75,
  "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"
}
```

### How to scrape MagicBricks property listings

1. Open **MagicBricks Scraper** on the Apify Store and click **Try for free**.
2. Set `searchMode` to "rent" or "buy" and enter a `city`, or paste a MagicBricks search URL.
3. Optionally add `localities` to focus on specific neighborhoods.
4. Narrow results with `bhk`, `propertyType`, price/area range, `furnishing`, `availability`, or `tenantType`.
5. Set `maxResults` and click **Start** — download your results as JSON, CSV, or Excel once the run finishes, or pull them via the API.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/magicbricks-scraper").call(run_input={
    "searchMode": "rent",
    "city": "Bangalore",
    "localities": ["Koramangala", "HSR Layout"],
    "bhk": [2, 3],
    "maxResults": 50,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price_display"], item["url"])
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/magicbricks-scraper').call({
    searchMode: 'rent',
    city: 'Bangalore',
    localities: ['Koramangala', 'HSR Layout'],
    bhk: [2, 3],
    maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use cases

- **Rental market research** — track asking rents across neighborhoods over time.
- **Property investment analysis** — compare price-per-sqft and RERA-registered projects across a city.
- **Lead generation for agents and brokers** — build a feed of new listings matching client criteria.
- **PropTech and data products** — power a listing aggregator, price index, or comparison tool.
- **Relocation and house-hunting tools** — surface furnished rentals in specific tenant-friendly localities.

### How much does it cost to scrape MagicBricks?

MagicBricks Scraper uses **pay-per-event (PPE)** pricing — you're charged per listing scraped, not for platform compute time.

| Event | Price per event | Price per 1,000 |
|-------|-----------------|------------------|
| Listing scraped | $0.00299 (Free) / $0.00249 (Bronze) / $0.00199 (Silver) / $0.00149 (Gold) | **$2.99** (Free) / **$2.49** (Bronze) / **$1.99** (Silver) / **$1.49** (Gold) |

Scraping 1,000 listings costs under $3 on the free plan, dropping as low as $1.49 per 1,000 on the Gold plan. New Apify accounts include free platform credits, so you can test this Actor at no cost before committing to a larger run.

### Is it legal to scrape MagicBricks?

Scraping publicly available data, like property listings on MagicBricks, is generally considered legal, as established in cases such as *hiQ Labs v. LinkedIn*. This Actor only collects data that is already visible to any visitor on public MagicBricks search results and listing pages. You are responsible for how you use the scraped data — avoid collecting or storing personal data beyond what you need, and respect the target website's terms of service. Read more in [Apify's guide on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### FAQ

**Why does this Actor need a proxy?**
MagicBricks blocks requests from outside India and from datacenter IPs. The default `proxyConfiguration` uses Apify's residential proxy group with country set to India, which works out of the box — you don't need to change it.

**Can I search without specifying localities?**
Yes. Leave `localities` empty to search the entire city.

**How are `bhk`, `propertyType`, `furnishing`, and `tenantType` matched?**
As whole-word, case-insensitive filters applied to each listing's own data, so results are never silently dropped due to a spelling or casing mismatch with MagicBricks' internal filter codes.

**Why are some fields (like `rera_id`, `deposit_inr`, or `amenities`) empty for some listings?**
Not every listing carries every field — individually posted resale or rental units, for example, often don't have a RERA registration, since RERA mainly applies to registered builder projects. The Actor returns `null` or an empty array rather than guessing.

**Can I use a specific MagicBricks search URL instead of city/locality filters?**
Yes — paste any `magicbricks.com/property-for-rent-in-...` or `property-for-sale-in-...` search URL into the `city` field and it will be used as the starting point.

**Can I schedule this to run automatically?**
Yes. Use [Apify's Scheduler](https://docs.apify.com/platform/schedules) to run this Actor daily, weekly, or at any interval, and pair it with [Apify integrations](https://apify.com/integrations) (Zapier, Make, Slack, Google Sheets, and more) to route new results wherever you need them.

**What formats can I export results in?**
JSON, CSV, Excel, HTML, or XML — from the Apify Console, via the API, or through an integration.

**I found a bug or the site layout changed. What do I do?**
Please open an issue on the Actor's **Issues** tab in Apify Console. We actively maintain this Actor and respond to reports.

# Actor input Schema

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

Search for properties to rent or to buy.

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

Indian city name, e.g. "Bangalore", "Mumbai", "New Delhi" — or paste a full MagicBricks search URL to use as the starting point instead.

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

Optional list of neighborhoods to search within the city, e.g. "Koramangala", "HSR Layout". Leave empty to search the whole city.

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

Number of bedrooms to include. Leave empty for any. Multiple values are OR-combined.

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

Restrict to one or more property types. Leave empty for any.

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

Minimum price in INR. Monthly rent for rent mode, total price for buy mode.

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

Maximum price in INR.

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

Minimum area in square feet.

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

Maximum area in square feet.

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

Restrict to one or more furnishing types. Leave empty for any.

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

Buy mode only: restrict to ready-to-move or under-construction properties.

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

Rent mode only: restrict to one or more preferred tenant types. Leave empty for any.

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

Maximum number of listings to return.

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

MagicBricks blocks non-Indian and datacenter IPs, so an Indian residential proxy is required. The default below works out of the box.

## 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

## `dataset` (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": [],
    "bhk": [],
    "propertyType": [],
    "furnishing": [],
    "availability": "any",
    "tenantType": [],
    "maxResults": 15,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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": [],
    "bhk": [],
    "propertyType": [],
    "furnishing": [],
    "availability": "any",
    "tenantType": [],
    "maxResults": 15,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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": [],
  "bhk": [],
  "propertyType": [],
  "furnishing": [],
  "availability": "any",
  "tenantType": [],
  "maxResults": 15,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call parsebird/magicbricks-scraper --silent --output-dataset

```

## MCP server setup

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