99acres.com Property Scraper (India) avatar

99acres.com Property Scraper (India)

Pricing

from $0.60 / 1,000 listings

Go to Apify Store
99acres.com Property Scraper (India)

99acres.com Property Scraper (India)

Collect public property listings from 99acres.com by Indian city, for sale or rent. Each record has the listing URL, asking price in INR, area, bedrooms, locality, city, images and the time collected. Choose your cities, buy or rent, and a result limit — every run returns fresh listings.

Pricing

from $0.60 / 1,000 listings

Rating

0.0

(0)

Developer

Philip Kirkbride

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Categories

Features

Limited permissions

Share

Collect property listings and new-project developments from 99acres.com, one of India's largest property portals, for Bangalore, Mumbai, Delhi, Pune, Hyderabad, Chennai or any other city you name. Every record has one normalized shape: URL, price in INR, area in sq.ft., bedrooms (BHK), locality, city, sale or rent, and photos. Built for property investors, brokers, proptech teams and market analysts.

What you can do with it

  • Track asking prices by city and locality. Re-run the same cities every week and follow asking prices and price per sq.ft. over time.
  • Compare buying and renting. Run a buy search and a rent search for the same city to estimate rental yields by locality.
  • Follow new-project launches. Project rows carry the developer's BHK configurations with their own area and price ranges.
  • Build lead lists and shortlists. Filter the dataset by price, BHK and locality in your own tool and open the listing URLs you want.
  • Feed a valuation model. Prices in crore and lakh are converted to plain INR numbers, ready for a spreadsheet or database.

Quick start

  1. Open the Actor in Apify Console. The form is prefilled with Bangalore and 20 results.
  2. Change the city or add more, and choose buy or rent.
  3. Click Start, then download the dataset as JSON, CSV or Excel.
{"cities":["Bangalore"],"operation":"buy","maxResults":50}

An empty input ({}) returns a small sample: up to 10 Bangalore sale listings, and the status message says it was a sample. Name your cities in cities (or a single city) to run your own search; without a maxResults it stops at 50 results. maxPages and maxResults are limits, not promised counts; narrow the city list before raising them.

Input

InputTypeDefaultMeaning
citiesarray—Indian cities to search, for example ["Bangalore","Mumbai","Delhi","Pune","Hyderabad","Chennai"]. Free-text city names are accepted. A single city value is added to the list. With no city, the run is the 10-listing Bangalore sample.
operationstringbuybuy for sale listings or rent for rental listings.
maxPagesinteger5Maximum result pages per city, 1–10. A city stops early once maxResults is reached or a page returns no results.
maxResultsinteger50Maximum listings across all cities, 1–200. The no-city sample stops at 10.
requestDelaySecsnumber1.0Pause between page requests, 0.5–10 s.
proxyUrl, proxyUsername, proxyPasswordstringemptyOptional custom proxy. Leave empty to use the actor's default connection.

What it returns

Each run returns one record per search result. A result is either an individual property or a project development, identified by resultType.

Common fields: listing_key (stable join key), url (canonical listing URL), resultType (property or project), title, locality, city, listing_type (buy/rent), images, source and scraped_at.

Property rows keep the flat fields:

FieldMeaning
price_inrAbsolute asking price in INR. For a price range this is the lower bound; null when the listing says "price on request" or shows only a per-area rate.
priceMinInr, priceMaxInrBoth ends of a source price range; equal to price_inr for a single price.
price_per_sqft_inrAsking rate in INR per sq.ft., when the source gives one. A per-square-yard or per-square-metre rate is converted to per sq.ft. so the number matches the field name.
price_textThe price exactly as shown, for example ₹ 2 Cr or ₹ 8,982 /sq.ft..
area_sqftArea normalized to sq.ft.
areaMinSqft, areaMaxSqftBoth ends of an area range; equal to area_sqft for a single value.
bedrooms, bedroomsMin, bedroomsMaxBedrooms (BHK) as a single value or as range bounds.
configurationsnull for a property row.

Project development rows describe a development instead of one flat: projectUnitId, priceMinInr/priceMaxInr, areaMinSqft/areaMaxSqft, bedroomsMin/bedroomsMax, and configurations (one entry per BHK card with its own area and price range). The single-value price_inr, area_sqft and bedrooms are null because a development is not one unit.

Only real listing or project photos are returned; interface images such as arrows, icons and placeholders are dropped.

Output example

Illustrative property and project rows (JSON Lines):

