# Magicbricks Scraper | India Property Listings, Price per Sq Ft (`data_daemon/magicbricks-property-scraper`) Actor

$1 per 1,000 listings | Scrape Magicbricks (India) property listings: price, price per sq ft, carpet and covered area, BHK, bathrooms, furnishing, locality, project, developer, possession date, posted date, lat/long. Sale or rent, any city. Only-new mode. No login.

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

## Pricing

from $0.70 / 1,000 listings

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Magicbricks Scraper** returns **Indian property listings from [Magicbricks](https://www.magicbricks.com)** as JSON, CSV or Excel: price, **price per sq ft**, carpet and covered area, BHK, bathrooms, balconies, furnishing, locality, project and developer, possession date, posting date, advertiser type (owner, agent, builder) and latitude/longitude. Sale or rent, any city, with an **only-new mode for daily feeds**. **$1 per 1,000 listings**, no login, no proxy setup (the Actor handles Magicbricks' bot protection itself). Advertiser personal names, phone numbers and e-mails are not collected (they are also masked inside descriptions).

### What can you do with Magicbricks data?

| Who | What they get | Typical run |
|---|---|---|
| Property investors | New listings in chosen cities below a price per sq ft, every morning | `onlyNewSinceLastRun` + `postedWithinDays: 1` |
| Brokers and agencies | Competitor inventory by locality and project | one city, `maxResults: 0` |
| Analysts, banks, proptech | Asking price per sq ft by locality, BHK and possession status | export to Sheets / BigQuery |
| Rental platforms | Fresh rentals with furnishing and coordinates | `transactionType: rent` |

### How to scrape Magicbricks

1. Open the **Input** tab and list `cities` (e.g. `Mumbai`, `Pune`, `Bangalore`).
2. Choose sale or rent and, optionally, property types, a price range, minimum BHK or a posting window.
3. Click **Start**; listings appear in the **Output** tab. Download them as JSON, CSV, Excel or HTML, or read them through the API.
4. For a daily feed, turn on **Only new listings since the last run** and add a schedule.

An empty input `{}` returns 50 recent Mumbai sale listings.

### Input

| Field | What it does |
|---|---|
| `cities` | City names as Magicbricks spells them: `Mumbai`, `Pune`, `Bangalore`, `Hyderabad`, `New Delhi`, `Gurgaon`, `Noida`, `Chennai`, `Kolkata`, `Ahmedabad`... |
| `transactionType` | `sale` or `rent`. |
| `propertyTypes` | `apartment`, `builder floor`, `penthouse`, `studio`, `house`, `villa`. Each chosen type is its own search. |
| `minPrice`, `maxPrice`, `minBedrooms`, `postedWithinDays` | Filters checked on each listing; listings outside them are not charged. |
| `maxResults`, `maxResultsPerSearch` | Caps (0 = no cap). |
| `onlyNewSinceLastRun`, `stateName` | Remember delivered ids in the `magicbricks-state` key-value store and skip them next time (not charged). |
| `skipIds` | Listing ids you already have (not charged). |

```json
{
    "cities": ["Pune"],
    "transactionType": "sale",
    "propertyTypes": ["apartment"],
    "minBedrooms": 2,
    "maxPrice": 15000000,
    "postedWithinDays": 7,
    "maxResults": 300
}
```

### Output

```json
{
    "id": "86766601",
    "url": "https://www.magicbricks.com/propertyDetails/4-BHK-2328-Sq-ft-Multistorey-Apartment-FOR-Sale-Baner-in-Pune&id=4d423836373636363031",
    "title": "4BHK Multistorey Apartment for New Property in Kolte Patil 24K Altura at Baner",
    "transaction": "sale",
    "priceInr": 33500000,
    "priceText": "3.35 Cr",
    "pricePerSqftInr": 14390,
    "coveredAreaSqft": 2328,
    "carpetAreaSqft": 1725,
    "bedrooms": 4,
    "bathrooms": 4,
    "furnishing": "Unfurnished",
    "propertyType": "Apartment",
    "project": "Kolte Patil 24K Altura",
    "developer": "Kolte Patil Developers Ltd.",
    "locality": "Baner",
    "city": "Pune",
    "possession": "Mar '28",
    "postedAt": "2026-10-28T17:36:51.000Z",
    "advertiserType": "Agent"
}
```

| Field | Meaning |
|---|---|
| `id`, `url`, `title` | Listing id (stable), listing page, title. |
| `priceInr`, `priceText`, `pricePerSqftInr` | Price (monthly rent for rentals), as shown, and per sq ft (monthly rent per sq ft for rentals). |
| `coveredAreaSqft`, `carpetAreaSqft`, `bedrooms`, `bathrooms`, `balconies`, `furnishing` | Size and layout. |
| `propertyType`, `project`, `developer`, `possession` | Property and project. |
| `locality`, `city`, `latitude`, `longitude` | Location. |
| `postedAt`, `advertiserType`, `agencyName` | When it was posted and by whom (owner / agent / builder; the company name only when it reads as a business, e.g. Realty, Properties, Pvt Ltd; personal names are left out). |

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

**$1 per 1,000 listings** plus $0.001 per run (SILVER $0.85, GOLD and above $0.70 per 1,000). The default run (50 listings) costs about $0.05. Listings skipped by only-new mode, `skipIds` or the filters are never charged. Proxy and platform costs are included.

### Tips

- Magicbricks shows at most **1,500 listings per search** (50 pages). To get more for a big city, choose several `propertyTypes` (each is its own search) or run per city.
- Magicbricks' "most recent" order is approximate; use `postedWithinDays` to keep only fresh listings. `postedWithinDays: 1` and the price range are applied by Magicbricks itself (Magicbricks applies its "last 24 hours" filter with a lag: on 1 Nov 2026 it returned listings 34-43 hours old, so expect roughly the last two days and add `onlyNewSinceLastRun` for a feed without repeats), so a daily feed reads only the last day's listings. For longer windows the Actor checks each listing's date and stops a search after two pages of older listings.
- Runs take a few seconds per page of 30 listings because every request passes Magicbricks' bot protection.

### FAQ

**Is there a Magicbricks API?** Not a public one. This Actor reads the JSON that Magicbricks' own search page loads and returns it in a stable format through Apify's API.

**Does it collect owner or agent phone numbers?** No. It keeps the advertiser type and the registered company name only; phone numbers and e-mails written into descriptions are replaced with `[phone removed]` / `[e-mail removed]`.

**Which cities work?** Every city Magicbricks covers, spelled as on magicbricks.com (Bangalore, New Delhi, Gurgaon; Bengaluru, Delhi and Gurugram are translated). An unknown name is reported in the status message.

**Is it legal to scrape Magicbricks?** The Actor reads publicly shown listings without logging in. You are responsible for how you use the data and for compliance with the site's terms and India's data-protection law.

Questions or a field you need? Use the **Issues** tab.

### Related Actors

- [Dubai DLD Property Transactions](https://apify.com/data_daemon/dubai-property-transactions) – registered Dubai sales, mortgages and gifts with AED value and price per sq m
- [Zap Imóveis & VivaReal Scraper](https://apify.com/data_daemon/zap-imoveis-vivareal-scraper) – Brazil property listings for sale or rent: price, condo fee, IPTU, area, coordinates, agency
- [India New Company Registrations](https://apify.com/data_daemon/india-new-company-registrations) – newly incorporated Indian companies daily: CIN, type, state, activity, capital
- [WorkIndia Jobs Scraper](https://apify.com/data_daemon/workindia-jobs-scraper) – WorkIndia jobs with monthly salary range, city, locality and category (delivery, sales, telecaller, office)

All Daemon Data Actors: [apify.com/data_daemon](https://apify.com/data_daemon).

# Actor input Schema

## `cities` (type: `array`):

City names as Magicbricks spells them, e.g. `Mumbai`, `Pune`, `Bangalore` (Bengaluru works too), `Hyderabad`, `New Delhi`, `Gurgaon`, `Noida`, `Chennai`, `Kolkata`, `Ahmedabad`. Each city is its own search; an unknown name is reported, not replaced.

## `transactionType` (type: `string`):

`sale` or `rent` (monthly rent in `priceInr`).

## `propertyTypes` (type: `array`):

`apartment`, `builder floor`, `penthouse`, `studio`, `house`, `villa`. Empty = all residential types in one search; with types chosen, each type is its own search (more listings per city).

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

Sale price or monthly rent; applied by Magicbricks' own budget filter.

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

Sale price or monthly rent; applied by Magicbricks' own budget filter.

## `minBedrooms` (type: `integer`):

Keep listings with at least this many bedrooms.

## `postedWithinDays` (type: `integer`):

Keep listings posted in the last N days (`postedAt`). 1 uses Magicbricks' own "posted in the last 24 hours" filter (fast). Magicbricks applies it with a lag: on 1 Nov 2026 it returned listings 34-43 hours old, so expect roughly the last two days; add only-new mode for a daily feed without repeats. Longer windows are checked on each listing, and a search stops after two pages of older listings.

## `maxResultsPerSearch` (type: `integer`):

Cap per city (and property type). 0 = no cap; Magicbricks lists at most 1,500 listings per search.

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

Stop after this many saved listings (default 50, about $0.05). 0 = no cap.

## `onlyNewSinceLastRun` (type: `boolean`):

Remember delivered listing ids in a key-value store named `magicbricks-state` and skip them next time (not charged).

## `stateName` (type: `string`):

By default it follows cities, sale/rent and property types.

## `skipIds` (type: `array`):

Magicbricks listing ids you already have. Not saved, not charged.

## Actor input object example

```json
{
  "cities": [
    "Mumbai"
  ],
  "transactionType": "sale",
  "propertyTypes": [],
  "maxResultsPerSearch": 0,
  "maxResults": 50,
  "onlyNewSinceLastRun": false,
  "skipIds": []
}
```

# Actor output Schema

## `dataset` (type: `string`):

Magicbricks listings as JSON items in the default dataset (also CSV, Excel, XML).

## `runSummary` (type: `string`):

RUN-SUMMARY record: searches, listings found, saved, filtered, skipped and charged.

# 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 = {
    "cities": [
        "Mumbai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_daemon/magicbricks-property-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 = { "cities": ["Mumbai"] }

# Run the Actor and wait for it to finish
run = client.actor("data_daemon/magicbricks-property-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 '{
  "cities": [
    "Mumbai"
  ]
}' |
apify call data_daemon/magicbricks-property-scraper --silent --output-dataset

```

## MCP server setup

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