# 99acres Property Scraper - India Homes for Sale & Rent (`confidential_gnat/99acres-property-scraper`) Actor

Scrapes property listings from 99acres (99acres.com): price, area, bedrooms, bathrooms, locality, coordinates, furnishing, seller, photos and posting dates. Search by city, search URL or listing URL, for sale or rent, with automatic splitting of large searches.

- **URL**: https://apify.com/confidential_gnat/99acres-property-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 99acres Property Scraper - India Homes for Sale & Rent

![99acres Property Scraper - India Homes for Sale & Rent cover](https://i.postimg.cc/mgx0Kh5p/Gemini-Generated-Image-nsubahnsubahnsub.jpg)

**Scrape property listings from 99acres (99acres.com)**, India's largest real estate portal, and export them as JSON, CSV or Excel, or call the scraper as an **API**. Get price, area, bedrooms, bathrooms, locality, coordinates, furnishing, seller, photos and posting dates for **flats, houses, villas and plots for sale or rent**. Paste a search URL or type a city, press Start and get clean, structured rows.

**Target website:** [99acres.com](https://www.99acres.com)

### ✨ Features of this 99acres property scraper

- **Property listing extraction** — price in rupees and as shown on the site, price per sq.ft., area, bedrooms, bathrooms, floor, locality, society, coordinates, seller type, RERA and verified flags, tags, photos and videos.
- **Search by city or URL** — pick a city, deal type (resale or rent) and bedrooms, or paste any 99acres search results page or single listing page.
- **Pagination support** — walks through the result pages of a search up to your item limit.
- **Large search splitting** — the site shows at most 1,750 results per search, so bigger searches are split automatically by property type, then bedrooms, then budget to get past that cap.
- **Cache for new listings** — reuse a cache project name to get only new listings and price changes.
- **Proxy support** — runs through Indian residential proxies, which the site needs.
- **No browser required** — pages are loaded directly, which keeps runs fast.

### 🚀 How to scrape 99acres property listings in 5 steps

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Fill in the **Input** fields (a search URL or a city is required).
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 Pricing for the 99acres scraper

This actor uses **pay-per-result** billing based on the compute units a run consumes.

- New Apify accounts include **$5 of free monthly credit**.
- Every result page is large and the site only answers Indian residential proxies, so proxy traffic is the main cost. Leaving **Scrape listing pages** off keeps runs cheapest.
- With a **cache project name**, listings you already have are skipped and not charged.

### 🔧 99acres scraper input configuration

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| Search or listing URLs (`startUrls`) | array | — | https://www.99acres.com/resale-property-in-mumbai-ffid | 99acres search results pages or single listing pages. Filters in the URL are kept. |
| Max items per search (`maxItems`) | integer | — | 5 | Maximum listings saved for each search URL or city. |
| Scrape listing pages (`scrapeDetails`) | boolean | — | false | Open each listing page for overlooking, power backup, water source, parking, open sides and seller history. |
| Cache project name (`cacheProjectName`) | string | — | — | Reuse the same name on each run to get only new listings and price changes. |
| City (`city`) | string | — | — | Search a whole city, for example Mumbai or Pune. Used with Deal type. |
| Deal type (`dealType`) | string | — | resale | `resale` for properties for sale, or `rent`. Applies to City. |
| Bedrooms (`bedrooms`) | integer | — | — | Exactly this many bedrooms, 1 to 5. Applies to City. |
| Proxy configuration (`proxyConfiguration`) | object | — | Apify residential, India | Indian residential proxies are needed. |

**Supported URL types:**

- Search results (address ends in `-ffid`): `https://www.99acres.com/resale-property-in-mumbai-ffid`, `https://www.99acres.com/property-for-rent-in-pune-ffid`, `https://www.99acres.com/3-bhk-flats-for-rent-in-mumbai-ffid`, `https://www.99acres.com/residential-land-in-mumbai-ffid`
- Filters can also be added as parameters, for example `?bedroom_num=2`
- Single listing (address ends in `-spid-...`): `https://www.99acres.com/residential-land-plot-for-sale-in-ranjanpada-mumbai-4719-sqyd-r1-spid-C93087430`

### 📦 99acres scraper output data

The output is a dataset of listings in JSON, CSV or Excel with the fields `id`, `propId`, `url`, `title`, `listingType`, `propertyType`, `price`, `maxPrice`, `priceText`, `pricePerSqft`, `bedrooms`, `bathrooms`, `superArea`, `superAreaUnit`, `areaText`, `areaSqft`, `areaType`, `carpetAreaSqft`, `furnishing`, `facing`, `availability`, `floor`, `totalFloors`, `description`, `society`, `locality`, `city`, `latitude`, `longitude`, `postedBy`, `contactName`, `companyName`, `verified`, `reraRegistered`, `tags`, `highlights`, `images`, `videos`, `postedAt`, `updatedAt`, `expiresAt`, `changeType`, `previousPrice`, `searchUrl` and `scrapedAt`. With **Scrape listing pages** on, each record also gets `overlooking`, `powerBackup`, `waterSource`, `reservedParking`, `openSides`, `sellerMemberSince` and `sellerAbout`. There is 1 output view.

- **Overview** — a compact table with ID, title, sale or rent, price, bedrooms, bathrooms, area, locality, city, change type and link.

**Output at a glance:**

| Listing | Type | Price | Beds | Baths | Area | Locality | Posted by |
| ------- | ---- | ----- | ---- | ----- | ---- | -------- | --------- |
| [2 BHK Flat in Sector 25 Khandeshhwar, Navi Mumbai](https://www.99acres.com/2-bhk-bedroom-apartment-flat-for-sale-in-geomatrix-silver-crest-sector-25-khandeshhwar-navi-mumbai-1090-sqft-spid-D94734988) | Apartment | 1.38 Cr | 2 | 2 | 1090 sqft | Navi Mumbai | Dealer |
| [Residential land / Plot in Vindhane, Navi Mumbai](https://www.99acres.com/residential-land-plot-for-sale-in-vindhane-navi-mumbai-4356-sqyd-r1-spid-P91536558) | Land | 1.62 Cr | — | — | 39203 sqft | Navi Mumbai | Dealer |
| [2 BHK Flat in Andheri West, Mumbai](https://www.99acres.com/2-bhk-bedroom-apartment-flat-for-sale-in-andheri-west-mumbai-andheri-dahisar-880-sqft-spid-X92491246) | Apartment | 3.95 Cr | 2 | 2 | 880 sqft | Andheri West | Owner |
| [2 BHK Flat in Vile Parle East, Mumbai](https://www.99acres.com/2-bhk-bedroom-apartment-flat-for-sale-in-shree-shivkripa-chsl-vile-parle-east-western-mumbai-782-sqft-spid-F95033322) | Apartment | 3.7 Cr | 2 | 2 | 782 sqft | Vile Parle East | Owner |
| [3 BHK Flat in Wadala East, Mumbai](https://www.99acres.com/3-bhk-bedroom-apartment-flat-for-sale-in-lodha-new-cuffe-parade-wadala-east-south-mumbai-1098-sqft-r1-spid-E90104800) | Apartment | 4.2 Cr | 3 | 3 | 1098 sqft | Wadala East | Dealer |

**Sample output (raw JSON):**

```json
[
  {
    "id": "94734988",
    "propId": "D94734988",
    "url": "https://www.99acres.com/2-bhk-bedroom-apartment-flat-for-sale-in-geomatrix-silver-crest-sector-25-khandeshhwar-navi-mumbai-1090-sqft-spid-D94734988",
    "title": "2 BHK Flat in Sector 25 Khandeshhwar, Navi Mumbai",
    "listingType": "sale",
    "propertyType": "Residential Apartment",
    "price": 13800000,
    "maxPrice": 13800000,
    "priceText": "1.38 Cr",
    "pricePerSqft": 12660,
    "bedrooms": 2,
    "bathrooms": 2,
    "superArea": null,
    "superAreaUnit": null,
    "areaText": "1090 sqft",
    "areaSqft": 1090,
    "areaType": "Superbuilt-Up",
    "carpetAreaSqft": 590,
    "furnishing": "Semifurnished",
    "facing": "North-East",
    "availability": "Ready To Move",
    "floor": 8,
    "totalFloors": 14,
    "description": "This is a north-East-Facing property. The flat occupies a super built up area of 1090 sq.Ft. That consists of 2 bedrooms, 2 bathrooms and 2 balconies. The property is located on the 8th floor of a 14 floors tall building. As the property is currently under construction , you can expect to get the possession immediately. The flat comes well built with vitrified flooring options. Proximity to landmarks like close to school, close to railway station, close to market and close to hospital makes this an ideal property for families. Many of the modern amenities being offered, like gymnasium, club house, park, lift(s), security guard and maintenance staff, will provide a pleasant living experience for you.",
    "society": "Geomatrix Silver Crest",
    "locality": "Sector 25 Khandeshhwar",
    "city": "Navi Mumbai",
    "latitude": 19.0100515,
    "longitude": 73.0993876,
    "postedBy": "Dealer",
    "contactName": "mr santosh",
    "companyName": "Santosh Property",
    "verified": true,
    "reraRegistered": false,
    "tags": [
      "FEATURED",
      "READY TO MOVE"
    ],
    "highlights": [
      "8th out of 14 Floors",
      "Overlooking Main Road"
    ],
    "images": [
      "https://imagecdn.99acres.com/media1/42587/17/851757685M-1790833520884.jpg",
      "https://imagecdn.99acres.com/media1/42587/17/851757675M-1790833507540.jpg"
    ],
    "videos": [
      "https://www.youtube.com/watch?v=KmzRywbcQkA"
    ],
    "postedAt": "2026-10-01T05:39:24.000Z",
    "updatedAt": "2026-10-01T06:13:55.000Z",
    "expiresAt": "2026-11-30T00:00:00.000Z",
    "changeType": null,
    "previousPrice": null,
    "searchUrl": "https://www.99acres.com/resale-property-in-mumbai-ffid",
    "scrapedAt": "2026-10-20T15:00:38.274Z"
  },
  {
    "id": "91536558",
    "propId": "P91536558",
    "url": "https://www.99acres.com/residential-land-plot-for-sale-in-vindhane-navi-mumbai-4356-sqyd-r1-spid-P91536558",
    "title": "Residential land / Plot in Vindhane, Navi Mumbai",
    "listingType": "sale",
    "propertyType": "Residential Land",
    "price": 16200000,
    "maxPrice": 16200000,
    "priceText": "1.62 Cr",
    "pricePerSqft": 413,
    "bedrooms": null,
    "bathrooms": 0,
    "superArea": 36,
    "superAreaUnit": "guntha",
    "areaText": "39203 sqft",
    "areaSqft": 39203,
    "areaType": "Super",
    "carpetAreaSqft": null,
    "furnishing": null,
    "facing": "North",
    "availability": "Ready To Move",
    "floor": null,
    "totalFloors": 18,
    "description": "The land, situated 7-8 km from navi mumbai international airport, is part of mmrda's ambitious phase 1 and 2 development plans, spanning 124 villages. With strong infrastructure support, the area is well-Connected by the local railway network (Seawoods to uran) and is set to benefit from key upcoming projects like the multi-Modal corridor, atal setu mthl sea link, and a sanctioned metro. This strategic location is poised for transformation into a high-Tech city and tech hub, fostering economic growth and enhancing regional connectivity.",
    "society": "crescera group",
    "locality": "Vindhane",
    "city": "Navi Mumbai",
    "latitude": 18.897588,
    "longitude": 73.044931,
    "postedBy": "Dealer",
    "contactName": "Rahul",
    "companyName": "Crescera",
    "verified": false,
    "reraRegistered": false,
    "tags": [
      "FEATURED",
      "NORTH FACING"
    ],
    "highlights": [
      "Gated Society",
      "3+ side open"
    ],
    "images": [
      "https://imagecdn.99acres.com/media1/38457/12/769152486M-1780228961660.jpg",
      "https://imagecdn.99acres.com/media1/38457/12/769152460M-1780228961641.jpg"
    ],
    "videos": [
      "https://www.youtube.com/watch?v=3nLMFZJVSyU"
    ],
    "postedAt": "2026-05-31T12:02:41.000Z",
    "updatedAt": "2026-10-04T09:19:21.000Z",
    "expiresAt": "2026-12-03T00:00:00.000Z",
    "changeType": null,
    "previousPrice": null,
    "searchUrl": "https://www.99acres.com/resale-property-in-mumbai-ffid",
    "scrapedAt": "2026-10-20T15:00:38.274Z"
  }
]
```

### 🔁 Scrape only new 99acres listings with the cache

Set the same **Cache project name** on every scheduled run. Listings already saved under that name are skipped, not charged and not counted towards **Max items**, so each run returns only what is new. Each record gets `changeType: "new"`, or `changeType: "price_change"` with the `previousPrice` when a listing you already have changed its price. Different cache names keep separate caches. Tip: create an Apify Schedule that runs the actor daily with the same cache name to build a feed of fresh listings.

### 🐍 How to scrape 99acres with Python, JavaScript or the API

Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("confidential_gnat/99acres-property-scraper").call(run_input={
    "startUrls": [{"url": "https://www.99acres.com/resale-property-in-mumbai-ffid"}],
    "maxItems": 20,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('confidential_gnat/99acres-property-scraper').call({
    startUrls: [{ url: 'https://www.99acres.com/resale-property-in-mumbai-ffid' }],
    maxItems: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**cURL** — start a run and wait for the dataset:

```bash
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~99acres-property-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": [{"url": "https://www.99acres.com/resale-property-in-mumbai-ffid"}], "maxItems": 20}'
```

### 💡 What you can use 99acres property data for

- Price monitoring and price-per-sq.ft. benchmarks by city, locality and property type
- Lead generation for brokers, builders and home-loan providers from fresh listings
- Real estate market research and rental yield analysis across Indian cities
- Alerts for new listings and price drops that match a buyer's budget
- Training datasets for valuation models and property recommendation tools

Real estate investors, brokers, proptech companies, banks and market researchers use this data to track supply and prices across Indian cities.

### ⚠️ Limitations of the 99acres scraper

- **Result cap per search** — the site shows at most 1,750 results (70 pages of 25) for one search; the actor works around this by splitting large searches when **Max items** is above that.
- **New projects are left out** — builder project cards on search pages are not listings and are skipped; only individual listings are saved. Resale and rent pages return almost only listings.
- **No phone numbers** — the site hides seller phone numbers from logged-out visitors, so only the seller name and company are returned.
- **Result counts vary** — the site's reported total for a search can change between requests, so the number of pages found may differ slightly from run to run.

### ❓ 99acres scraper FAQ

#### Can I scrape 99acres legally?

The actor only collects data that is already publicly visible on 99acres.com — it never logs in or opens private content. Scraping publicly available data is generally considered lawful (see *hiQ Labs v. LinkedIn*), but you remain responsible for complying with the site's Terms of Service and applicable laws such as GDPR or India's data protection rules, especially for the seller names in the results.

#### What data does the 99acres scraper return?

Each listing has price, area, bedrooms, bathrooms, floor, locality, city, coordinates, seller type and name, RERA and verified flags, tags, photos, videos and posting dates. Turning on **Scrape listing pages** adds overlooking, power backup, water source, parking, open sides and seller history.

#### How many listings can I scrape from one 99acres search?

**Max items per search** applies to each start URL or city separately. The site itself shows at most 1,750 results per search, so when you ask for more the actor splits the search by property type, bedrooms and budget and removes duplicates.

#### Do I need a proxy to scrape 99acres.com?

Yes. The site blocks most IP addresses, so the input defaults to Indian residential proxies. Other proxy types and locations are usually blocked.

#### How do I scrape 99acres with Python?

Use the Python example above: call the actor with `ApifyClient` and iterate over the dataset items of the run.

#### Can I run this 99acres scraper on a schedule?

Yes. Create an Apify Schedule for the actor. Set the same **Cache project name** on every run to skip listings you already have and receive only new listings and price changes.

#### What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the **Output** tab or through the Apify API.

#### Why are some 99acres listings missing bedrooms or floor?

Plots and commercial properties have no bedrooms, and some sellers do not fill in floor or facing. Those fields are returned as `null`.

#### Is this the cheapest 99 acres property scraper?

Possibly yes as caching will skip previously scraped data across multiple runs when enabled.

### 🔗 Relevant actors for 99acres property data

| Scraper | Description |
| ------- | ----------- |
| [🏡 Otodom.pl Property Scraper - Poland Real Estate Listings](https://apify.com/confidential_gnat/otodom-property-scraper) | Scrapes property listings from Otodom.pl: price, area, rooms, floor and address. |
| [🏘️ QuintoAndar Property Scraper - Brazil Rentals & Homes for Sale](https://apify.com/confidential_gnat/quintoandar-property-scraper) | Scrapes rental and sale listings from QuintoAndar, Brazil's property platform. |
| [🏠 Chaves na Mão Property Scraper - Brazil Real Estate Listings](https://apify.com/confidential_gnat/chavesnamao-property-scraper) | Scrapes property listings for sale and rent from Chaves na Mão (chavesnamao.com.br). |
| [🏠 OnTheMarket Property Scraper - UK Sale, Rent & New Homes](https://apify.com/confidential_gnat/onthemarket-property-scraper) | Scrapes UK property listings from OnTheMarket: price, address, bedrooms and agent. |
| [🗽 StreetEasy Updated Scraper](https://apify.com/confidential_gnat/streeteasy-property-scraper) | Scrapes New York City apartment listings from StreetEasy with address and price. |

### 🔗 Other actors you may find useful

| Scraper | Description |
| ------- | ----------- |
| [🛒 Carousell Products Scraper](https://apify.com/confidential_gnat/carousell-products-scraper) | Scrapes Carousell.sg product listings: prices, seller ratings and deal methods. |
| [🍷 Vivino Wine Scraper](https://apify.com/confidential_gnat/vivino-wine-scraper) | Scrapes wine data from Vivino: name, winery, vintage, region and ratings. |
| [💼 Dice Jobs Scraper - Search Tech Jobs by Keyword or URL](https://apify.com/confidential_gnat/dice-jobs-scraper) | Scrapes tech job listings from Dice: title, company, location and salary. |
| [🥾 AllTrails Scraper — Hiking, Biking & Running Trails](https://apify.com/confidential_gnat/alltrails-scraper) | Scrapes hiking, biking and running trails from AllTrails by park, city or keyword. |
| [📈 Kalshi Markets Scraper - Prediction Market Prices & Odds](https://apify.com/confidential_gnat/kalshi-markets-scraper) | Scrapes Kalshi prediction markets: prices, probabilities, volume and close times. |

### 💬 Support & contact

If you encounter any issues or have questions, please [open an issue](https://apify.com/confidential_gnat/99acres-property-scraper/issues/open) or reach out via the [Apify Community Forum](https://community.apify.com/).

You can also find more of our actors on the [Actor Flow](https://apify.com/confidential_gnat) page.

# Actor input Schema

## `startUrls` (type: `array`):

99acres result pages (the address ends in -ffid), for example https://www.99acres.com/resale-property-in-mumbai-ffid or https://www.99acres.com/property-for-rent-in-pune-ffid, or single listing pages (the address ends in -spid-...). Filters already in the URL are kept.

## `maxItems` (type: `integer`):

Maximum listings saved for each search URL or city. The site shows at most 1,750 results per search; above that the search is split automatically by property type, bedrooms and budget.

## `scrapeDetails` (type: `boolean`):

Open every listing page for extra details: overlooking, power backup, water source, parking, open sides and seller history. Slower and uses more proxy traffic.

## `cacheProjectName` (type: `string`):

Use the same name on each scheduled run to get only new listings and price changes. Listings already seen with the same price are skipped and not charged. Each record gets a changeType: new or price_change.

## `city` (type: `string`):

Search a whole city instead of pasting a URL, for example Mumbai, Pune or Navi Mumbai. Used together with Deal type.

## `dealType` (type: `string`):

Resale properties for sale, or properties for rent. Applies to City.

## `bedrooms` (type: `integer`):

Only exactly this many bedrooms (1 to 5). Applies to City. Leave empty for all.

## `proxyConfiguration` (type: `object`):

The site blocks most IPs outside India, so Indian residential proxies are needed.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.99acres.com/resale-property-in-mumbai-ffid"
    }
  ],
  "maxItems": 5,
  "scrapeDetails": true,
  "dealType": "resale",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.99acres.com/resale-property-in-mumbai-ffid"
        }
    ],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/99acres-property-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 = {
    "startUrls": [{ "url": "https://www.99acres.com/resale-property-in-mumbai-ffid" }],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.99acres.com/resale-property-in-mumbai-ffid"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call confidential_gnat/99acres-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/99acres-property-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NpmnPJJABDwvZdOF1/builds/Wf0C70uj0b5xn6H8g/openapi.json