{"listing_key":"99acres.com:Z72955163","url":"https://www.99acres.com/residential-land-plot-for-sale-in-banashankari-stage-6-block-3-bangalore-south-133-sqyd-r5-spid-Z72955163","resultType":"property","title":"Residential land / Plot in Banashankari 6th Stage 3rd Block","projectUnitId":null,"price_inr":20000000,"priceMinInr":20000000,"priceMaxInr":20000000,"price_per_sqft_inr":null,"price_text":"₹ 2 Cr","area_sqft":1200.0,"areaMinSqft":1200.0,"areaMaxSqft":1200.0,"bedrooms":null,"bedroomsMin":null,"bedroomsMax":null,"configurations":null,"locality":"Banashankari 6th Stage 3rd Block, Banashankari Stage 6","city":"Bangalore","listing_type":"buy","images":["https://imagecdn.99acres.com/media1/23274/17/465497998M-1768900002221.jpg"],"source":"99acres.com","scraped_at":"2026-10-18T12:00:00+00:00"}
{"listing_key":"99acres.com:r443829","url":"https://www.99acres.com/reviva-by-ssi-chandapura-bangalore-south-npxid-r443829","resultType":"project","title":"Reviva By SSI","projectUnitId":"443829","price_inr":null,"priceMinInr":7942000,"priceMaxInr":11324000,"price_per_sqft_inr":null,"price_text":null,"area_sqft":null,"areaMinSqft":1045.0,"areaMaxSqft":1490.0,"bedrooms":null,"bedroomsMin":2,"bedroomsMax":3,"configurations":[{"label":"2 BHK","areaMinSqft":1045.0,"areaMaxSqft":1085.0,"priceMinInr":7942000,"priceMaxInr":8246000,"bedrooms":2},{"label":"3 BHK","areaMinSqft":1315.0,"areaMaxSqft":1490.0,"priceMinInr":9994000,"priceMaxInr":11324000,"bedrooms":3}],"locality":"Chandapura","city":"Bangalore","listing_type":"buy","images":["https://newprojects.99acres.com/projects/sri_sai_infra_bangalore/reviva_by_ssi/images/rp2cv6d_1747209613_595772169_med.jpg"],"source":"99acres.com","scraped_at":"2026-10-18T12:00:00+00:00"}

Limits and caveats

  • Asking prices, areas and availability can change; verify a listing before making a decision.
  • A price that is not an absolute INR is returned as null rather than guessed. A per-area rate is stored in price_per_sqft_inr, not in price_inr.
  • Coverage is limited to the requested cities and to the page and result limits: up to 10 pages per city and 200 results per run.
  • Results are collected during the run and are not a publication date or proof of a price change.
  • Unavailable fields are null, not invented values.
  • Listings are saved page by page. A run with saved listings succeeds even if another city could not be read; the status names those cities. This is partial coverage, not a complete search of every requested city.
  • Collection stops before the run timeout, with the status Stopped before the run timeout; saved N listings. Increase the timeout to collect more.
  • A run with no saved listings fails with a plain status message instead of returning a silent empty dataset. An empty search page is checked a second time before it is accepted.

FAQ

How fresh is the data? Listings are read from 99acres.com live during each run. Nothing is cached between runs.

Which cities are supported? Any city 99acres.com covers. Bangalore, Mumbai, Delhi, Pune, Hyderabad and Chennai are mapped; other names are converted to the site's city format, so use the name as 99acres.com writes it.

Can I collect rentals? Yes. Set operation to rent.

Why is a price null? The listing either states "price on request" or shows only a per-area rate. In the second case the rate is available in price_per_sqft_inr.

How many pages does a run fetch? Five per city by default. Lower maxPages to 1 to fetch only the first page of each city, or raise it up to 10.

Can I run it on a schedule? Yes. Save your input as a task and add a schedule. Each run returns the listings online at that moment; compare listing_key values between runs to find new and removed listings.

Which export formats are available? JSON, CSV, Excel, XML and the other dataset formats Apify offers, or read the dataset from your own code with the Apify API.

Price

$0.0006 per listing delivered, plus $0.00005 per run start. The run-start event is charged per GB of memory; the default 1024 MB run is one start event. The start is charged even if the run saves no results. Platform usage is included in these prices.

Worked costs: a 50-listing run is about $0.03; a 200-listing run (the per-run maximum) is about $0.12; 1,000 listings over five runs cost about $0.60.

For help, contact Apify Support and include the run URL.