99acres & MagicBricks India Property Scraper - No Login avatar

99acres & MagicBricks India Property Scraper - No Login

Pricing

from $1.20 / 1,000 saved listings

Go to Apify Store
99acres & MagicBricks India Property Scraper - No Login

99acres & MagicBricks India Property Scraper - No Login

Get rent and sale listings from MagicBricks and 99acres in one table: price, price per sq ft, area, BHK, locality, project, builder, amenities as names, all photos and who listed it. Filter by city, type, BHK and budget. No login.

Pricing

from $1.20 / 1,000 saved listings

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

Share

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.

It is for brokers, property investors, rental analysts and proptech teams who compare prices in a city. The smallest run is one city: Bangalore + rent + 20 listings finishes in about 10–25 seconds.

99acres and MagicBricks property scraper: search a city by rent or buy, BHK and budget, get listings from both portals in one table with price, area, BHK and amenities, export JSON or CSV

Table of contents

What it does

The Actor opens the search results of MagicBricks, 99acres or both for the city you choose, page by page, and saves each listing to a Dataset. You choose:

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

Both portals use the same output fields, so you get one table. Each row has the price and the price per sq ft, carpet, built-up and super built-up area, BHK, bathrooms, furnishing, floor, locality, coordinates, project and builder, amenities as names (for example Lift, Swimming Pool), all photo URLs from the search result, and who listed it: owner, agent or builder.

Good fit

  • 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 fit / limits

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

Quick start

  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.

Expected result: 20 listings, 10 from MagicBricks and 10 from 99acres, in about 10–25 seconds.

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
cityCitystringyesprefill Bangalore2–40 letters, spaces or hyphens, in EnglishCity to search on the portals.PuneUse the English name. Bengaluru and Gurugram are accepted.
listingTypeRent or buystringnodefault rentrent, buyRental listings or homes for sale.buyFor rent, all prices are per month.
sitePortalstringnodefault bothboth, magicbricks, 99acresWhich portal to read.99acresKeep both to compare portals in one table.
maxItemsMax listingsintegernodefault 100, prefill 201–1000Total listings to save across both portals.200You pay per listing and per page, so set what you need.
propertyTypeProperty typearray of stringsnoempty = all homesapartment, builderFloor, house, villa, penthouse, studioKeeps only these types.["apartment", "builderFloor"]99acres has no separate penthouse type.
bhkBedrooms (BHK)array of stringsnoempty = any1, 2, 3, 4, 5 (5 = 5 or more)Keeps only these BHK numbers.["2", "3"]Listings without a BHK number (some studios) are left out when set.
budgetMinMin price (INR)integernoempty0 – 10,000,000,000Lowest price in rupees.20000For buy, use the full price: 5000000 = 50 lakh.
budgetMaxMax price (INR)integernoempty1 – 10,000,000,000Highest price in rupees.60000Listings without a price are left out when a budget is set.

Empty input: city is required. Without it, or with a city in another script (for example बेंगलुरु), the run fails at once with an input error and only the start event is charged. A listing that appears twice in the results is saved and charged once.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Both portalssite: bothmaxItemsThe limit is split between portals (MagicBricks gets the odd one). If one portal runs out, the other fills the rest.maxItems: 2010 + 10 rows.
Penthouse only on 99acrespropertyType: ["penthouse"]site: 99acres99acres has no penthouse filter, so nothing is searched.Run ends no_results, only the start event.
Budget setbudgetMin / budgetMaxlistingTypeRent budget is per month; buy budget is the full price.rent, budgetMax: 60000Fewer rows per page, so more pages per listing.
budgetMin > budgetMaxbudgetMinbudgetMaxInput error, the run stops before any request.90000 / 10000Only the start event.
Very narrow filterbhk, budget*maxItemsA portal stops after 5 pages in a row with no matching listing.budgetMax: 500No rows; about 11 pages charged.

Input examples

Rent: 2–3 BHK flats under ₹90,000 in Bangalore

{
"city": "Bangalore",
"listingType": "rent",
"propertyType": ["apartment"],
"bhk": ["2", "3"],
"budgetMax": 90000,
"maxItems": 100
}

Expected behavior: both portals are searched, 50 listings each. Expected output: flats with price, areaSqft, bhk, locality, furnishing, deposit. Limit or cost note: you pay for each saved listing and each page read.

Buy: homes for sale in Mumbai on MagicBricks only

{
"city": "Mumbai",
"listingType": "buy",
"site": "magicbricks",
"maxItems": 200
}

