# MagicBricks Scraper \[Only $1/1k] | Price Monitoring | RERA Data (`ahmed_jasarevic/magicbricks-scraper`) Actor

Extract structured residential property listings from MagicBricks.com, India's largest property portal. Get price in INR, BHK, area, locality, GPS, RERA ID, developer and agent details. No browser or API key needed. 27+ cities incl. Bangalore, Mumbai, Delhi NCR, Hyderabad. Export JSON, CSV, Excel.

- **URL**: https://apify.com/ahmed\_jasarevic/magicbricks-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

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 — India Property Data Without Official API Access

Extract structured residential property listings from [MagicBricks.com](https://www.magicbricks.com) — India's largest property portal — including **price in INR, BHK, carpet & super area, locality, GPS coordinates, RERA ID, project/developer, and agent/agency details**. No browser, no login, no API key required.

### What Users Achieve With This Actor

- **Property price monitoring** — track asking-price and price-per-sqft trends by locality across Indian metros
- **Real estate market research** — build structured datasets for investment analysis, valuation models, and competitive intelligence
- **Lead generation** — extract owner, agent, and builder contact context with project and RERA metadata
- **NRI property research** — compare listings across Bangalore, Mumbai, Delhi NCR, Hyderabad, Pune, and 20+ cities
- **Builder competitive intelligence** — monitor supply, possession status, and pricing by developer
- **Indian real estate database creation** — feed pipelines with consistently-shaped listing samples at scale

### How It Works

MagicBricks uses Akamai Bot Manager — every page returns `403 Access Denied` to datacenter IPs, and there is no embedded JSON reachable via standard scraping. This actor bypasses the WAF by calling the site's **own internal JSON search API** (`mbsrp/propertySearch.html`), the same endpoint the frontend queries via XHR after page load.

Two input modes:

- **Search-URL mode (recommended)** — paste any MagicBricks search URL; the actor extracts the internal API endpoint preserving the site's city code and filters, then pages through results
- **City mode** — provide a city name or numeric code; the actor builds the API URL directly

All traffic routes through **Apify Proxy with an Indian residential group** — Akamai allows residential Indian IPs while blocking datacenter traffic. The crawler is a plain-HTTP **CheerioCrawler** — no browser overhead, ~10x cheaper than Playwright-based alternatives.

### Extract Property Listings For Price Monitoring And Market Research

| Feature | Detail |
|---|---|
| **Data source** | MagicBricks.com internal JSON API |
| **Property types** | Apartment, builder-floor, penthouse, house, villa, land, studio, farm-house |
| **Transaction modes** | Buy and rent |
| **Coverage** | 27+ Indian cities including Bangalore, Mumbai, Delhi NCR, Hyderabad, Pune, Chennai, Kolkata |
| **Fields extracted** | 25+ including price, BHK, area, locality, GPS, RERA ID, developer, agent, furnishing, possession status |
| **Output formats** | JSON, CSV, Excel via Apify Dataset |
| **Cost** | $0.001 per listing + $0.005 per actor start |

### Input Parameters

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `searchUrls` | array | No | — | MagicBricks search-result URLs (max 10). Recommended for any city. |
| `city` | string | No | `"Bangalore"` | City name or numeric code (3327=Bangalore, 4320=Mumbai). Ignored when searchUrls provided. |
| `searchMode` | string | No | `"buy"` | `"buy"` or `"rent"` |
| `bhk` | array | No | `[]` | Bedroom counts to keep: `["1","2","3","4","5"]`. Empty = all. |
| `propertyType` | array | No | `[]` | Property types: apartment, builder-floor, penthouse, house, villa, land, studio, farm-house. Empty = all. |
| `minPrice` | integer | No | `0` | Minimum price in INR. 0 = no minimum. |
| `maxPrice` | integer | No | `0` | Maximum price in INR. 0 = no maximum. |
| `minArea` | integer | No | `0` | Minimum area in sq ft. 0 = no minimum. |
| `maxArea` | integer | No | `0` | Maximum area in sq ft. 0 = no maximum. |
| `localities` | array | No | `[]` | Substring match on locality name (case-insensitive). Empty = whole city. |
| `furnishing` | array | No | `[]` | Furnishing: furnished, semi-furnished, unfurnished. Empty = all. |
| `maxResults` | integer | No | `30` | Max listings to return (1–2000). Free plan capped at 10. |
| `sortBy` | string | No | `"premiumRecent"` | Order: premiumRecent, price-asc, price-desc, date-desc |
| `maxRequestsPerCrawl` | integer | No | `60` | Hard cap on HTTP requests (loop safety). |
| `proxyConfiguration` | object | No | Apify Proxy, IN residential | Keep enabled — datacenter IPs get blocked. |

### Output Fields

One dataset item per listing with the following fields:

| Field | Type | Description |
|---|---|---|
| `listing_id` | string | MagicBricks internal listing ID |
| `title` | string | Full listing title |
| `url` | string | Listing detail-page URL |
| `search_mode` | string | buy or rent |
| `price_inr` | number | Numeric price (total for buy, monthly for rent) |
| `price_display` | string | Display price as shown on site (e.g. "3.99 Cr") |
| `price_per_sqft` | number | INR per sq ft |
| `bhk` | number | Bedroom count |
| `bedrooms` | number | Bedroom count (alias) |
| `bathrooms` | number | Bathroom count |
| `balconies` | number | Balcony count |
| `carpet_area_sqft` | number | Carpet area in sq ft |
| `super_area_sqft` | number | Super/built-up area in sq ft |
| `locality` | string | Neighborhood name |
| `city` | string | City name |
| `latitude` | number | GPS latitude |
| `longitude` | number | GPS longitude |
| `project_name` | string | Project/society name |
| `developer` | string | Builder/developer name |
| `rera_id` | string | RERA registration code (60–70% coverage) |
| `listed_by` | string | owner, agent, or builder |
| `contact_name` | string | Lister display name |
| `agency_name` | string | Agency name |
| `furnishing` | string | Furnishing status |
| `possession_status` | string | Ready To Move / Under Construction |
| `posted_at` | string | Listing post timestamp |
| `scraped_at` | string | Run timestamp |

### Example Input

City mode — 2BHK and 3BHK apartments for sale in Bangalore:

```json
{
  "city": "Bangalore",
  "searchMode": "buy",
  "bhk": ["2", "3"],
  "propertyType": ["apartment"],
  "maxResults": 100
}
```

Search-URL mode — any city with pre-applied filters:

```json
{
  "searchUrls": [
    {
      "url": "https://www.magicbricks.com/flats-in-bangalore-for-sale?bedroom=2,3"
    }
  ],
  "maxResults": 100,
  "sortBy": "date-desc"
}
```

Rent mode with locality filter:

```json
{
  "city": "Mumbai",
  "searchMode": "rent",
  "bhk": ["1", "2"],
  "localities": ["Andheri", "Bandra"],
  "minPrice": 10000,
  "maxPrice": 50000,
  "maxResults": 50
}
```

### Example Output

```json
{
  "listing_id": "84916571",
  "title": "4BHK Multistorey Apartment for New Property in Jaypee Greens Knights Court at Sector 128, Noida Express Way",
  "url": "https://www.magicbricks.com/propertyDetails/4BHK-...-in-Noida",
  "search_mode": "buy",
  "price_inr": 39912000,
  "price_display": "3.99 Cr",
  "price_per_sqft": 13527,
  "bhk": 4,
  "bedrooms": 4,
  "bathrooms": 5,
  "balconies": 2,
  "carpet_area_sqft": 2950,
  "super_area_sqft": 3200,
  "locality": "Sector 128, Noida Express Way",
  "city": "Noida",
  "latitude": 28.5259,
  "longitude": 77.3615,
  "project_name": "Jaypee Greens Knights Court",
  "developer": "Jaypee Greens",
  "rera_id": "UPRERAPRJ123456",
  "listed_by": "agent",
  "contact_name": "ABC Realty",
  "agency_name": "ABC Realty",
  "furnishing": "Unfurnished",
  "possession_status": "Ready To Move",
  "posted_at": "2026-04-12T08:14:30.000Z",
  "scraped_at": "2026-09-05T06:30:00.000Z"
}
```

### Schedule Recurring Runs For Price Trend Tracking

Use Apify's **scheduling** to automate property data collection:

- **Daily** — monitor new listings in target localities for lead generation
- **Weekly** — track price-per-sqft changes for investment analysis
- **Monthly** — build historical datasets for market research and valuation models

Connect via **webhooks** to pipe results directly into Google Sheets, Airtable, Notion, or your CRM. The Apify API also supports programmatic access for integration with custom data pipelines.

### Related Actors For Indian Real Estate Data

| Actor | Platform | What It Covers |
|---|---|---|
| [99acres Scraper](https://apify.com/fatihtahta/99acres-scraper-ppe) | 99acres.com | India's second-largest portal — prices, RERA IDs, builder info, agent details |
| [NoBroker India Scraper](https://apify.com/thirdwatch/nobroker-scraper) | NoBroker.in | Owner-direct listings — no brokerage, rent/buy/PG across major cities |
| [Housing.com Scraper](https://apify.com/abotapi/housing-com-scraper) | Housing.com | 750+ cities, buy/rent, verified listings with photos and floor plans |
| [PropTiger Scraper](https://apify.com/crawlerbros/proptiger-scraper) | PropTiger.com | 50+ cities, residential and commercial, new-launch tracking |
| [India Real Estate MCP](https://apify.com/thelineworks/india-real-estate-mcp) | Multi-platform | Aggregator — searches 99acres, MagicBricks, NoBroker & Housing.com in one call |

### Frequently Asked Questions

#### Does this scraper need a MagicBricks account or API key?

No. The actor calls MagicBricks' internal search API directly — no login, no API key, no account required. It uses the same JSON endpoint the site's own frontend calls.

#### Is scraping MagicBricks legal?

This actor accesses only publicly visible listing data through the site's own internal API. Users are responsible for their own compliance with MagicBricks' Terms of Service and applicable data-protection laws. The actor does not bypass login walls, access private data, or solve CAPTCHAs.

#### Does MagicBricks have an official API?

MagicBricks does not offer a public API. Their B2B partner API is approval-gated and costs approximately $10,000/year. This actor provides a cost-effective alternative using the site's own internal JSON endpoint — the same data the frontend displays.

#### How do I get MagicBricks data as CSV, Excel, or JSON?

After running the actor, go to the **Dataset** tab and download in your preferred format (JSON, CSV, Excel, HTML, or XML). You can also pull data programmatically via the Apify API or connect webhooks for automated delivery.

#### Which Indian cities and localities can I scrape?

27+ cities including Bangalore, Mumbai, Delhi NCR (Noida, Gurgaon, Greater Noida), Hyderabad, Pune, Chennai, Kolkata, Ahmedabad, Jaipur, and more. Use **search-URL mode** for any city — paste the URL from the MagicBricks site after applying filters.

#### Can I filter by BHK, budget, furnishing, and property type?

Yes. All filters are available: BHK (1–5), property type (apartment, villa, house, builder-floor, penthouse, land, studio, farm-house), min/max price in INR, min/max area in sq ft, furnishing status, and locality substring matching.

#### Does it scrape both rent and buy listings?

Yes. Set `searchMode` to `"buy"` or `"rent"` — the actor adjusts the API parameters accordingly.

#### How is MagicBricks data different from 99acres data?

MagicBricks and 99acres are India's two largest property portals with complementary coverage. MagicBricks tends to have more builder/developer listings; 99acres often has more RERA-registered projects. For comprehensive market research, scraping both portals gives the fullest picture. See our [99acres Scraper](https://apify.com/fatihtahta/99acres-scraper-ppe) for cross-portal analysis.

#### How do I normalize Indian prices (lakhs / crores) into comparable numbers?

The actor returns both `price_inr` (raw numeric value) and `price_display` (formatted as shown on site, e.g. "3.99 Cr"). Use `price_inr` for calculations — it's already in base INR. For per-sqft comparisons, use `price_per_sqft`.

#### How can I monitor property price trends in India over time?

Schedule recurring runs (weekly recommended) for each city × buy/rent combination with `sortBy: "date-desc"` and a fixed `maxResults`. Dedupe on `listing_id` across runs to track price changes over time. The `posted_at` and `scraped_at` fields help identify listing freshness.

#### How often should I re-run the scraper to keep property data fresh?

For lead generation: daily. For price trend monitoring: weekly. For market research: monthly. MagicBricks listings update frequently — new listings appear daily and prices change weekly in active markets.

#### What fields should I extract for Indian real estate market research?

Core fields for analysis: `price_inr`, `price_per_sqft`, `carpet_area_sqft`, `super_area_sqft`, `bhk`, `locality`, `city`, `project_name`, `developer`, `rera_id`, `listed_by`, `possession_status`, and `posted_at`. GPS coordinates (`latitude`, `longitude`) enable geographic analysis.

### For AI Agents & LLM Apps

**Purpose:** Extract structured residential property listings from MagicBricks.com (India) — prices, areas, locality, GPS, RERA IDs, developer and agent metadata — via the site's internal JSON search API.

**Minimal working input:**

```json
{
  "city": "Bangalore",
  "searchMode": "buy",
  "maxResults": 30
}
```

**Search-URL variant (any city):**

```json
{
  "searchUrls": [{"url": "https://www.magicbricks.com/flats-in-mumbai-for-sale?bedroom=2,3"}],
  "maxResults": 50
}
```

**Output fields:** `listing_id, title, url, search_mode, price_inr, price_display, price_per_sqft, bhk, bedrooms, bathrooms, balconies, carpet_area_sqft, super_area_sqft, locality, city, latitude, longitude, project_name, developer, rera_id, listed_by, contact_name, agency_name, furnishing, possession_status, posted_at, scraped_at`

**Behaviors an agent should know:**

- `searchUrls` takes priority over `city` — when both are provided, only searchUrls are used
- `maxResults` defaults to 30; free-plan runs are capped at 10 items
- `proxyConfiguration` defaults to Indian residential proxy — do not override with datacenter proxies (Akamai blocks them)
- `rera_id` is null on ~30–40% of listings; `latitude`/`longitude` null on ~25% — these are source limitations, not errors
- `sortBy: "date-desc"` is best for monitoring new listings; `"price-asc"`/`"price-desc"` for price analysis
- `localities` filter is substring-based — `"Gachibowli"` matches `"Gachibowli, Hyderabad"`
- Billing: $0.001 per listing result + $0.005 per actor start event

**Billing model:** Pay-per-event — $0.005 per actor start + $0.001 per result in dataset.

### Legal & Compliance Disclaimer

This actor is **independent** and not affiliated with, endorsed by, or sponsored by MagicBricks Realty Services Ltd.

The actor accesses **only publicly visible listing data** through MagicBricks' own internal JSON search API — the same endpoint the site's frontend queries. It does not bypass login requirements, access private user data, or solve CAPTCHAs.

Users are responsible for their own compliance with MagicBricks' Terms of Service and applicable data-protection laws (including India's Digital Personal Data Protection Act, 2023 where relevant). Phone numbers are gated behind MagicBricks login and are not returned by this actor.

### SEO Keywords

magicbricks scraper, magicbricks api, magicbricks data, magicbricks dataset, magicbricks export, magicbricks alternative, property price monitoring india, real estate market research india, india property data, indian real estate database, property listing extraction, real estate lead generation india, nri property buying, bangalore property data, mumbai apartments scraper, delhi ncr real estate data, hyderabad property listings, pune flats for sale, 99acres scraper, housing.com scraper, indian property portal scraper, magicbricks rent scraper, magicbricks buy scraper, rera id extraction india, property investment india data

# Actor input Schema

## `searchUrls` (type: `array`):

MagicBricks search-result URLs (copy from the site after applying filters). The actor extracts the internal JSON API from each page, so any city works. Max 10 per run.

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

City name (Bangalore, Mumbai) or numeric MagicBricks city code (3327 = Bangalore, 4320 = Mumbai). Ignored when Search URLs are provided.

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

Whether to scrape for-sale (buy) or for-rent listings.

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

Bedroom counts to keep (e.g. \[2, 3]). Empty = all.

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

Property types to keep. Empty = all.

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

Minimum price in INR (total for buy, monthly rent for rent). 0 = no minimum.

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

Maximum price in INR. 0 = no maximum.

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

Minimum carpet/built-up area in sq ft. 0 = no minimum.

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

Maximum carpet/built-up area in sq ft. 0 = no maximum.

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

Keep only listings whose locality contains one of these names (case-insensitive). Empty = whole city.

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

Furnishing statuses to keep (rent listings mainly). Empty = all.

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

Maximum listings to return. Free-plan runs are capped at a 10-item preview.

## `sortBy` (type: `string`):

Result ordering used by the MagicBricks search API.

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on HTTP requests for this run (loop safety).

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

MagicBricks is Akamai-protected: use Apify Proxy with an Indian residential group.

## Actor input object example

```json
{
  "searchUrls": [
    {
      "url": "https://www.magicbricks.com/property-for-sale/residential-real-estate?bedroom=2,3&proptype=Multistorey-Apartment&cityName=Bangalore"
    }
  ],
  "city": "Bangalore",
  "searchMode": "buy",
  "bhk": [],
  "propertyType": [],
  "minPrice": 0,
  "maxPrice": 0,
  "minArea": 0,
  "maxArea": 0,
  "localities": [],
  "furnishing": [],
  "maxResults": 30,
  "sortBy": "premiumRecent",
  "maxRequestsPerCrawl": 60,
  "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 = {
    "searchUrls": [
        {
            "url": "https://www.magicbricks.com/property-for-sale/residential-real-estate?bedroom=2,3&proptype=Multistorey-Apartment&cityName=Bangalore"
        }
    ],
    "city": "Bangalore"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = {
    "searchUrls": [{ "url": "https://www.magicbricks.com/property-for-sale/residential-real-estate?bedroom=2,3&proptype=Multistorey-Apartment&cityName=Bangalore" }],
    "city": "Bangalore",
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "searchUrls": [
    {
      "url": "https://www.magicbricks.com/property-for-sale/residential-real-estate?bedroom=2,3&proptype=Multistorey-Apartment&cityName=Bangalore"
    }
  ],
  "city": "Bangalore"
}' |
apify call ahmed_jasarevic/magicbricks-scraper --silent --output-dataset

```

## MCP server setup

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