# 99acres Scraper | Fast & Reliable | $17 / mo (`fatihtahta/99acres-scraper`) Actor

Scrapes detailed real estate listings from 99acres.com, India's leading property portal. Extracts prices, location details, agent/dealer info, and property specs. Fast and reliable, it delivers clean, structured data ready for market analysis, lead generation, and competitor research.

- **URL**: https://apify.com/fatihtahta/99acres-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 144 total users, 5 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$16.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 99acres Scraper

**Slug:** `fatihtahta/99acres-scraper`

### Overview

99acres Scraper collects structured property listing data from 99acres, including listing identity, property details, pricing, area, location, seller information, media availability, compliance signals, project metadata, and listing tags. [99acres](https://www.99acres.com) is a major Indian real estate marketplace, making its public listings useful for market intelligence, competitive tracking, lead enrichment, and operational reporting. The actor converts public listing information into repeatable JSON records that can be consumed by analytics, CRM, BI, and data engineering workflows. It is designed for recurring data acquisition where consistent inputs, predictable output structure, and automation readiness matter. Results reflect the public data available at run time and should be validated against your specific business requirements before scaling.

### Why Use This Actor

- **Market research and analytics teams:** build structured extraction workflows for pricing, availability, property mix, geography, furnishing, seller type, and market movement analysis.
- **Product and content teams:** populate comparison pages, internal catalogs, editorial research, and property intelligence products with normalized public listing data.
- **Developers and data engineering teams:** feed downstream systems, warehouses, enrichment pipelines, search indexes, and operational reporting jobs with repeatable JSON records.
- **Lead generation and enrichment teams:** identify public seller, builder, dealer, and property signals for qualification, segmentation, and CRM enrichment workflows.
- **Monitoring and competitive tracking teams:** schedule recurring collection to observe category movement, pricing shifts, new listings, media availability, and verified-property coverage over time.

### Common Use Cases

- **Market intelligence:** monitor supply, pricing, availability, locations, property types, construction status, and seller distribution across selected markets.
- **Lead generation:** build targeted prospect lists from public listings filtered by location, seller type, deal type, property type, price range, or media availability.
- **Competitive monitoring:** track changes across residential and commercial listings, builders, dealers, projects, and local market segments.
- **Catalog and directory building:** populate internal databases with structured public property records for discovery, comparison, or review workflows.
- **Data enrichment:** add current public attributes such as price, area, location, project, furnishing, seller class, and compliance signals to CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, regional trend reports, or operational scorecards.

### Quick Start

1. Choose one or more `location` values that define the cities, localities, or areas you want to collect.
2. Select a `deal_type`, such as residential sale, residential rent, commercial sale, or commercial rent.
3. Add optional filters such as price or rent range, property type, area, bedrooms, seller type, furnishing, verification, RERA signals, photos, or videos.
4. Set a small `limit` for the first validation run.
5. Run the actor in Apify Console and inspect the first dataset records.
6. Increase coverage, refine filters, or schedule the actor once the output shape matches your workflow.

### Input Parameters

Configure the available filters below to define the collection scope.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `location` | array of strings | One or more city, locality, or area names, such as `New Delhi`, `Mumbai`, or `Gurgaon`. Leave empty only when another supported scope is sufficient for your run. | - |
| `deal_type` | string | Market segment to collect. Allowed values: `residential_sale` (Residential Properties For Sale), `residential_rent` (Residential Properties For Rent), `commercial_sale` (Commercial Properties For Sale), `commercial_rent` (Commercial Properties For Rent). | - |
| `min_price` | string | Minimum sale price in INR for sale searches. Allowed values range from `inr_0` (0) through lacs and crores up to `inr_100_plus_crores` (100+ Crores). Use with sale deal types. | - |
| `max_price` | string | Maximum sale price in INR for sale searches. Allowed values range from `inr_0` (0) through lacs and crores up to `inr_100_plus_crores` (100+ Crores). Use with sale deal types. | - |
| `min_rent` | string | Minimum monthly rent in INR for rental searches. Allowed values range from `inr_1000` (1,000) to `inr_10_plus_lac` (10+ Lac). Use with rent deal types. | - |
| `max_rent` | string | Maximum monthly rent in INR for rental searches. Allowed values range from `inr_1000` (1,000) to `inr_10_plus_lac` (10+ Lac). Use with rent deal types. | - |
| `verified_property` | boolean | When `true`, saves only listings marked as verified. When `false`, includes both verified and unverified listings. | `false` |
| `rera_approval` | array of strings | RERA-related filters. Allowed values: `approved_property` (RERA approved properties), `approved_agent` (RERA registered dealers). | - |
| `property_type` | array of strings | Property categories to include. Allowed values: `all_residential`, `all_commercial`, `apartment`, `house_villa`, `land`, `builder_floor`, `farm_house`, `shop`, `office_space`, `land_institutional_land`, `mall_space_retail`, `office_in_business_park`, `office_in_it_park`, `warehouse`, `industrial_land`, `factory`, `agricultural_farm_land`, `business_center`, `serviced_apartment`, `showroom`, `one_rk_studio_apartment`. | - |
| `min_area` | integer | Minimum built-up area in square feet. Listings below this area are excluded. | - |
| `max_area` | integer | Maximum built-up area in square feet. Listings above this area are excluded. | - |
| `bedroom_count` | array of strings | Residential bedroom-count filter. Allowed values: `any_bhk`, `one_bhk`, `two_bhk`, `three_bhk`, `four_bhk`, `five_bhk`, `six_bhk`, `seven_bhk`, `eight_bhk`, `nine_bhk`, `ten_bhk`. | - |
| `contruction_status` | array of strings | Construction status filter. Allowed values: `new_launch`, `under_construction`, `ready_to_move`. | - |
| `seller_type` | array of strings | Seller source filter. Allowed values: `owner`, `builder`, `dealer`, `featured_dealer`. | - |
| `purchase_type` | array of strings | Sale purchase category. Allowed values: `resale`, `new_booking`. | - |
| `furnishment` | array of strings | Furnishing level filter. Allowed values: `unfurnished`, `semifurnished`, `furnished`. | - |
| `with_photo` | boolean | When `true`, saves only listings with photos. | `false` |
| `with_video` | boolean | When `true`, saves only listings with videos. | `false` |
| `limit` | integer | Maximum number of listings to save for each location. Minimum value is `1`. If omitted, the actor saves up to 100 listings per location. | `100` |

### Choosing Inputs

Use `location` to define the geographic scope first, then use `deal_type` to choose the market segment. Price filters apply to sale searches, while rent filters apply to rental searches; area values are measured in square feet. Narrower filters such as property type, bedroom count, seller type, verified status, RERA status, furnishing, and media availability produce more targeted datasets, while broader inputs improve discovery. Use `limit` to control run size: the default is 100 listings per location, and you can raise it after validating the output quality and coverage.

For broad high-limit runs, the actor manages large result sets internally while keeping the selected `deal_type` and user-provided sale price or rent bounds intact.

### Example Inputs

#### Residential sale market sample

```json
{
  "location": ["Hyderabad"],
  "deal_type": "residential_sale",
  "property_type": ["apartment", "house_villa"],
  "min_price": "inr_50_lacs",
  "max_price": "inr_2_crores",
  "limit": 25
}
````

#### Rental listings with media

```json
{
  "location": ["Gurgaon"],
  "deal_type": "residential_rent",
  "bedroom_count": ["two_bhk", "three_bhk"],
  "min_rent": "inr_30000",
  "max_rent": "inr_1_lac",
  "with_photo": true,
  "limit": 50
}
```

#### Commercial discovery run

```json
{
  "location": ["Mumbai"],
  "deal_type": "commercial_rent",
  "property_type": ["office_space", "shop", "showroom"],
  "seller_type": ["owner", "dealer"],
  "with_video": false,
  "limit": 40
}
```

#### High-coverage sale run

```json
{
  "location": ["Delhi"],
  "deal_type": "residential_sale",
  "limit": 3000
}
```

### Output

#### Output destination

The actor writes normalized 99acres property records to the default Apify dataset. Each item represents one public property listing and is grouped for direct use in analytics tools, ETL pipelines, BI dashboards, CRM enrichment, and downstream APIs.

Listing records use `record_type = "property_listing"`. The selected market segment is preserved in `listing.deal_type`, such as `residential_sale`, `residential_rent`, `commercial_sale`, or `commercial_rent`.

#### Record envelope (all items)

Every property listing item includes these stable envelope fields:

- **record\_type** *(string, required)*: stable row discriminator. Normal property rows use `property_listing`.
- **record\_id** *(string, required)*: stable 99acres listing identifier, usually the SPID, property ID, project unit ID, or canonical URL fallback.
- **source\_context** *(object, required)*: source, seed, URL, page, scrape timestamp, and external ID context.
- **entity** *(object, required)*: human-readable title, description, public URL, and listing IDs.

Recommended idempotency key: `record_type + ":" + record_id`.

Use the idempotency key for deduplication and upserts when syncing repeated runs into warehouses, CRMs, search indexes, or operational databases. The envelope makes records easier to merge, deduplicate, and sync across repeated runs even when optional listing details change.

#### Examples

##### Example: property listing

```json
{
  "record_type": "property_listing",
  "record_id": "88250018",
  "source_context": {
    "source_name": "99acres",
    "source_domain": "99acres.com",
    "source_url": "https://www.99acres.com/api-aggregator/srp/search?page=1",
    "canonical_url": "https://www.99acres.com/studio-apartment-flat-for-sale-in-piccadilly-3-goregaon-east-mumbai-andheri-dahisar-344-sqft-r1-spid-O88250018",
    "listing_url": "https://www.99acres.com/studio-apartment-flat-for-sale-in-piccadilly-3-goregaon-east-mumbai-andheri-dahisar-344-sqft-r1-spid-O88250018",
    "seed_id": "bb742ff4e072",
    "seed_type": "query",
    "seed_value": "Western Mumbai",
    "page_index": 1,
    "scraped_at": "2026-05-26T09:53:08+00:00",
    "external_ids": {
      "spid": "88250018",
      "property_id": "O88250018"
    }
  },
  "entity": {
    "title": "Studio Apartments / 1 RK Flats in Goregaon East, Mumbai",
    "description": "Royal palms mumbai offers affordable yet comfortable living in goregaon east.",
    "url": "https://www.99acres.com/studio-apartment-flat-for-sale-in-piccadilly-3-goregaon-east-mumbai-andheri-dahisar-344-sqft-r1-spid-O88250018",
    "external_ids": {
      "spid": "88250018",
      "property_id": "O88250018"
    }
  },
  "listing": {
    "spid": "88250018",
    "property_id": "O88250018",
    "title": "Studio Apartments / 1 RK Flats in Goregaon East, Mumbai",
    "details_url": "https://www.99acres.com/studio-apartment-flat-for-sale-in-piccadilly-3-goregaon-east-mumbai-andheri-dahisar-344-sqft-r1-spid-O88250018",
    "deal_type": "residential_sale",
    "market": "residential",
    "property_type": "Studio Apartment",
    "listing_type": "T",
    "product_type": "AI_LISTING",
    "posted_at": "2026-01-22T10:16:43+00:00",
    "updated_at": "2026-05-21T09:22:38+00:00",
    "expires_at": "2026-06-02T00:00:00"
  },
  "pricing": {
    "display_price": "35 Lac",
    "price_in_words": "Rs. 35 Lac",
    "min_price": 3500000,
    "max_price": 3500000,
    "average_price": 3500000,
    "price_per_unit_area": 15418.0,
    "price_sqft": 15418.0,
    "currency": "INR"
  },
  "property": {
    "bedrooms": 1,
    "bathrooms": 1,
    "balconies": 0,
    "furnishing": "Unfurnished",
    "floor_number": "8",
    "total_floors": 12,
    "ownership_label": "Freehold",
    "area": {
      "display_area": "344 sqft",
      "secondary_area": "31.96 sq.m.",
      "builtup_area": 340.0,
      "builtup_sqft": 340.0,
      "carpet_area": 227.0,
      "carpet_sqft": 227.0
    }
  },
  "availability": {
    "availability_code": "I",
    "availability": {
      "availability": 2,
      "sub_availability": 3
    },
    "listing_posted_at": "2026-01-22T10:16:43+00:00",
    "listing_expires_at": "2026-06-02T00:00:00"
  },
  "location": {
    "city": "Western Mumbai",
    "city_id": "218",
    "locality": "Goregaon East, Mumbai",
    "building_id": "900217",
    "building_name": "Piccadilly 3",
    "society_name": "Piccadilly 3",
    "coordinates": {
      "latitude": 19.1509975,
      "longitude": 72.8856487,
      "zoom_level": 14,
      "source": "VERIFIED"
    },
    "total_landmark_count": 47
  },
  "media": {
    "main_image": "https://imagecdn.99acres.com/media1/38155/3/763103852M-1779353487657.jpg",
    "photos": [
      "https://imagecdn.99acres.com/media1/38155/3/763103852M-1779353487657.jpg"
    ],
    "media_count": {
      "prop_photo_count": 8,
      "prop_video_count": "0"
    },
    "has_photo": true
  },
  "contact_details": {
    "contact_city_id": "218",
    "contact_name": "mir",
    "company_name": "Olive Homes",
    "class_label": "Dealer",
    "class_heading": "Dealer: Olive Homes"
  },
  "relationships": {
    "project": {
      "project_id": "0",
      "project_name": "Piccadilly 3",
      "building_id": "900217",
      "building_name": "Piccadilly 3",
      "amenities": "5,17,21,23,24,6,19,9,101,102"
    }
  },
  "metrics": {
    "fomo": {
      "text": "2 people already contacted this week"
    },
    "media_count": {
      "prop_photo_count": 8,
      "prop_video_count": "0"
    },
    "total_landmark_count": 47
  },
  "attributes": {
    "compliance": {
      "verified": true,
      "self_verified": true,
      "rera_type": "RERA"
    },
    "tags_and_signals": {
      "secondary_tags": ["READY TO MOVE", "RESALE"],
      "is_new_launch": false,
      "is_fresh": false,
      "show_whatsapp_icon": true
    },
    "source_specific": {
      "features": "23,24,5,17,6,19,9,21",
      "page": 1,
      "shortlisted": "N",
      "reported": "N"
    }
  }
}
```

### Field Reference

#### Property listing records

- **record\_type** *(string, required)*: `property_listing` for normal listing rows.
- **record\_id** *(string, required)*: stable listing key for deduplication and upserts.
- **source\_context** *(object, required)*: source name/domain, source URL, canonical URL, listing URL, input seed context, page index, scrape timestamp, and source external IDs.
- **entity** *(object, required)*: listing title, description, public URL, and external IDs in a compact entity envelope.
- **listing** *(object, required)*: source listing identifiers, deal type, market, property type, listing/product classification, and listing lifecycle timestamps.
- **pricing** *(object, optional)*: display price, price words, normalized INR minimum/maximum/average values, price per area, deposits, brokerage, currency, and related source price flags.
- **property** *(object, optional)*: bedrooms, bathrooms, balconies, furnishing, floor, parking, ownership, transaction type, rental attributes, seat counts, prelease fields, and nested `property.area` measurements.
- **availability** *(object, optional)*: availability code/object, possession status, listing posted/updated/expiry timestamps, age display, and prelease availability details.
- **location** *(object, optional)*: city, locality, address, building, society, coordinates, landmarks, landmark summaries, and nearby-place counts.
- **media** *(object, optional)*: primary image, image galleries, thumbnails, sprites, video metadata, media counts, media flags, and alt text.
- **contact\_details** *(object, optional)*: public seller, dealer, builder, or representative name, company, class labels, city, image, and profile metadata.
- **relationships** *(object, optional)*: related project, builder, brochure, amenities, possession, configuration, building, and project metadata.
- **metrics** *(object, optional)*: demand labels, media counts, landmark counts, and other summary values useful for dashboards.
- **attributes.compliance** *(object, optional)*: verification, RERA, registration, and contact masking signals.
- **attributes.tags\_and\_signals** *(object, optional)*: primary/secondary tags, badges, offer tags, launch/freshness flags, WhatsApp display flags, and source engagement labels.
- **attributes.source\_specific** *(object, optional)*: additional public 99acres fields that do not fit the normalized groups, preserved in `snake_case`.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, listing type, and target-side UI experiments.
- **Optional fields:** null-check optional fields in downstream code, especially media, contact details, compliance, project, coordinates, and landmark data.
- **Deduplication:** use `record_type + ":" + record_id` as the recommended idempotency key.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one geography or market segment per run when you need cleaner reporting and easier comparisons.
- Leave optional filters empty when the goal is broad discovery.
- Add filters gradually to understand how each field changes coverage.
- Use price filters for sale searches and rent filters for rental searches.
- Schedule recurring runs for monitoring workflows instead of relying on manual one-off collection.
- Store records with `record_type + ":" + record_id` to avoid duplicates across repeated runs.

### How to Run on Apify

1. Open the Actor in Apify Console.
2. Configure the available input fields for the target scope.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and review the first records.
6. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Use Apify schedules to run the actor periodically and keep your dataset fresh for monitoring, reporting, or enrichment workflows. Recurring runs are most useful when you store results with stable identifiers and compare changes over time.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **CRM enrichment:** sync public property, seller, builder, dealer, location, and compliance attributes into account or lead records.
- **BI dashboards:** monitor pricing, availability, property mix, seller distribution, geographic coverage, and listing movement over time.
- **Data warehouses:** load normalized listing records into analytics storage for historical trend analysis and operational reporting.
- **Google Sheets or Airtable:** review smaller curated datasets, validate leads, or share listing samples with business teams.
- **Webhooks:** trigger ingestion, validation, alerts, or notifications after each completed run.
- **Data enrichment pipelines:** append current public listing attributes to existing property, market, or CRM datasets.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for analysis, reporting, and operational workflows.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into internal systems
- **BI and warehouses:** for reporting, dashboards, and historical analysis

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what <https://www.99acres.com> publicly exposes at run time.
- Some optional fields may be missing on sparse records or certain listing types.
- Very broad searches may take longer or require higher limits to collect enough matching records.
- Very broad searches rely on the target's reported result totals and supported price or rent filters. Branches that still cannot be split safely are reported as incomplete.
- Target-side changes can affect field availability, labels, or naming.
- Regional, account, or availability differences may change visible results.
- The actor does not guarantee completeness for every market, listing, or historical change.

### Troubleshooting

- **No results returned:** check filters, location spelling, property type compatibility, and whether 99acres has matching public records.
- **Fewer results than expected:** broaden filters, raise `limit`, and verify that the selected location and segment contain enough matching listings.
- **Some fields are empty:** optional fields depend on what each record publicly provides.
- **Run takes longer than expected:** reduce scope or lower `limit` for validation.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public 99acres property listing data, including listing details, prices or rents, area, location, media, seller information, compliance signals, project information, and tags when available.

#### Can I filter by location, category, price, or other criteria?

Yes. Supported filters include `location`, `deal_type`, sale price range, rent range, property type, area range, bedroom count, construction status, seller type, purchase type, furnishing, verification, RERA signals, photos, videos, and `limit`.

#### Can I filter by date?

The input schema does not include a date filter. Some output records may include listing lifecycle timestamps such as posted, updated, registered, or expiry dates when those values are publicly available.

#### Why did I receive fewer results than my limit?

The selected filters may have fewer matching public records than the requested `limit`. Broaden the location, property type, price or rent range, seller type, media requirements, or verification filters to increase coverage.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cron schedule for recurring monitoring and reporting.

#### How do I avoid duplicates across runs?

Use `record_type + ":" + record_id` as the idempotency key when storing records in a database, warehouse, CRM, or search index.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support exports in JSON, CSV, Excel, and other formats suitable for analysis and downstream ingestion.

#### Does this actor collect private data?

The actor is intended to collect publicly available information from 99acres. Users are responsible for using the data lawfully and respecting privacy, platform terms, and applicable regulations.

#### What should I include when reporting an issue?

Include the input used, the run ID, expected versus actual behavior, and a small output sample if it helps explain the issue. Redact sensitive or private information before sharing.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available **real estate listing** information from **https://www.99acres.com** for legitimate business purposes, including:

- **Real estate** research and market analysis
- **Property listing** monitoring and operational reporting
- **Lead enrichment** and data quality workflows

This section is informational and not legal advice. Users are responsible for ensuring that their use of collected data complies with applicable laws, regulations, platform terms, and internal policies.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, such as GDPR and CCPA

### Support

For help, use the actor page or Issues section associated with this actor. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when useful. Avoid sharing private data in support requests.

# Actor input Schema

## `location` (type: `array`):

Enter one or more Indian locations, such as New Delhi, Mumbai, Gurgaon, or Western Mumbai. Broader locations discover more listings; narrower localities produce more targeted datasets.

## `deal_type` (type: `string`):

Choose the transaction type and property market you want to collect. Pick the segment that matches your analysis, lead sourcing, pricing study, or competitive monitoring workflow.

## `min_price` (type: `string`):

Select the lowest sale price to include. This field is intended for sale deal types and helps remove listings below your target purchase budget.

## `max_price` (type: `string`):

Select the highest sale price to include. Use it with the minimum sale price when you need a defined purchase budget range.

## `min_rent` (type: `string`):

Select the lowest monthly rent to include. This field is intended for rental deal types and helps focus the dataset on your target rental band.

## `max_rent` (type: `string`):

Select the highest monthly rent to include. Use it with the minimum rent when you need a defined rental budget range.

## `verified_property` (type: `boolean`):

Turn this on to collect only listings marked as verified on 99acres. Keep it off to include both verified and unverified listings for broader discovery.

## `rera_approval` (type: `array`):

Choose RERA-approved properties, RERA-registered dealers, or both when compliance-related signals are important to your review process.

## `property_type` (type: `array`):

Select the property categories to include, such as apartments, villas, shops, offices, warehouses, or land. Selecting more categories broadens the dataset; selecting fewer categories makes the output easier to compare.

## `min_area` (type: `integer`):

Enter the smallest built-up area, in square feet, that a listing should have to be included. Leave empty when size is not part of your selection criteria.

## `max_area` (type: `integer`):

Enter the largest built-up area, in square feet, that a listing should have to be included. Use it with the minimum area to define a clear size range.

## `bedroom_count` (type: `array`):

Select one or more BHK options, such as 1 BHK, 2 BHK, or 3 BHK. This filter is most useful when comparing residential homes by layout.

## `contruction_status` (type: `array`):

Select the construction stages to include, such as new launch, under construction, or ready to move. Use this when project readiness affects your shortlist.

## `seller_type` (type: `array`):

Select whether to include listings from owners, builders, dealers, featured dealers, or a combination of seller sources.

## `purchase_type` (type: `array`):

Select resale, new booking, or both to control which sale listing categories are collected. This is most relevant for purchase-focused sale searches.

## `furnishment` (type: `array`):

Select unfurnished, semifurnished, furnished, or multiple options to match the move-in condition your workflow requires.

## `with_photo` (type: `boolean`):

Turn this on to collect only listings that include photos. Keep it off when you want the broadest set of matching listings.

## `with_video` (type: `boolean`):

Turn this on to collect only listings that include videos. Keep it off when video availability is not required for your workflow.

## `limit` (type: `integer`):

Enter the maximum number of listings to save for each location. If left empty, the actor saves up to 100 listings per location.

## Actor input object example

```json
{
  "location": [
    "Western Mumbai"
  ],
  "deal_type": "residential_sale",
  "verified_property": false,
  "with_photo": false,
  "with_video": false,
  "limit": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "location": [
        "Western Mumbai"
    ],
    "deal_type": "residential_sale",
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/99acres-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "location": ["Western Mumbai"],
    "deal_type": "residential_sale",
    "limit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/99acres-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": [
    "Western Mumbai"
  ],
  "deal_type": "residential_sale",
  "limit": 100
}' |
apify call fatihtahta/99acres-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fatihtahta/99acres-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "99acres Scraper | Fast & Reliable | $17 / mo",
        "description": "Scrapes detailed real estate listings from 99acres.com, India's leading property portal. Extracts prices, location details, agent/dealer info, and property specs. Fast and reliable, it delivers clean, structured data ready for market analysis, lead generation, and competitor research.",
        "version": "0.1",
        "x-build-id": "5jaM34uVXsWLut2Yj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~99acres-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-99acres-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fatihtahta~99acres-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-99acres-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fatihtahta~99acres-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-99acres-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "location",
                    "deal_type"
                ],
                "properties": {
                    "location": {
                        "title": "Add Location Names",
                        "type": "array",
                        "description": "Enter one or more Indian locations, such as New Delhi, Mumbai, Gurgaon, or Western Mumbai. Broader locations discover more listings; narrower localities produce more targeted datasets.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "deal_type": {
                        "title": "Choose Listing Segment",
                        "enum": [
                            "residential_sale",
                            "residential_rent",
                            "commercial_sale",
                            "commercial_rent"
                        ],
                        "type": "string",
                        "description": "Choose the transaction type and property market you want to collect. Pick the segment that matches your analysis, lead sourcing, pricing study, or competitive monitoring workflow."
                    },
                    "min_price": {
                        "title": "Set Minimum Sale Price",
                        "enum": [
                            "inr_0",
                            "inr_5_lacs",
                            "inr_10_lacs",
                            "inr_15_lacs",
                            "inr_20_lacs",
                            "inr_25_lacs",
                            "inr_30_lacs",
                            "inr_35_lacs",
                            "inr_40_lacs",
                            "inr_45_lacs",
                            "inr_50_lacs",
                            "inr_55_lacs",
                            "inr_60_lacs",
                            "inr_65_lacs",
                            "inr_70_lacs",
                            "inr_75_lacs",
                            "inr_80_lacs",
                            "inr_85_lacs",
                            "inr_90_lacs",
                            "inr_95_lacs",
                            "inr_1_crore",
                            "inr_1_05_crores",
                            "inr_1_1_crores",
                            "inr_1_15_crores",
                            "inr_1_2_crores",
                            "inr_1_25_crores",
                            "inr_1_3_crores",
                            "inr_1_35_crores",
                            "inr_1_4_crores",
                            "inr_1_45_crores",
                            "inr_1_5_crores",
                            "inr_1_55_crores",
                            "inr_1_6_crores",
                            "inr_1_65_crores",
                            "inr_1_7_crores",
                            "inr_1_75_crores",
                            "inr_1_8_crores",
                            "inr_1_85_crores",
                            "inr_1_9_crores",
                            "inr_2_crores",
                            "inr_2_1_crores",
                            "inr_2_2_crores",
                            "inr_2_3_crores",
                            "inr_2_4_crores",
                            "inr_2_5_crores",
                            "inr_2_6_crores",
                            "inr_2_7_crores",
                            "inr_2_8_crores",
                            "inr_2_9_crores",
                            "inr_3_crores",
                            "inr_3_1_crores",
                            "inr_3_2_crores",
                            "inr_3_3_crores",
                            "inr_3_4_crores",
                            "inr_3_5_crores",
                            "inr_3_6_crores",
                            "inr_3_7_crores",
                            "inr_3_8_crores",
                            "inr_3_9_crores",
                            "inr_4_crores",
                            "inr_4_1_crores",
                            "inr_4_2_crores",
                            "inr_4_3_crores",
                            "inr_4_4_crores",
                            "inr_4_5_crores",
                            "inr_4_6_crores",
                            "inr_4_7_crores",
                            "inr_4_8_crores",
                            "inr_4_9_crores",
                            "inr_5_crores",
                            "inr_5_25_crores",
                            "inr_5_5_crores",
                            "inr_5_75_crores",
                            "inr_6_crores",
                            "inr_6_25_crores",
                            "inr_6_5_crores",
                            "inr_6_75_crores",
                            "inr_7_crores",
                            "inr_7_25_crores",
                            "inr_7_5_crores",
                            "inr_7_75_crores",
                            "inr_8_crores",
                            "inr_8_25_crores",
                            "inr_8_5_crores",
                            "inr_8_75_crores",
                            "inr_9_crores",
                            "inr_9_25_crores",
                            "inr_9_5_crores",
                            "inr_9_75_crores",
                            "inr_10_crores",
                            "inr_20_crores",
                            "inr_30_crores",
                            "inr_40_crores",
                            "inr_50_crores",
                            "inr_60_crores",
                            "inr_70_crores",
                            "inr_80_crores",
                            "inr_90_crores",
                            "inr_100_crores",
                            "inr_100_plus_crores"
                        ],
                        "type": "string",
                        "description": "Select the lowest sale price to include. This field is intended for sale deal types and helps remove listings below your target purchase budget."
                    },
                    "max_price": {
                        "title": "Set Maximum Sale Price",
                        "enum": [
                            "inr_0",
                            "inr_5_lacs",
                            "inr_10_lacs",
                            "inr_15_lacs",
                            "inr_20_lacs",
                            "inr_25_lacs",
                            "inr_30_lacs",
                            "inr_35_lacs",
                            "inr_40_lacs",
                            "inr_45_lacs",
                            "inr_50_lacs",
                            "inr_55_lacs",
                            "inr_60_lacs",
                            "inr_65_lacs",
                            "inr_70_lacs",
                            "inr_75_lacs",
                            "inr_80_lacs",
                            "inr_85_lacs",
                            "inr_90_lacs",
                            "inr_95_lacs",
                            "inr_1_crore",
                            "inr_1_05_crores",
                            "inr_1_1_crores",
                            "inr_1_15_crores",
                            "inr_1_2_crores",
                            "inr_1_25_crores",
                            "inr_1_3_crores",
                            "inr_1_35_crores",
                            "inr_1_4_crores",
                            "inr_1_45_crores",
                            "inr_1_5_crores",
                            "inr_1_55_crores",
                            "inr_1_6_crores",
                            "inr_1_65_crores",
                            "inr_1_7_crores",
                            "inr_1_75_crores",
                            "inr_1_8_crores",
                            "inr_1_85_crores",
                            "inr_1_9_crores",
                            "inr_2_crores",
                            "inr_2_1_crores",
                            "inr_2_2_crores",
                            "inr_2_3_crores",
                            "inr_2_4_crores",
                            "inr_2_5_crores",
                            "inr_2_6_crores",
                            "inr_2_7_crores",
                            "inr_2_8_crores",
                            "inr_2_9_crores",
                            "inr_3_crores",
                            "inr_3_1_crores",
                            "inr_3_2_crores",
                            "inr_3_3_crores",
                            "inr_3_4_crores",
                            "inr_3_5_crores",
                            "inr_3_6_crores",
                            "inr_3_7_crores",
                            "inr_3_8_crores",
                            "inr_3_9_crores",
                            "inr_4_crores",
                            "inr_4_1_crores",
                            "inr_4_2_crores",
                            "inr_4_3_crores",
                            "inr_4_4_crores",
                            "inr_4_5_crores",
                            "inr_4_6_crores",
                            "inr_4_7_crores",
                            "inr_4_8_crores",
                            "inr_4_9_crores",
                            "inr_5_crores",
                            "inr_5_25_crores",
                            "inr_5_5_crores",
                            "inr_5_75_crores",
                            "inr_6_crores",
                            "inr_6_25_crores",
                            "inr_6_5_crores",
                            "inr_6_75_crores",
                            "inr_7_crores",
                            "inr_7_25_crores",
                            "inr_7_5_crores",
                            "inr_7_75_crores",
                            "inr_8_crores",
                            "inr_8_25_crores",
                            "inr_8_5_crores",
                            "inr_8_75_crores",
                            "inr_9_crores",
                            "inr_9_25_crores",
                            "inr_9_5_crores",
                            "inr_9_75_crores",
                            "inr_10_crores",
                            "inr_20_crores",
                            "inr_30_crores",
                            "inr_40_crores",
                            "inr_50_crores",
                            "inr_60_crores",
                            "inr_70_crores",
                            "inr_80_crores",
                            "inr_90_crores",
                            "inr_100_crores",
                            "inr_100_plus_crores"
                        ],
                        "type": "string",
                        "description": "Select the highest sale price to include. Use it with the minimum sale price when you need a defined purchase budget range."
                    },
                    "min_rent": {
                        "title": "Set Minimum Monthly Rent",
                        "enum": [
                            "inr_1000",
                            "inr_2000",
                            "inr_3000",
                            "inr_4000",
                            "inr_5000",
                            "inr_6000",
                            "inr_7000",
                            "inr_8000",
                            "inr_9000",
                            "inr_10000",
                            "inr_11000",
                            "inr_12000",
                            "inr_13000",
                            "inr_14000",
                            "inr_15000",
                            "inr_16000",
                            "inr_17000",
                            "inr_18000",
                            "inr_19000",
                            "inr_20000",
                            "inr_21000",
                            "inr_22000",
                            "inr_23000",
                            "inr_24000",
                            "inr_25000",
                            "inr_26000",
                            "inr_27000",
                            "inr_28000",
                            "inr_29000",
                            "inr_30000",
                            "inr_35000",
                            "inr_40000",
                            "inr_45000",
                            "inr_50000",
                            "inr_55000",
                            "inr_60000",
                            "inr_65000",
                            "inr_70000",
                            "inr_75000",
                            "inr_80000",
                            "inr_85000",
                            "inr_90000",
                            "inr_95000",
                            "inr_1_lac",
                            "inr_1_1_lacs",
                            "inr_1_2_lacs",
                            "inr_1_3_lacs",
                            "inr_1_4_lacs",
                            "inr_1_5_lacs",
                            "inr_1_6_lacs",
                            "inr_1_7_lacs",
                            "inr_1_8_lacs",
                            "inr_1_9_lacs",
                            "inr_2_lacs",
                            "inr_2_25_lacs",
                            "inr_2_5_lacs",
                            "inr_2_75_lacs",
                            "inr_3_lacs",
                            "inr_3_25_lacs",
                            "inr_3_5_lacs",
                            "inr_3_75_lacs",
                            "inr_4_lacs",
                            "inr_4_25_lacs",
                            "inr_4_5_lacs",
                            "inr_4_75_lacs",
                            "inr_5_lacs",
                            "inr_6_lacs",
                            "inr_7_lacs",
                            "inr_8_lacs",
                            "inr_9_lacs",
                            "inr_10_lac",
                            "inr_10_plus_lac"
                        ],
                        "type": "string",
                        "description": "Select the lowest monthly rent to include. This field is intended for rental deal types and helps focus the dataset on your target rental band."
                    },
                    "max_rent": {
                        "title": "Set Maximum Monthly Rent",
                        "enum": [
                            "inr_1000",
                            "inr_2000",
                            "inr_3000",
                            "inr_4000",
                            "inr_5000",
                            "inr_6000",
                            "inr_7000",
                            "inr_8000",
                            "inr_9000",
                            "inr_10000",
                            "inr_11000",
                            "inr_12000",
                            "inr_13000",
                            "inr_14000",
                            "inr_15000",
                            "inr_16000",
                            "inr_17000",
                            "inr_18000",
                            "inr_19000",
                            "inr_20000",
                            "inr_21000",
                            "inr_22000",
                            "inr_23000",
                            "inr_24000",
                            "inr_25000",
                            "inr_26000",
                            "inr_27000",
                            "inr_28000",
                            "inr_29000",
                            "inr_30000",
                            "inr_35000",
                            "inr_40000",
                            "inr_45000",
                            "inr_50000",
                            "inr_55000",
                            "inr_60000",
                            "inr_65000",
                            "inr_70000",
                            "inr_75000",
                            "inr_80000",
                            "inr_85000",
                            "inr_90000",
                            "inr_95000",
                            "inr_1_lac",
                            "inr_1_1_lacs",
                            "inr_1_2_lacs",
                            "inr_1_3_lacs",
                            "inr_1_4_lacs",
                            "inr_1_5_lacs",
                            "inr_1_6_lacs",
                            "inr_1_7_lacs",
                            "inr_1_8_lacs",
                            "inr_1_9_lacs",
                            "inr_2_lacs",
                            "inr_2_25_lacs",
                            "inr_2_5_lacs",
                            "inr_2_75_lacs",
                            "inr_3_lacs",
                            "inr_3_25_lacs",
                            "inr_3_5_lacs",
                            "inr_3_75_lacs",
                            "inr_4_lacs",
                            "inr_4_25_lacs",
                            "inr_4_5_lacs",
                            "inr_4_75_lacs",
                            "inr_5_lacs",
                            "inr_6_lacs",
                            "inr_7_lacs",
                            "inr_8_lacs",
                            "inr_9_lacs",
                            "inr_10_lac",
                            "inr_10_plus_lac"
                        ],
                        "type": "string",
                        "description": "Select the highest monthly rent to include. Use it with the minimum rent when you need a defined rental budget range."
                    },
                    "verified_property": {
                        "title": "Include Only Verified Properties",
                        "type": "boolean",
                        "description": "Turn this on to collect only listings marked as verified on 99acres. Keep it off to include both verified and unverified listings for broader discovery.",
                        "default": false
                    },
                    "rera_approval": {
                        "title": "Choose RERA Signals",
                        "type": "array",
                        "description": "Choose RERA-approved properties, RERA-registered dealers, or both when compliance-related signals are important to your review process.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "approved_property",
                                "approved_agent"
                            ],
                            "enumTitles": [
                                "RERA Approved Properties | property signal",
                                "RERA Registered Dealers | dealer signal"
                            ]
                        }
                    },
                    "property_type": {
                        "title": "Choose Property Categories",
                        "type": "array",
                        "description": "Select the property categories to include, such as apartments, villas, shops, offices, warehouses, or land. Selecting more categories broadens the dataset; selecting fewer categories makes the output easier to compare.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "all_residential",
                                "all_commercial",
                                "apartment",
                                "house_villa",
                                "land",
                                "builder_floor",
                                "farm_house",
                                "shop",
                                "office_space",
                                "land_institutional_land",
                                "mall_space_retail",
                                "office_in_business_park",
                                "office_in_it_park",
                                "warehouse",
                                "industrial_land",
                                "factory",
                                "agricultural_farm_land",
                                "business_center",
                                "serviced_apartment",
                                "showroom",
                                "one_rk_studio_apartment"
                            ],
                            "enumTitles": [
                                "All Residential | all home types",
                                "All Commercial | all business property types",
                                "Apartment | flat or apartment",
                                "House/Villa | independent home or villa",
                                "Land | residential plot or land",
                                "Builder Floor | independent floor",
                                "Farm House | farmhouse property",
                                "Shop | retail shop",
                                "Office Space | office property",
                                "Institutional Land | institutional plot",
                                "Mall Space - Retail | mall retail unit",
                                "Office in Business Park | business park office",
                                "Office in IT Park | IT park office",
                                "Warehouse | storage or logistics property",
                                "Industrial Land | industrial plot",
                                "Factory | factory property",
                                "Agricultural/Farm Land | agricultural land",
                                "Business Center | managed business space",
                                "Serviced Apartment | serviced residence",
                                "Showroom | display or retail showroom",
                                "1 RK / Studio Apartment | compact home"
                            ]
                        }
                    },
                    "min_area": {
                        "title": "Set Minimum Built-Up Area",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the smallest built-up area, in square feet, that a listing should have to be included. Leave empty when size is not part of your selection criteria."
                    },
                    "max_area": {
                        "title": "Set Maximum Built-Up Area",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the largest built-up area, in square feet, that a listing should have to be included. Use it with the minimum area to define a clear size range."
                    },
                    "bedroom_count": {
                        "title": "Choose Bedroom Counts",
                        "type": "array",
                        "description": "Select one or more BHK options, such as 1 BHK, 2 BHK, or 3 BHK. This filter is most useful when comparing residential homes by layout.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "any_bhk",
                                "one_bhk",
                                "two_bhk",
                                "three_bhk",
                                "four_bhk",
                                "five_bhk",
                                "six_bhk",
                                "seven_bhk",
                                "eight_bhk",
                                "nine_bhk",
                                "ten_bhk"
                            ],
                            "enumTitles": [
                                "Any BHK",
                                "1 BHK",
                                "2 BHK",
                                "3 BHK",
                                "4 BHK",
                                "5 BHK",
                                "6 BHK",
                                "7 BHK",
                                "8 BHK",
                                "9 BHK",
                                "10 BHK"
                            ]
                        }
                    },
                    "contruction_status": {
                        "title": "Choose Construction Stage",
                        "type": "array",
                        "description": "Select the construction stages to include, such as new launch, under construction, or ready to move. Use this when project readiness affects your shortlist.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "new_launch",
                                "under_construction",
                                "ready_to_move"
                            ],
                            "enumTitles": [
                                "New Launch | newly released projects",
                                "Under Construction | in-progress projects",
                                "Ready to Move | available properties"
                            ]
                        }
                    },
                    "seller_type": {
                        "title": "Choose Seller Sources",
                        "type": "array",
                        "description": "Select whether to include listings from owners, builders, dealers, featured dealers, or a combination of seller sources.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "owner",
                                "builder",
                                "dealer",
                                "featured_dealer"
                            ],
                            "enumTitles": [
                                "Owner | direct seller",
                                "Builder | developer listing",
                                "Dealer | broker listing",
                                "Featured Dealer | promoted broker listing"
                            ]
                        }
                    },
                    "purchase_type": {
                        "title": "Choose Purchase Types",
                        "type": "array",
                        "description": "Select resale, new booking, or both to control which sale listing categories are collected. This is most relevant for purchase-focused sale searches.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "resale",
                                "new_booking"
                            ],
                            "enumTitles": [
                                "Resale | existing property",
                                "New Booking | new project booking"
                            ]
                        }
                    },
                    "furnishment": {
                        "title": "Choose Furnishing Levels",
                        "type": "array",
                        "description": "Select unfurnished, semifurnished, furnished, or multiple options to match the move-in condition your workflow requires.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "unfurnished",
                                "semifurnished",
                                "furnished"
                            ],
                            "enumTitles": [
                                "Unfurnished | no furnishing",
                                "Semifurnished | partial furnishing",
                                "Furnished | ready furnished"
                            ]
                        }
                    },
                    "with_photo": {
                        "title": "Include Only Listings with Photos",
                        "type": "boolean",
                        "description": "Turn this on to collect only listings that include photos. Keep it off when you want the broadest set of matching listings.",
                        "default": false
                    },
                    "with_video": {
                        "title": "Include Only Listings with Videos",
                        "type": "boolean",
                        "description": "Turn this on to collect only listings that include videos. Keep it off when video availability is not required for your workflow.",
                        "default": false
                    },
                    "limit": {
                        "title": "Set Listings to Save",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the maximum number of listings to save for each location. If left empty, the actor saves up to 100 listings per location.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