Expected behavior: MagicBricks sale listings in the portal's own order. Expected output: listings with price, priceText (for example 1.25 Cr), carpetAreaSqft, projectName, builderName, reraId. Limit or cost note: one MagicBricks page gives about 30 listings, so 200 rows need about 7 pages.

Output

Each row is one listing from one portal. The default view Listings shows the main columns; the view All fields shows every field, including area types, floor, amenities and dates. Export the Dataset as JSON, CSV, Excel or other Apify formats.

Output example

A real row from the prefill run (Bangalore, rent, 20 listings), trimmed: only one photo is shown and the description is shortened.

{
"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"
}

null means the portal did not show this value on the search result. It never means zero. The Actor does not compute missing values itself: for example, pricePerSqft stays null when the portal does not give it.

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
idUnique row ID: portal + listing IDstringno99acres:93377100Actor
sitePortal of the rowstringnomagicbricks, 99acresActor
listingIdPortal's own listing IDstringno93377100portal
urlListing page on the portalstringnoportal
titleListing headlinestringyes2 BHK Flat for rent in Sarjapur, Bangaloreportal
listingTypeRent or buystringnorent, buyinput
pricePrice in INR; for rent, per monthnumberyes: "Price on request"40000portal
priceTextPrice as the portal writes itstringyes40,000, 1.25 Crportal
pricePerSqftINR per sq ftnumberyes40portal, not computed
areaSqft, areaTypeArea shown on the card and which area it isnumber, stringyes979, Super Built-up Areaportal; on MagicBricks areaType is set only when the card has only the carpet area
carpetAreaSqft, builtUpAreaSqft, superAreaSqftArea types in sq ftnumberyes645, null, 979portal
bhkBedroomsintegeryes: some studios2portal
bathrooms, balconiesCountsintegeryes2, 1portal
propertyTypeType as the portal names itstringyesApartment, Independent Houseportal
furnishingFurnishingstringyesFurnished, Semi-Furnished, Unfurnishedportal
floor, totalFloorsFloor of the unit, floors in the buildingstring, integeryes10, 28; Groundportal
facingDirectionstringyesEastportal
locality, cityNeighbourhood and citystringyesSarjapur, Bangaloreportal
latitude, longitudePoint of the listingnumberyes12.8776, 77.7737portal
projectNameHousing project or societystringyesEden Park at The Prestige Cityportal
builderNameBuilder or developerstringyesSOBHA LimitedMagicBricks only
amenitiesAmenity namesarrayno, can be []["Lift", "Swimming Pool"]portal codes turned into names
imagesPhoto URLsarrayno, can be []portal CDN
listedByWho posted itstringyesowner, agent, builderportal
agencyNameAgency or builder companystringyes: null for owners and for names that look like a personG R Enterprisesprivacy rule
availabilityPossession or availabilitystringyesReady to Move, Immediately, 2026-08-09portal
tenantPreferenceRent only: preferred tenantsstringyesFamilyportal
depositRent only: security deposit, INRnumberyes150000portal
maintenance, maintenancePeriodMaintenance charge and periodnumber, stringyes3500, MonthlyMagicBricks only
reraIdRERA registration numberstringyesPRM/KA/RERA/1251/446/PR/210219/003939portal
descriptionListing text, up to 2,000 charactersstringyesphone numbers and e-mails hidden
postedAt, updatedAtPosted and last updated (ISO 8601)stringyes2026-08-09T08:40:01.000Zportal
positionOrder in the portal results in this runintegerno1Actor
searchUrlPortal search page the row came fromstringnoActor
fetchedAtWhen the row was collected (UTC)stringno2026-10-14T15:01:56.707ZActor

Output entities and surfaces

SituationWhereResult shapeUser action
Normal listingDataset, views Listings and All fieldsone row per listingopen, export or use by API
Filters match nothingDataset is empty; RUN_SUMMARY.status = no_resultsrun SUCCEEDEDwiden BHK or budget
Unknown cityRUN_SUMMARY.status = not_foundrun SUCCEEDED, no rowscheck the spelling, for example New Delhi, Gurgaon
Stopped early (cost limit, time limit)Dataset has the saved rows; RUN_SUMMARY.status = partial, reason = CHARGE_LIMIT or TIME_LIMITrun SUCCEEDEDraise the limit and run again
One portal blocked, the other workedrows from the working portal; status = partial, reason = SITE_ERRORrun SUCCEEDEDrun again later for the missing portal
Portal error with no rowsstatus = error, reason = SOURCE_ERRORrun FAILEDrun again later
Input errorstatus = invalid_inputrun FAILED, no requestsfix the input

