How to use it: 3 steps
- Make a free Apify accountApify 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.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
Bangalorein City. Each start is one run. - Download the resultsWhen 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.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
India Property Listings Scraper reads public rent and sale listings from MagicBricks and 99acres 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.
Who uses it
Home seekers
List 2 or 3 BHK flats under your budget.
Property analysts
Check price per sq ft by locality.
Builders and brokers
Track new projects and builders in a city.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| 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. |
Examples
- 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. That is enough for about 2,700 results.
Prices checked on 24 October 2026. See the current price on Apify.
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.
Details
Step by step on Apify
- Open the Input tab.
- Keep City =
Bangalore(prefill) or type your city. - Keep Rent or buy =
rentand Max listings =20(prefill) for a first test. - Click Start.
- Open the Output tab → Listings and check
title,price,areaSqftandlocality.
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 for better results
- 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 and good to know
- 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 withsite: 99acresonly (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
errorand the other portal's rows stay
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"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. You need your Apify API token from Apify Console → Settings → API & Integrations.
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)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"}'# 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)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (40)
| Field | Type | Meaning |
|---|---|---|
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 (8)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| City required | city | string | "Bangalore" |
| Rent or buy | listingType | string | "rent" |
| Portal | site | string | "both" |
| Max listings | maxItems | integer | 20 |
| Property type | propertyType | array | |
| Bedrooms (BHK) | bhk | array | |
| Min price (INR) | budgetMin | integer | |
| Max price (INR) | budgetMax | integer |






