# 99acres and MagicBricks Property Scraper

> 99acres scraper and MagicBricks scraper in one table. Get rent and sale price, price per sq ft, BHK, locality and builder. Filter by city. No login.

URL: https://cliqtomedia.com/actors/india-property-listings/

Category: Real estate, travel & cars · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/india-property-listings?fpr=cliqto

Get rent and sale homes from MagicBricks and 99acres in one table. Pick a city, type, BHK and budget. Compare prices across both portals.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `Bangalore` in City. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

India Property Listings Scraper reads public rent and sale listings from [MagicBricks](https://www.magicbricks.com/) and [99acres](https://www.99acres.com/) for one Indian city and returns one row per listing with price, area, BHK, locality, project, builder, amenities, photos and who listed it.

- City (`city`): for example Bangalore, Mumbai, Pune, New Delhi, Gurgaon, Noida, Hyderabad, Chennai, Kolkata or Ahmedabad. Bengaluru and Gurugram work too.
- Rent or buy (`listingType`): rental listings (price per month) or homes for sale (full price).
- Portal (`site`): both portals (default), only MagicBricks or only 99acres.
- Filters: property type, BHK and budget in INR.

### Good for

- Compare rents or sale prices in one city across MagicBricks and 99acres.
- Build a list of 2–3 BHK flats under a budget with area, locality and amenities.
- Track new projects and builders in a city with RERA numbers and price per sq ft.

### Not a good fit

- Residential homes only: apartments, builder floors, houses, villas, penthouses and studios. No plots, offices, shops or PG.
- No phone numbers, e-mails or names of private owners. The Actor does not log in and does not open single listing pages.
- One city per run and at most 1,000 listings per run. For more, run the Actor again with another city, BHK or budget.
- Other portals (Housing.com, NoBroker, Square Yards) are not supported.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Page read | $0.005 | One portal page read: a search results page or the 99acres city page. Retries after a block are not charged. |
| Saved listing | $0.0018 (from $0.0012 on paid Apify plans) | One listing saved to the Dataset. Filtered-out and repeated listings are not charged. |

- One result: about $0.0028.
- 1,000 results: about $1.80.
- Every day 100 results, for 30 days: about $5.43 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/india-property-listings?fpr=cliqto

## Questions

### Do I need a portal account or proxy?

No. It reads public results. An Indian proxy is in the price.

### Does it get plots or offices?

No. It covers homes only, like flats, houses and villas.

### Can I get owner phone numbers?

No. Phones, emails and owner names are not collected.

### Can I pick only one portal?

Yes. Choose both, only MagicBricks or only 99acres.

### Do I need a MagicBricks or 99acres account?

No. The Actor reads public search results without login. Indian residential proxy is included in the price.

### Why are some fields null?

The portal did not show this value on the search result. For example, MagicBricks often gives only the carpet area, and 99acres does not give the builder name. The Actor does not guess missing values.

### Are the results complete and fresh?

Each row is what the portal showed at `fetchedAt`. The portals order and limit their own results; `RUN_SUMMARY.sites[].totalOnSite` shows how many listings the portal reported. Each listing is saved once per run.

### Can I search several cities in one run?

No, one city per run. Start one run per city, or call the Actor from a schedule or the API for each city.

## Data fields

- `id` (string): Unique row ID: site plus the portal listing ID, e.g. magicbricks:79283231.
- `site` (string): Portal the listing comes from: magicbricks or 99acres.
- `listingId` (string): The portal's own listing ID.
- `url` (string): Link to the listing page on the portal.
- `title` (string): Listing headline as the portal shows it.
- `listingType` (string): rent or buy.
- `price` (number): Price in INR. For rent: per month. null when the portal shows "Price on request".
- `priceText` (string): Price as the portal writes it, e.g. 1.25 Cr or 35,000.
- `pricePerSqft` (number): INR per square foot, as the portal reports it.
- `areaSqft` (number): The area the portal shows on the card, in sq ft.
- `areaType` (string): Which area areaSqft is (e.g. Carpet Area), when the portal says so. On MagicBricks only set when the card has nothing but the carpet area.
- `carpetAreaSqft` (number): Carpet area in sq ft.
- `builtUpAreaSqft` (number): Built-up area in sq ft.
- `superAreaSqft` (number): Super built-up area in sq ft.
- `bhk` (integer): Bedrooms (BHK). null for studios when the portal gives no number.
- `bathrooms` (integer): Bathrooms.
- `balconies` (integer): Balconies.
- `propertyType` (string): Property type as the portal names it, e.g. Apartment, Independent House, Builder Floor.
- `furnishing` (string): Furnished, Semi-Furnished or Unfurnished.
- `floor` (string): Floor of the unit as the portal writes it, e.g. 3, Ground or Lower Basement.
- `totalFloors` (integer): Floors in the building.
- `facing` (string): Direction the property faces, e.g. East.
- `locality` (string): Locality or neighbourhood, e.g. Whitefield.
- `city` (string): City.
- `latitude` (number): Latitude, when the portal publishes it.
- `longitude` (number): Longitude, when the portal publishes it.
- `projectName` (string): Housing project or society name.
- `builderName` (string): Builder or developer of the project (MagicBricks only).
- `amenities` (array): Amenity names, e.g. Lift, Power Back Up, Swimming Pool. Empty list when none are listed.
- `images` (array): Photo URLs from the search result (https). Empty list when the listing has no photos.
- `listedBy` (string): Who posted the listing: owner, agent or builder.
- `agencyName` (string): Agency or builder company name. Null for owners and when the portal shows what looks like a person's name: no private names.
- `availability` (string): Possession or availability, e.g. Ready to Move or Immediately.
- `tenantPreference` (string): Rent only: preferred tenants, e.g. Family, Single Women.
- `deposit` (number): Rent only: security deposit in INR.
- `maintenance` (number): Maintenance charge in INR (MagicBricks only).
- `maintenancePeriod` (string): Period of the maintenance charge, e.g. Monthly.
- `reraId` (string): RERA registration number, when the listing shows one.
- `description` (string): Listing text, up to 2000 characters. Phone numbers and e-mails are hidden.
- `postedAt` (string): When the listing was posted (ISO 8601).

## Input settings

- `city` (string, required): City to search, e.g. Bangalore, Mumbai, Pune, New Delhi, Gurgaon, Noida, Hyderabad, Chennai, Kolkata or Ahmedabad. Bengaluru and Gurugram work too.
- `listingType` (string): Rental listings (price per month) or properties for sale (full price).
- `site` (string): Which portal to read. With both, the listings limit is split between them, and one portal fills in what the other lacks.
- `maxItems` (integer): Maximum listings to save in total (across both portals). Each listing and each portal page read is charged.
- `propertyType` (array): Leave empty for all homes. 99acres has no separate penthouse type: penthouses there come with apartments.
- `bhk` (array): Leave empty for any. 5 means 5 BHK or more. Listings without a BHK number (some studios) are left out when this is set.
- `budgetMin` (integer): Lowest price in rupees. For rent: per month (e.g. 20000). For buy: full price (e.g. 5000000 = 50 lakh). Listings without a price are left out when a budget is set.
- `budgetMax` (integer): Highest price in rupees. For rent: per month (e.g. 60000). For buy: full price (e.g. 15000000 = 1.5 crore).

## Step by step on Apify

1. Open the Input tab.
2. Keep City = `Bangalore` (prefill) or type your city.
3. Keep Rent or buy = `rent` and Max listings = `20` (prefill) for a first test.
4. Click Start.
5. Open the Output tab → Listings and check `title`, `price`, `areaSqft` and `locality`.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Rent price check by locality | `city`, `listingType: rent`, `bhk` | listing | `price`, `locality`, `areaSqft`, `furnishing` | Google Sheets or CSV |
| Sale price per sq ft in a city | `listingType: buy` | listing | `price`, `pricePerSqft`, `carpetAreaSqft`, `locality` | BI tool via API |
| New projects and builders | `listingType: buy`, `site: magicbricks` | listing | `projectName`, `builderName`, `reraId`, `availability` | CRM or spreadsheet |
| Compare portals | `site: both` | listing | `site`, `price`, `locality`, `listedBy` | Dataset export |
| Owner vs agent listings | any | listing | `listedBy`, `agencyName`, `deposit` | filter in a spreadsheet |

## Tips

- One run covers one city. Make one task per city.
- Bengaluru and Gurugram work as city names too.
- Some fields are empty when the portal does not show them. The tool does not guess.

## Limits



- At most 1,000 listings per run and 60 pages per portal. The test run with 1,000 listings finished in 142 s.
- The default timeout is 300 s. Before the timeout the Actor stops new requests and keeps saved rows (`partial`, `TIME_LIMIT`). For 1,000 listings with narrow filters or with `site: 99acres` only (about 40 pages at a slower pace), give the run more time, for example 600 s.
- With very narrow filters, a portal stops after 5 pages in a row with no matching listing, so a small number of matches can be missed deep in the results.
- Values come from the search result cards. Fields that appear only on the listing page (full description, phone numbers) are not collected.
- 99acres sometimes shows a check page to fast visitors. The Actor slows down and retries through another Indian IP; if a portal still does not answer, its status is `error` and the other portal's rows stay.

## Sample result

```json
{
  "id": "99acres:93377100",
  "site": "99acres",
  "listingId": "93377100",
  "url": "https://www.99acres.com/2-bhk-bedroom-apartment-flat-for-rent-in-eden-park-at-the-prestige-city-sarjapur-bangalore-east-979-sqft-spid-B93377100",
  "title": "2 BHK Flat for rent in Sarjapur, Bangalore",
  "listingType": "rent",
  "price": 40000,
  "priceText": "40,000",
  "pricePerSqft": 40,
  "areaSqft": 979,
  "areaType": "Super Built-up Area",
  "carpetAreaSqft": 645,
  "builtUpAreaSqft": null,
  "superAreaSqft": 979,
  "bhk": 2,
  "bathrooms": 2,
  "balconies": 1,
  "propertyType": "Residential Apartment",
  "furnishing": "Semi-Furnished",
  "floor": "10",
  "totalFloors": 28,
  "facing": "East",
  "locality": "Sarjapur",
  "city": "Bangalore",
  "latitude": 12.877670671473693,
  "longitude": 77.7737927936145,
  "projectName": "Eden Park at The Prestige City",
  "builderName": null,
  "amenities": ["Corner Property", "Power Backup", "Gated Society", "Gas Pipeline", "CCTV Surveillance", "Pet Friendly"],
  "images": ["https://imagecdn.99acres.com/media1/40671/14/813434867M-1786265241016.jpg"],
  "listedBy": "agent",
  "agencyName": "G R Enterprises",
  "availability": "2026-08-09",
  "tenantPreference": "Single Women, Single Men, Family",
  "deposit": 150000,
  "maintenance": null,
  "maintenancePeriod": null,
  "reraId": null,
  "description": "Additionally, this property is in vicinity to important points of interest and is close to school, close to hospital…",
  "postedAt": "2026-08-09T08:40:01.000Z",
  "updatedAt": "2026-08-09T09:34:23.000Z",
  "position": 1,
  "searchUrl": "https://www.99acres.com/search/property/rent/residential/bangalore?city=20&preference=R&area_unit=1&res_com=R&property_type=1,2,4,90",
  "fetchedAt": "2026-10-14T15:01:56.707Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/india-property-listings`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/india-property-listings").call(run_input={
    "city": "Bangalore",
    "listingType": "rent"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~india-property-listings/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"city": "Bangalore", "listingType": "rent"}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/india-property-listings")
result = tool.invoke({"run_input": {"city": "Bangalore", "listingType": "rent"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/)
- [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/)
- [Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent](https://cliqtomedia.com/actors/us-property-listings/)
