99acres API99acres.com ↗
Search Indian real estate listings and new projects on 99acres.com. Filter by city, price, bedrooms, and transaction type. Returns pricing, RERA, and location data.
What is the 99acres API?
The 99acres.com API provides 3 endpoints for querying Indian real estate listings and new construction projects. Use search_properties to retrieve paginated listings filtered by city, price range, bedroom count, and transaction type (buy or rent), or use search_projects and get_project_detail to explore new launches and under-construction developments with RERA registration numbers, builder names, and geo-coordinates.
curl -X GET 'https://api.parse.bot/scraper/18b931b9-d4d5-4c8d-a72f-6bcbb55663da/search_properties?page=1&bedrooms=2%2C3&location=noida&max_price=100000000&min_price=5000000&property_type=residential&transaction_type=buy' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace 99acres-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: 99acres Real Estate API — search properties, discover projects, drill into details."""
from parse_apis._99acres_Real_Estate_API import (
NinetyNineAcres,
TransactionType,
PropertyType,
ProjectNotFound,
)
client = NinetyNineAcres()
# Search residential properties for sale in Noida
for prop in client.properties.search(
location="noida",
transaction_type=TransactionType.BUY,
property_type=PropertyType.RESIDENTIAL,
limit=3,
):
print(prop.property_name, prop.price, prop.locality)
# Search new/under-construction projects, take the first one
project_summary = client.project_summaries.search(location="noida", limit=1).first()
if project_summary:
print(project_summary.project_name, project_summary.price_range, project_summary.status)
# Drill into project details via the summary's navigation op
try:
detail = project_summary.details()
print(detail.project_name, detail.possession_date, detail.rera_number)
for config in detail.configurations[:3]:
print(config.bedroom, config.min_area, config.max_area, config.area_unit)
except ProjectNotFound as exc:
print(f"Project no longer listed: {exc}")
# Search rental properties filtered by bedrooms
for rental in client.properties.search(
location="mumbai",
transaction_type=TransactionType.RENT,
bedrooms="2,3",
limit=3,
):
print(rental.property_name, rental.price, rental.bedrooms)
print("exercised: properties.search / project_summaries.search / project_summary.details")
Search for real estate properties for sale or rent in a specific Indian city. Returns a paginated list of properties with details including price, area, bedrooms, locality, and seller info. Filters by transaction type, property type, bedrooms, and price range. Results are ordered by the site's default relevance ranking.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| bedrooms | string | Number of bedrooms filter, comma-separated values (e.g., 2,3) |
| location | string | City or locality to search in, hyphenated for multi-word names (e.g., noida, mumbai, bangalore, gurgaon, navi-mumbai, greater-noida) |
| max_price | integer | Maximum price filter in INR |
| min_price | integer | Minimum price filter in INR |
| property_type | string | Type of property |
| transaction_type | string | Type of transaction |
{
"type": "object",
"fields": {
"properties": "array of property objects with property_id, property_name, price, area, bedrooms, bathrooms, locality, city, description, property_type, transaction_type, details_url, images, posted_date, seller_name, is_verified, location_coordinates, amenities, is_project",
"total_count": "integer total number of matching properties",
"current_page": "string current page number"
},
"sample": {
"data": {
"properties": [
{
"area": "1399 sqft",
"city": "Noida",
"price": "2.33 Cr",
"images": [],
"bedrooms": null,
"locality": "Sector 145, Noida",
"amenities": "5,23,24,26",
"bathrooms": "0",
"is_project": false,
"description": "130mtr plot on 12mtr south east facing plot ready for sale.",
"details_url": "https://www.99acres.com/residential-land-plot-for-sale-in-sector-145-noida-155-sqyd-spid-G91242776",
"is_verified": false,
"posted_date": "19th May, 2026",
"property_id": "G91242776",
"seller_name": "OM PROPERTIES",
"property_name": "Residential land / Plot in Sector 145, Noida",
"property_type": "Residential Land",
"transaction_type": "Sale",
"location_coordinates": {
"LATITUDE": "28.48177",
"LONGITUDE": "77.45012"
}
}
],
"total_count": 23262,
"current_page": "1"
},
"status": "success"
}
}About the 99acres API
Property Search
The search_properties endpoint accepts filters including location (city or locality such as noida, mumbai, or gurgaon), transaction_type (buy or rent), property_type (residential or commercial), min_price and max_price in INR, and bedrooms as a comma-separated list. Each result in the properties array carries fields like property_id, property_name, price, area, bedrooms, bathrooms, locality, city, and description. The response also returns total_count so you can calculate pages, and current_page to track position.
Project Discovery
search_projects focuses on new-launch and under-construction developments rather than resale or rental listings. Filter by location and paginate with the page parameter. Each project object includes project_id, project_name, builder_name, price_range, location, status, details_url, and image. The total_count field lets you estimate the full result set size.
Project Detail
get_project_detail takes a 99acres project URL or slug as its sole required input and returns richer data for a single project: rera_number, builder_name, description, price_range, status, latitude, longitude, and an array of usp strings that capture the project's advertised highlights. This endpoint is the primary way to retrieve geo-coordinates and RERA registration information for compliance or mapping workflows.
The 99acres API is a managed, monitored endpoint for 99acres.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when 99acres.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official 99acres.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a property comparison tool filtering Mumbai or Bangalore listings by bedroom count and price band using
search_properties. - Track new real estate project launches city by city with
search_projectsand monitor status changes from New Launch to Under Construction. - Enrich a CRM with RERA numbers and geo-coordinates by calling
get_project_detailon each project URL found insearch_projectsresults. - Generate a rental market price index for Indian cities by aggregating
priceandareafields across paginatedtransaction_type=rentqueries. - Map residential and commercial inventory side by side by toggling the
property_typefilter on repeatedsearch_propertiescalls for the same locality. - Alert system for new project listings in a target city by diffing
total_countacross scheduledsearch_projectscalls.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does 99acres.com have an official developer API?+
What does `get_project_detail` return that `search_projects` does not?+
get_project_detail adds rera_number, latitude, longitude, the full description text, and the usp array. search_projects returns only summary fields like price_range, status, builder_name, and a thumbnail image — enough to build a list view but not a full project profile.Can I filter `search_projects` by property type, price range, or possession status?+
search_projects accepts only location and page; filtering by price, status, or property type is not supported at the project-search level. The search_properties endpoint offers those filters for individual listings. You can fork this API on Parse and revise it to add status or price-range filtering to the project search endpoint.Are property agent contact details or phone numbers returned?+
How does pagination work across the endpoints?+
page parameter. The response always includes current_page (returned as a string) and total_count (an integer). Divide total_count by the observed page size to estimate the number of pages. There is no explicit page_size parameter, so page size is fixed by the source.