RUN_SUMMARY (in the run's key-value store) has the run status, reason, message, counts (items, pages, bySite) and one entry per portal with status (complete, partial, no_results, not_found, skipped, error), items, totalOnSite, pagesFetched, filteredOut, searchUrl and error.

Pricing and limits

Pricing unit

This Actor uses pay-per-event pricing. You pay for:

EventPriceWhen
Actor start$0.001once per run
Page read$0.005for each portal page the Actor reads: a search results page or the 99acres city page
Saved listing$0.0018 (Free plan), $0.0017 (Bronze), $0.0015 (Silver), $0.0012 (Gold and higher)for each listing saved to the Dataset

One results page gives about 25–30 listings, so on the Free plan 1,000 listings cost about $2.00 all in, and on Gold about $1.40. Residential proxy and platform usage are included; you do not pay them separately.

  • A run with no listings still pays for the pages it read: an unknown city is about 2 pages ($0.011), a filter with no match stops after 5 empty pages per portal (about $0.056).
  • An input error costs only the start event: $0.001.
  • Listings that are filtered out or repeated are not charged. Retries after a portal block are not charged as pages.
  • If you set a maximum cost for the run, the Actor stops before a page or a listing that does not fit. The run still ends SUCCEEDED, with RUN_SUMMARY.status = partial and reason = CHARGE_LIMIT. Saved listings stay.

Cost examples

Free plan prices. Pages and times are from real test runs.

ScenarioInput scopeListingsPagesTotal (Free)Time
First testBangalore, rent, maxItems: 20203$0.0529–18 s
One listingKolkata, rent, studio, maxItems: 111$0.008~6 s
City overviewChennai, buy, maxItems: 2002009$0.41~40 s
LargeHyderabad, rent, maxItems: 50050020$1.00~84 s
MaximumMumbai, rent, maxItems: 10001,00038$1.99~142 s
Filter with no matchbudgetMax: 500011$0.056~30 s
Unknown cityAtlantis02$0.011~5 s

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Rent price check by localitycity, listingType: rent, bhklistingprice, locality, areaSqft, furnishingGoogle Sheets or CSV
Sale price per sq ft in a citylistingType: buylistingprice, pricePerSqft, carpetAreaSqft, localityBI tool via API
New projects and builderslistingType: buy, site: magicbrickslistingprojectName, builderName, reraId, availabilityCRM or spreadsheet
Compare portalssite: bothlistingsite, price, locality, listedByDataset export
Owner vs agent listingsanylistinglistedBy, agencyName, depositfilter in a spreadsheet

API and integrations

  • API: start the Actor with the same JSON input as in the examples, then read the Dataset items. Use ?view=overview for the Listings columns.
  • Export: JSON, CSV, Excel, XML and other formats from the Dataset.
  • Scheduling: create an Apify schedule to collect the same city every day or week.
  • Webhooks / no-code: use Apify integrations (Make, Zapier, Google Sheets, Slack) to send rows when the run finishes.

Use with AI agents (MCP)

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/india-property-listings
  • Smallest useful input:
{ "city": "Bangalore", "listingType": "rent", "maxItems": 20 }
  • Key output fields: price (INR; per month for rent; null = price on request), areaSqft (area on the card, areaType says which), bhk (bedrooms), locality (neighbourhood), site and url (portal and listing page).
  • A run with 20 listings takes about 10–25 seconds and costs $0.052 on the Free plan. One city per run, at most 1,000 listings.

Limits and partial results

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

Troubleshooting

The run returns 0 listings

Symptom: the Dataset is empty, RUN_SUMMARY.status = no_results. Likely reason: the BHK, type or budget filters match nothing, or a budget is set for the wrong mode (rent is per month, buy is the full price). Check: open the searchUrl from RUN_SUMMARY.sites in a browser. Action: widen the budget or remove a filter.

Status not_found

Symptom: the run message says the city was not found. Likely reason: the city name is misspelled or not in English. Action: use the English name, for example New Delhi, Gurgaon, Bangalore.

Run is partial with reason SITE_ERROR

Symptom: rows only from one portal. Likely reason: the other portal blocked or did not answer this time. This is not an empty result. Action: run again later, or run only the missing portal with site.

Run is partial with reason CHARGE_LIMIT or TIME_LIMIT

Symptom: fewer rows than maxItems. Action: raise the maximum cost or the timeout in run options, or lower maxItems.

FAQ

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.

Does it collect phone numbers or owner names?

No. Phone numbers and e-mails in descriptions are hidden, agencyName is always null for owners, and also null when the portal shows a person's name instead of a company. Only agency and builder company names are kept.

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.

Support

For a bug, question or feature request, open an issue on the Issues tab of this Actor. Include the run ID, the input (city, rent or buy, portal, filters) and the status message. Never send tokens or account data.