# iProperty Scraper with Contacts| Enterprise Grade (`fatihtahta/iproperty-scraper`) Actor

Extract iProperty Malaysia listings at scale with rich property detail, agent contacts, project data, nearby places, and transaction history. Built for enterprise-grade Malaysia real estate intelligence, lead enrichment, and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/iproperty-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Agents, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 property listings

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/platform/actors/running/actors-in-store#pay-per-event

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

## iProperty Scraper | Malaysia Real Estate

**Slug:** `fatihtahta/iproperty-scraper`

### Overview

iProperty Scraper collects structured Malaysia real estate listing records, including property details, prices, locations, layout attributes, media, agent details, agency information, project metadata, nearby places, and available transaction history. [iProperty Malaysia](https://www.iproperty.com.my) is a major public real estate marketplace for Malaysian sale and rental inventory, making its listing data valuable for market research, monitoring, lead qualification, and operational reporting. The actor turns matching public listings into repeatable JSON outputs that can be used by analytics systems, enrichment workflows, CRM processes, and data pipelines. It is designed for recurring data acquisition with consistent input controls, predictable output records, and practical limits for validation or larger collection runs.

### Why Use This Actor

- **Market research and analytics teams:** build structured extraction workflows for pricing, availability, location coverage, floor area, property category, and transaction-history analysis.
- **Product and content teams:** normalize public listing data for company catalogs, market pages, content audits, and property-comparison experiences.
- **Developers and data engineering teams:** feed downstream systems with repeatable JSON records suitable for ETL, warehouses, enrichment pipelines, and monitoring jobs.
- **Lead generation and enrichment teams:** collect public agent, agency, project, and contact fields when available for outreach-ready real estate intelligence.
- **Monitoring and competitive tracking teams:** run scheduled collection for market intelligence, category movement, recently posted listings, and operational reporting.

### Common Use Cases

- **Market intelligence:** monitor Malaysian sale and rental supply by location, price range, property type, floor area, and listing freshness.
- **Lead generation:** build targeted prospect lists from public property listings, agents, agencies, and available contact fields.
- **Competitive monitoring:** track changes in pricing, inventory, verified-agent listings, media richness, and category coverage over time.
- **Catalog and directory building:** populate private property, project, agent, or agency databases with structured public records.
- **Data enrichment:** add current public property attributes, media, location, nearby-place, and transaction-history fields to CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, valuation workflows, and historical trend analysis.

### Quick Start

1. Choose the listing mode with `deal_type`: `buy` for sale listings or `rent` for rental listings.
2. Enter one Malaysian `location`, such as a city, state, township, neighborhood, or market name.
3. Select a `property_type` and add optional filters such as price, area, bedroom count, amenities, listing freshness, or verified-agent status.
4. Set a small `limit` for the first validation run, such as 10 or 25 records.
5. Run the actor in Apify Console and inspect the first dataset records.
6. Increase the limit, adjust filters, or schedule recurring runs once the output matches your workflow.

### Input Parameters

The actor accepts one required Malaysian location plus optional listing mode, category, filter, enrichment, contact, transaction-history, and limit controls.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `deal_type` | string | Listing segment to collect. Allowed values: `buy` for sale listings, `rent` for rental listings. | `buy` |
| `location` | string | Required Malaysian location, such as a city, state, township, neighborhood, or market name. | – |
| `property_type` | string | Property category filter. Allowed values: `all_residential`, `all_commercial`, `residential_bungalow_villa`, `residential_apartment_condo`, `residential_semi_detached_house`, `residential_terrace_link_house`, `residential_residential_land`, `commercial_commercial_property`, `commercial_industrial_property`, `commercial_agricultural_land`, `commercial_other`. | `all_residential` |
| `min_price` | integer | Minimum asking price in Malaysian ringgit (MYR). | – |
| `max_price` | integer | Maximum asking price in Malaysian ringgit (MYR). | – |
| `min_price_psf` | integer | Minimum price per square foot in MYR per sqft. | – |
| `max_price_psf` | integer | Maximum price per square foot in MYR per sqft. | – |
| `min_floor_area` | integer | Minimum built-up floor area in square feet. | – |
| `max_floor_area` | integer | Maximum built-up floor area in square feet. | – |
| `min_land_area` | integer | Minimum land area in square feet. | – |
| `max_land_area` | integer | Maximum land area in square feet. | – |
| `min_building_year` | integer | Earliest building completion year. Allowed range: 1977 to 2032. | – |
| `max_building_year` | integer | Latest building completion year. Allowed range: 1977 to 2032. | – |
| `bedroom` | array of strings | Bedroom counts to include. Allowed values: `studio`, `1`, `2`, `3`, `4`, `5+`. | – |
| `bathroom` | array of strings | Bathroom counts to include. Allowed values: `1`, `2`, `3`, `4`, `5+`. | – |
| `parking` | array of strings | Parking-space counts to include. Allowed values: `1`, `2`, `3`, `4`, `5+`. | – |
| `unit_type` | string | Unit layout or lot-position filter. Allowed values: `duplex`, `triplex`, `studio`, `corner_lot`, `intermediate`, `end_lot`, `loft`, `dual_key`, `soho`, `penthouse`. | – |
| `floor_level` | array of strings | Floor-level categories to include. Allowed values: `ground`, `low`, `mid`, `high`, `penthouse`. | – |
| `furnishing` | array of strings | Residential furnishing statuses to include. Allowed values: `unfurnished`, `partially_furnished`, `fully_furnished`. | – |
| `unit_amenities` | array of strings | Residential in-unit amenities to include. Allowed values: `aircon`, `balcony`, `bath_tub`, `corner_unit`, `helpers_room`, `private_pool`, `renovated`, `terrace`. | – |
| `building_amenities` | array of strings | Residential building amenities to include. Allowed values: `gym`, `parking`, `swimming_pool`, `tennis_court`. | – |
| `keyword` | string | Short keyword for a property, area, feature, or project term. | – |
| `publication_date` | string | Listing freshness window. Allowed values: `3_days`, `7_days`, `14_days`, `30_days`. | – |
| `with_video` | boolean | When enabled, collect only listings with video or virtual-tour media. | `false` |
| `tenure` | array of strings | Sale-listing tenure filter. Allowed values: `freehold`, `malay_reserved_land`, `private_lease_scheme`, `leasehold`, `bumi_lot`. | – |
| `verified_agent` | boolean | When enabled, collect only listings marked as coming from verified agents. | `false` |
| `enrich_data` | boolean | Adds richer listing details when available, including descriptions, listing dates, furnishing, facilities, nearby places, and extra media. | `true` |
| `get_contact` | boolean | Adds available agent phone and contact fields to saved records. | `true` |
| `get_transaction_history` | boolean | Adds available sale and rental transaction-history fields to saved records. | `true` |
| `limit` | integer | Maximum number of listings to save. Minimum: 1. Leave empty to collect available matching listings until the run naturally finishes. | – |

### Choosing Inputs

Use `location` as the primary scope control, then choose `deal_type` and `property_type` to define the market segment. Narrow filters such as price, price per square foot, area, bedroom count, amenities, tenure, listing freshness, and verified-agent status produce more targeted datasets; broader filters improve discovery and help identify available supply. For validation, start with a small `limit`, review the dataset shape, then increase the limit for recurring or broader collection. Use `enrich_data`, `get_contact`, and `get_transaction_history` when your workflow needs richer records; disable them when standard listing fields are sufficient and faster runs are preferred.

### Example Inputs

#### Example: Recently Posted Rental Monitoring

```json
{
  "deal_type": "rent",
  "location": "Bukit Bintang",
  "property_type": "residential_apartment_condo",
  "publication_date": "7_days",
  "verified_agent": true,
  "limit": 25
}
````

#### Example: Sale Market Price Band

```json
{
  "deal_type": "buy",
  "location": "Mont Kiara",
  "property_type": "all_residential",
  "min_price": 800000,
  "max_price": 1800000,
  "bedroom": ["2", "3"],
  "limit": 50
}
```

#### Example: Commercial Discovery With Enrichment

```json
{
  "deal_type": "buy",
  "location": "Johor Bahru",
  "property_type": "all_commercial",
  "min_floor_area": 1000,
  "enrich_data": true,
  "get_contact": true,
  "get_transaction_history": false,
  "limit": 30
}
```

### Output

#### Output destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, this README documents each shape separately based on the provided Example Output. The provided output contains one primary record shape: a property listing record.

#### Record envelope and stable identifiers

Each dataset item represents a property listing. The strongest recommended idempotency key is `id`; use `url` as a secondary stable key when syncing with systems that prefer URL-based upserts. For deduplication and upserts, treat records with the same `id` as the same listing and update mutable fields such as price, dates, status, media, contact fields, and transaction history. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs.

The record also includes `source_context.source_url`, `source_context.detail_url`, `source_context.seed_id`, and `source_context.seed_value` for source traceability and run context.

#### Examples

##### Example: property listing

```json
{
  "id": 500155295,
  "url": "https://www.iproperty.com.my/property/kl-city-centre/pavilion-ceylon-hill/rent-500155295/",
  "title": "Pavilion Ceylon Hill, Bukit Bintang, KL City Centre",
  "headline": "Cozy 1 Bedroom Service Residence for Rent at 1, Changkat Raja Chulan",
  "description": "Experience urban living in this charming 1 bedroom, 1 bathroom service residence available for rental now. Spanning 662 sqft, this unit at 1, Changkat Raja Chulan offers a combination of comfort and convenience. Located just a short distance from Bukit Bintang MRT station (0.5 km) and Merdeka MRT station (0.6 km), commuting is a breeze. Nearby, you'll find the Confucian Private Secondary School (0.5 km) and the bustling Fahrenheit88 shopping mall (0.4 km), perfect for your retail therapy. Project amenities include a refreshing swimming pool, a well-equipped gym, and 24-hour security, ensuring a safe and enjoyable living environment. Inside the unit, you will appreciate the modern features such as a cozy bed, stylish curtains, a fridge, and a spacious wardrobe that maximizes space. Enjoy stunning city views from your residence, adding to the allure of your new home. Don't miss out on this fantastic opportunity to live in a vibrant area with everything you need at your doorstep!",
  "listing_type": {
    "label": "For Rent",
    "code": "RENT",
    "deal_type": "rent"
  },
  "status": {
    "code": "ACT",
    "is_verified": false,
    "is_official_listing": true,
    "verification": {
      "status": "inactive",
      "is_verified": false
    }
  },
  "pricing": {
    "amount": 3400,
    "formatted": "RM 3,400 /mo",
    "currency": "MYR",
    "price_per_area": {
      "formatted": "RM 5.14 psf",
      "min": 5.14,
      "max": 5.14,
      "unit": "sqft"
    },
    "min_price": 3400,
    "max_price": 3400,
    "price_type": "{'code': 'NEG', 'text': 'Negotiable'}"
  },
  "location": {
    "address": "1 Changkat Raja Chulan, Bukit Bintang, KL City Centre, Kuala Lumpur",
    "postal_code": "50200",
    "street": "Changkat Raja Chulan",
    "coordinates": {
      "latitude": 3.149234,
      "longitude": 101.705599
    }
  },
  "layout": {
    "bedrooms": {
      "label": "1",
      "count": 1
    },
    "bathrooms": {
      "label": "1",
      "count": 1
    },
    "floor_area": {
      "value": 662,
      "formatted": "662 sqft",
      "unit": "sqft"
    },
    "furnishing": {
      "label": "Fully Furnished",
      "code": "FULL"
    },
    "unit_type_details": "Intermediate",
    "rental_type": "Entire Unit",
    "tenancy": {
      "value": "UNTENANTED"
    },
    "is_available_now": true
  },
  "dates": {
    "posted": {
      "text": "17 May 2026",
      "unix": 1779009777
    },
    "recency": "Listed on May 17, 2026 (2h ago)",
    "first_posted": "2025-09-21 11:47:48",
    "last_posted": "2026-05-17 17:22:57",
    "updated": "2026-05-17 17:22:13",
    "content_updated": "2026-05-17 17:22:13",
    "expires": "2026-05-24 17:22:57",
    "source_dates": {
      "expiry": {
        "date": "2026-05-24 17:22:57",
        "timestamp": 1779614577
      },
      "first_posted": {
        "date": "2025-09-21 11:47:48",
        "timestamp": 1758426468
      },
      "last_posted": {
        "date": "2026-05-17 17:22:57",
        "timestamp": 1779009777
      },
      "updated": {
        "date": "2026-05-17 17:22:13",
        "timestamp": 1779009733
      },
      "content_updated": {
        "date": "2026-05-17 17:22:13",
        "timestamp": 1779009733
      }
    }
  },
  "property": {
    "type": "Service Residence",
    "project_id": 17805,
    "developer": "Aisha Tan",
    "is_new_project": false,
    "is_premium_project_listing": false
  },
  "agent": {
    "id": 900123,
    "name": "Aisha Tan",
    "license": "REN 24819",
    "profile_url": "https://www.iproperty.com.my/property-agent/aisha-tan-900123/",
    "is_verified": true,
    "contacts": [
      {
        "type": "mobile",
        "value": "+60123456789",
        "pretty": "+60123456789"
      },
      {
        "type": "phone",
        "value": "+60123456789",
        "pretty": "+60123456789"
      },
      {
        "type": "whatsapp",
        "value": "+60123456789",
        "pretty": "+60123456789"
      },
      {
        "type": "website",
        "value": "https://www.iproperty.com.my/property-agent/aisha-tan-900123",
        "pretty": "https://www.iproperty.com.my/property-agent/aisha-tan-900123"
      },
      {
        "type": "mobile",
        "value": "+60123456789"
      },
      {
        "type": "secondary_mobile",
        "value": "+60123456789"
      },
      {
        "type": "mobile_pretty",
        "value": "+60123456789"
      },
      {
        "type": "phone_pretty",
        "value": "+60123456789"
      }
    ]
  },
  "agency": {
    "id": 81025,
    "name": "MERDEKA REALTY SDN BHD [ E (1) 2486 ]"
  },
  "organization": {
    "id": 81025,
    "legacy_id": 81025,
    "name": "MERDEKA REALTY SDN BHD [ E (1) 2486 ]",
    "contacts": [
      {
        "type": "phone",
        "value": "+60321887654",
        "pretty": "+60321887654"
      }
    ]
  },
  "project": {
    "id": "dvkeco",
    "legacy_id": 6601,
    "name": "Pavilion Ceylon Hill",
    "type": "verified",
    "tenure": {
      "code": "F",
      "text": "Freehold"
    },
    "facilities": [
      {
        "code": "TEN",
        "description": "Tennis Court"
      },
      {
        "code": "GYM",
        "description": "Gym"
      },
      {
        "code": "SWI",
        "description": "Swimming Pool"
      },
      {
        "code": "SEC",
        "description": "24-hour Security"
      },
      {
        "code": "JAC",
        "description": "Jacuzzi"
      },
      {
        "code": "BAD",
        "description": "Badminton Court"
      }
    ],
    "category": {
      "code": "R",
      "text": "Residential"
    },
    "property_type": "Apartment / Condo / Service Residence",
    "property_subtype": "Service Residence",
    "unit_type": "Intermediate"
  },
  "media": {
    "cover": [
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724192.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      }
    ],
    "has_floor_plans": false,
    "has_stream": false,
    "thumbnail_url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724192.V550/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg",
    "images": [
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724192.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724128.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724129.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724139.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724142.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724160.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724170.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724171.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724172.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724175.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724201.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724231.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724238.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724247.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724248.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724251.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724260.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/projectnet-project/164394/ZPPHO.131856043.V800/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724192.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724128.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724129.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724139.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724142.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724160.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724170.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724171.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724172.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724175.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724201.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724231.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724238.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724247.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724248.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724251.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      },
      {
        "url": "https://ipp1-cdn.pgimgs.com/listing/500155295/UPHO.275724260.800x800-fit/Pavilion-Ceylon-Hill-Bukit-Bintang-Malaysia.jpg"
      }
    ],
    "image_count": 35
  },
  "nearby_places": {
    "schools": [
      {
        "walking_distance_km": 0.59,
        "walking_duration_mins": 7,
        "name": "SJK (C ) NAN KAI",
        "distance_km": 0.27,
        "id": "13598",
        "category": "EDUCATION",
        "subcategory": "SCHOOL",
        "point": {
          "lon": 101.705,
          "lat": 3.14684
        }
      },
      {
        "walking_distance_km": 1.15,
        "walking_duration_mins": 14,
        "name": "AKADEMI KEJURURAWATAN TUNG SHIN",
        "distance_km": 0.38,
        "id": "17621",
        "category": "EDUCATION",
        "subcategory": "UNIVERSITY",
        "point": {
          "lon": 101.703943,
          "lat": 3.146219
        }
      }
    ]
  },
  "transaction_history": {
    "sales": {
      "total_count": 2,
      "items": [
        {
          "date": "2024-06-24",
          "date_timestamp": 1719187200000,
          "size": {
            "area": 657,
            "unit": "sqft"
          },
          "price": {
            "amount": 1211000,
            "psf": "1843.23",
            "psf_average": 1843.226788432
          },
          "floor_level": "46",
          "bedrooms": "1",
          "property_type": "Service Residence",
          "project_name": "PAVILION CEYLON HILL",
          "address": "*-**-**, CHANGKAT RAJA CHULAN, KL CITY CENTRE, KUALA LUMPUR",
          "lease": "Freehold"
        },
        {
          "date": "2024-05-06",
          "date_timestamp": 1714953600000,
          "size": {
            "area": 1367,
            "unit": "sqft"
          },
          "price": {
            "amount": 1900000,
            "psf": "1389.90",
            "psf_average": 1389.904901244
          },
          "floor_level": "13",
          "bedrooms": "1",
          "property_type": "Service Residence",
          "project_name": "PAVILION CEYLON HILL",
          "address": "*-**-**, CHANGKAT RAJA CHULAN, KL CITY CENTRE, KUALA LUMPUR",
          "lease": "Freehold"
        }
      ],
      "filter_level": "projectName",
      "insight_type": "LastTransaction",
      "is_latest_data_removed": true
    },
    "rentals": {
      "total_count": 4,
      "items": [
        {
          "date": "2024-07-10",
          "date_timestamp": 1720569600000,
          "size": {
            "area": 661,
            "unit": "sqft"
          },
          "price": {
            "amount": 3500,
            "psf": "5.29",
            "psf_average": 5.28716999467582
          },
          "floor_level": "34",
          "property_type": "Other",
          "project_name": "PAVILION CEYLON HILL",
          "address": "*-***-**, PAVILION CEYLON HILL RESIDENCE, NO. 5, CHANGKAT RAJA 50200 KUALA LUMPUR"
        },
        {
          "date": "2024-06-26",
          "date_timestamp": 1719360000000,
          "size": {
            "area": 661,
            "unit": "sqft"
          },
          "price": {
            "amount": 3400,
            "psf": "5.14",
            "psf_average": 5.13610799482794
          },
          "floor_level": "28",
          "property_type": "Service Residence",
          "project_name": "PAVILION CEYLON HILL",
          "address": "*-**-**, PAVILION CEYLON HILL RESIDENCE, NO. 5, CHANGKAT RAJA CHULAN 50200 KUALA LUMPUR"
        },
        {
          "date": "2024-05-18",
          "date_timestamp": 1715990400000,
          "size": {
            "area": 861,
            "unit": "sqft"
          },
          "price": {
            "amount": 4200,
            "psf": "4.88",
            "psf_average": 4.877414320088444
          },
          "floor_level": "20",
          "property_type": "Service Residence",
          "project_name": "PAVILION CEYLON HILL",
          "address": "**** *-**-**, RESIDENSI PAVILION BUKIT CEYLON, CHANGKAT RAJA CHULAN 50200 KUALA LUMPUR"
        },
        {
          "date": "2024-04-10",
          "date_timestamp": 1712707200000,
          "size": {
            "area": 1199,
            "unit": "sqft"
          },
          "price": {
            "amount": 6500,
            "psf": "5.42",
            "psf_average": 5.416849160314878
          },
          "floor_level": "50",
          "property_type": "Service Residence",
          "project_name": "PAVILION CEYLON HILL",
          "address": "***-**, PAVILION CEYLON HILL RESIDENCE NO 5 , CHANGKAT RAJA50200 KUALA LUMPUR"
        }
      ],
      "filter_level": "projectName",
      "insight_type": "LastTransaction",
      "is_latest_data_removed": false,
      "should_show_callout_text": false
    }
  },
  "attributes": {
    "external_id": "500155295",
    "cross_listing_type": "ORIGINAL",
    "cobroke": false,
    "offerings": {
      "is_ranked_spotlight": false,
      "is_auto_repost": false,
      "is_boosted": false,
      "is_downgraded": false,
      "is_gallery_featured": false,
      "is_main_featured": false,
      "is_non_paid": false,
      "is_premium_plus": false,
      "is_premium_project_listing": false,
      "is_promoted_listing": false,
      "is_property_specialist_listing": false,
      "is_showcase": false,
      "is_spotlight": false,
      "is_turbo": false,
      "is_turbo_pro": false,
      "is_super_boost": false,
      "is_boost": false,
      "is_standard": false,
      "is_featured_listing": false,
      "is_premium": false,
      "is_primary_basic": false,
      "is_primary_gold": false,
      "is_primary_platinum": false,
      "tier": 3
    },
    "title_type": {
      "code": "S",
      "text": "Strata"
    },
    "land_title_type": {
      "code": "R",
      "text": "Residential"
    }
  },
  "source_context": {
    "source_url": "https://www.iproperty.com.my/_next/data/consumerweb-ipp-consumer-f82962d948/property-for-rent.json?_freetextDisplay=Bukit+Bintang&areaCode=03ift&isCommercial=false&listingType=rent&page=1",
    "detail_url": "https://www.iproperty.com.my/property/kl-city-centre/pavilion-ceylon-hill/rent-500155295/",
    "seed_id": "403e152f330ffdbe2950",
    "seed_type": "search",
    "seed_value": "Bukit Bi",
    "page_index": 1,
    "domain": "www.iproperty.com.my",
    "publishing_source": {
      "code": "WEB"
    },
    "contact_url": "https://www.iproperty.com.my/api/consumer/listings/agent-details?listingId=rent-500155295&locale=en",
    "transaction_history_urls": {
      "sales": "https://www.iproperty.com.my/api/consumer/property-transactions/transactions?areaText=Bukit+Bintang&bedrooms=%5B%221%22%5D&districtCode=kpycl&districtText=KL+City+Centre&hdbEstateName=&isNew=true&locale=en&projectName=Pavilion+Ceylon+Hill&propertyId=dvkeco&propertyTypeCode=SRES&propertyTypeGroup=N®ion=my®ionText=Kuala+Lumpur&streetName=Changkat+Raja+Chulan&transactionType=sales",
      "rentals": "https://www.iproperty.com.my/api/consumer/property-transactions/transactions?areaText=Bukit+Bintang¤tFilterLevelKey=projectName&districtCode=kpycl&districtText=KL+City+Centre&hdbEstateName=&isNew=true&locale=en&projectName=Pavilion+Ceylon+Hill&propertyId=dvkeco&propertyTypeCode=SRES&propertyTypeGroup=N®ion=my®ionText=Kuala+Lumpur&streetName=Changkat+Raja+Chulan&transactionType=rentals"
    }
  }
}
```

### Field Reference

#### Property listing record

**id** *(integer, required)*: Stable iProperty listing identifier and recommended idempotency key.
**url** *(string, required)*: Public listing URL.
**title** *(string, optional)*: Listing title or project/location title.
**headline** *(string, optional)*: Short listing headline.
**description** *(string, optional)*: Public listing description when available.

**listing\_type.label** *(string, optional)*: Human-readable listing segment, such as `For Rent`.
**listing\_type.code** *(string, optional)*: Listing segment code.
**listing\_type.deal\_type** *(string, optional)*: Normalized deal type, such as `buy` or `rent`.

**status.code** *(string, optional)*: Listing status code.
**status.is\_verified** *(boolean, optional)*: Whether the listing is marked verified.
**status.is\_official\_listing** *(boolean, optional)*: Whether the listing is marked as an official listing.
**status.verification.status** *(string, optional)*: Verification status label.
**status.verification.is\_verified** *(boolean, optional)*: Verification flag.

**pricing.amount** *(number, optional)*: Listing price amount in MYR.
**pricing.formatted** *(string, optional)*: Human-readable price text.
**pricing.currency** *(string, optional)*: Currency code, typically `MYR`.
**pricing.price\_per\_area.formatted** *(string, optional)*: Human-readable price-per-area text.
**pricing.price\_per\_area.min / pricing.price\_per\_area.max** *(number, optional)*: Price per square foot range.
**pricing.price\_per\_area.unit** *(string, optional)*: Area unit, typically `sqft`.
**pricing.min\_price / pricing.max\_price** *(number, optional)*: Minimum and maximum price values when represented as a range.
**pricing.price\_type** *(string, optional)*: Price-type label or source value.

**location.address** *(string, optional)*: Full public address text.
**location.postal\_code** *(string, optional)*: Postal code.
**location.street** *(string, optional)*: Street name.
**location.coordinates.latitude / location.coordinates.longitude** *(number, optional)*: Listing coordinates when available.

**layout.bedrooms.label / layout.bedrooms.count** *(string/integer, optional)*: Bedroom count as text and number.
**layout.bathrooms.label / layout.bathrooms.count** *(string/integer, optional)*: Bathroom count as text and number.
**layout.floor\_area.value** *(number, optional)*: Built-up floor area.
**layout.floor\_area.formatted** *(string, optional)*: Human-readable floor area.
**layout.floor\_area.unit** *(string, optional)*: Floor-area unit, typically `sqft`.
**layout.furnishing.label / layout.furnishing.code** *(string, optional)*: Furnishing status.
**layout.unit\_type\_details** *(string, optional)*: Unit layout or lot-position detail.
**layout.rental\_type** *(string, optional)*: Rental scope, such as entire unit.
**layout.tenancy.value** *(string, optional)*: Tenancy status when available.
**layout.is\_available\_now** *(boolean, optional)*: Whether the listing is marked available now.

**dates.posted.text** *(string, optional)*: Public posted-date text.
**dates.posted.unix** *(integer, optional)*: Posted timestamp.
**dates.recency** *(string, optional)*: Human-readable recency text.
**dates.first\_posted / dates.last\_posted** *(string, optional)*: First and last posted date strings.
**dates.updated / dates.content\_updated** *(string, optional)*: Listing update timestamps.
**dates.expires** *(string, optional)*: Listing expiry timestamp when available.
**dates.source\_dates.expiry.date / dates.source\_dates.expiry.timestamp** *(string/integer, optional)*: Expiry date and timestamp.
**dates.source\_dates.first\_posted.date / dates.source\_dates.first\_posted.timestamp** *(string/integer, optional)*: First-posted date and timestamp.
**dates.source\_dates.last\_posted.date / dates.source\_dates.last\_posted.timestamp** *(string/integer, optional)*: Last-posted date and timestamp.
**dates.source\_dates.updated.date / dates.source\_dates.updated.timestamp** *(string/integer, optional)*: Updated date and timestamp.
**dates.source\_dates.content\_updated.date / dates.source\_dates.content\_updated.timestamp** *(string/integer, optional)*: Content-updated date and timestamp.

**property.type** *(string, optional)*: Property type label.
**property.project\_id** *(integer, optional)*: Source project identifier.
**property.developer** *(string, optional)*: Developer or associated name when available.
**property.is\_new\_project** *(boolean, optional)*: Whether the listing is associated with a new project.
**property.is\_premium\_project\_listing** *(boolean, optional)*: Whether the listing is marked as premium project inventory.

**agent.id** *(integer, optional)*: Agent identifier.
**agent.name** *(string, optional)*: Agent name.
**agent.license** *(string, optional)*: Agent license or registration text.
**agent.profile\_url** *(string, optional)*: Public agent profile URL.
**agent.is\_verified** *(boolean, optional)*: Whether the agent is marked verified.
**agent.contacts\[].type** *(string, optional)*: Contact type, such as mobile, phone, WhatsApp, or website.
**agent.contacts\[].value** *(string, optional)*: Contact value.
**agent.contacts\[].pretty** *(string, optional)*: Display-friendly contact value when available.

**agency.id** *(integer, optional)*: Agency identifier.
**agency.name** *(string, optional)*: Agency name.

**organization.id** *(integer, optional)*: Organization identifier.
**organization.legacy\_id** *(integer, optional)*: Legacy organization identifier.
**organization.name** *(string, optional)*: Organization name.
**organization.contacts\[].type** *(string, optional)*: Organization contact type.
**organization.contacts\[].value** *(string, optional)*: Organization contact value.
**organization.contacts\[].pretty** *(string, optional)*: Display-friendly organization contact value.

**project.id** *(string, optional)*: Project identifier.
**project.legacy\_id** *(integer, optional)*: Legacy project identifier.
**project.name** *(string, optional)*: Project name.
**project.type** *(string, optional)*: Project type or verification label.
**project.tenure.code / project.tenure.text** *(string, optional)*: Tenure code and label.
**project.facilities\[].code** *(string, optional)*: Facility code.
**project.facilities\[].description** *(string, optional)*: Facility description.
**project.category.code / project.category.text** *(string, optional)*: Project category.
**project.property\_type** *(string, optional)*: Project-level property type.
**project.property\_subtype** *(string, optional)*: Project-level property subtype.
**project.unit\_type** *(string, optional)*: Project-level unit type.

**media.cover\[].url** *(string, optional)*: Cover image URL.
**media.has\_floor\_plans** *(boolean, optional)*: Whether floor-plan media is indicated.
**media.has\_stream** *(boolean, optional)*: Whether streaming media is indicated.
**media.thumbnail\_url** *(string, optional)*: Thumbnail image URL.
**media.images\[].url** *(string, optional)*: Listing or project image URL.
**media.image\_count** *(integer, optional)*: Number of images represented by the record.

**nearby\_places.schools\[].walking\_distance\_km** *(number, optional)*: Walking distance in kilometers.
**nearby\_places.schools\[].walking\_duration\_mins** *(integer, optional)*: Walking duration in minutes.
**nearby\_places.schools\[].name** *(string, optional)*: Nearby place name.
**nearby\_places.schools\[].distance\_km** *(number, optional)*: Straight-line or listed distance in kilometers.
**nearby\_places.schools\[].id** *(string, optional)*: Nearby place identifier.
**nearby\_places.schools\[].category** *(string, optional)*: Nearby place category.
**nearby\_places.schools\[].subcategory** *(string, optional)*: Nearby place subcategory.
**nearby\_places.schools\[].point.lon / nearby\_places.schools\[].point.lat** *(number, optional)*: Nearby place coordinates.

**transaction\_history.sales.total\_count** *(integer, optional)*: Number of available sale transaction records.
**transaction\_history.sales.items\[].date** *(string, optional)*: Sale transaction date.
**transaction\_history.sales.items\[].date\_timestamp** *(integer, optional)*: Sale transaction timestamp.
**transaction\_history.sales.items\[].size.area / transaction\_history.sales.items\[].size.unit** *(number/string, optional)*: Transaction unit size and unit.
**transaction\_history.sales.items\[].price.amount** *(number, optional)*: Sale transaction price in MYR.
**transaction\_history.sales.items\[].price.psf / transaction\_history.sales.items\[].price.psf\_average** *(string/number, optional)*: Sale price per square foot.
**transaction\_history.sales.items\[].floor\_level** *(string, optional)*: Floor level.
**transaction\_history.sales.items\[].bedrooms** *(string, optional)*: Bedroom count.
**transaction\_history.sales.items\[].property\_type** *(string, optional)*: Property type.
**transaction\_history.sales.items\[].project\_name** *(string, optional)*: Project name.
**transaction\_history.sales.items\[].address** *(string, optional)*: Transaction address text.
**transaction\_history.sales.items\[].lease** *(string, optional)*: Lease or tenure label.
**transaction\_history.sales.filter\_level** *(string, optional)*: Transaction matching level.
**transaction\_history.sales.insight\_type** *(string, optional)*: Transaction insight category.
**transaction\_history.sales.is\_latest\_data\_removed** *(boolean, optional)*: Whether the latest data is marked removed.

**transaction\_history.rentals.total\_count** *(integer, optional)*: Number of available rental transaction records.
**transaction\_history.rentals.items\[].date** *(string, optional)*: Rental transaction date.
**transaction\_history.rentals.items\[].date\_timestamp** *(integer, optional)*: Rental transaction timestamp.
**transaction\_history.rentals.items\[].size.area / transaction\_history.rentals.items\[].size.unit** *(number/string, optional)*: Rental unit size and unit.
**transaction\_history.rentals.items\[].price.amount** *(number, optional)*: Rental transaction price in MYR.
**transaction\_history.rentals.items\[].price.psf / transaction\_history.rentals.items\[].price.psf\_average** *(string/number, optional)*: Rental price per square foot.
**transaction\_history.rentals.items\[].floor\_level** *(string, optional)*: Floor level.
**transaction\_history.rentals.items\[].property\_type** *(string, optional)*: Property type.
**transaction\_history.rentals.items\[].project\_name** *(string, optional)*: Project name.
**transaction\_history.rentals.items\[].address** *(string, optional)*: Transaction address text.
**transaction\_history.rentals.filter\_level** *(string, optional)*: Transaction matching level.
**transaction\_history.rentals.insight\_type** *(string, optional)*: Transaction insight category.
**transaction\_history.rentals.is\_latest\_data\_removed** *(boolean, optional)*: Whether the latest data is marked removed.
**transaction\_history.rentals.should\_show\_callout\_text** *(boolean, optional)*: Source-provided display flag.

**attributes.external\_id** *(string, optional)*: External listing identifier.
**attributes.cross\_listing\_type** *(string, optional)*: Cross-listing classification.
**attributes.cobroke** *(boolean, optional)*: Co-broke indicator.
**attributes.offerings.is\_ranked\_spotlight** *(boolean, optional)*: Ranked spotlight indicator.
**attributes.offerings.is\_auto\_repost** *(boolean, optional)*: Auto-repost indicator.
**attributes.offerings.is\_boosted** *(boolean, optional)*: Boosted listing indicator.
**attributes.offerings.is\_downgraded** *(boolean, optional)*: Downgraded listing indicator.
**attributes.offerings.is\_gallery\_featured** *(boolean, optional)*: Gallery-featured indicator.
**attributes.offerings.is\_main\_featured** *(boolean, optional)*: Main-featured indicator.
**attributes.offerings.is\_non\_paid** *(boolean, optional)*: Non-paid listing indicator.
**attributes.offerings.is\_premium\_plus** *(boolean, optional)*: Premium-plus indicator.
**attributes.offerings.is\_premium\_project\_listing** *(boolean, optional)*: Premium project listing indicator.
**attributes.offerings.is\_promoted\_listing** *(boolean, optional)*: Promoted listing indicator.
**attributes.offerings.is\_property\_specialist\_listing** *(boolean, optional)*: Property-specialist listing indicator.
**attributes.offerings.is\_showcase** *(boolean, optional)*: Showcase indicator.
**attributes.offerings.is\_spotlight** *(boolean, optional)*: Spotlight indicator.
**attributes.offerings.is\_turbo** *(boolean, optional)*: Turbo indicator.
**attributes.offerings.is\_turbo\_pro** *(boolean, optional)*: Turbo Pro indicator.
**attributes.offerings.is\_super\_boost** *(boolean, optional)*: Super-boost indicator.
**attributes.offerings.is\_boost** *(boolean, optional)*: Boost indicator.
**attributes.offerings.is\_standard** *(boolean, optional)*: Standard listing indicator.
**attributes.offerings.is\_featured\_listing** *(boolean, optional)*: Featured listing indicator.
**attributes.offerings.is\_premium** *(boolean, optional)*: Premium listing indicator.
**attributes.offerings.is\_primary\_basic** *(boolean, optional)*: Primary Basic indicator.
**attributes.offerings.is\_primary\_gold** *(boolean, optional)*: Primary Gold indicator.
**attributes.offerings.is\_primary\_platinum** *(boolean, optional)*: Primary Platinum indicator.
**attributes.offerings.tier** *(integer, optional)*: Source-provided listing tier.
**attributes.title\_type.code / attributes.title\_type.text** *(string, optional)*: Title type code and label.
**attributes.land\_title\_type.code / attributes.land\_title\_type.text** *(string, optional)*: Land title type code and label.

**source\_context.source\_url** *(string, optional)*: Source URL associated with the listing collection context.
**source\_context.detail\_url** *(string, optional)*: Public listing detail URL.
**source\_context.seed\_id** *(string, optional)*: Stable run seed identifier.
**source\_context.seed\_type** *(string, optional)*: Seed category, such as search.
**source\_context.seed\_value** *(string, optional)*: Input or search value associated with the record.
**source\_context.page\_index** *(integer, optional)*: Source result page index.
**source\_context.domain** *(string, optional)*: Source domain.
**source\_context.publishing\_source.code** *(string, optional)*: Publishing-source code.
**source\_context.contact\_url** *(string, optional)*: Contact-source URL associated with the record when contact enrichment is enabled.
**source\_context.transaction\_history\_urls.sales / source\_context.transaction\_history\_urls.rentals** *(string, optional)*: Transaction-history source URLs associated with the record when transaction history is enabled.

### 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, or public interface changes.
- **Optional fields:** null-check optional fields in downstream code, especially contact details, media, nearby places, transaction history, and source-provided flags.
- **Deduplication:** use `id` as the primary stable key, with `url` as a secondary key when needed.
- **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 `location`, `deal_type`, and `property_type` combination per run when you need cleaner segmentation.
- Leave optional filters empty when the goal is broad discovery.
- Add price, area, room, amenity, freshness, and verified-agent filters gradually to understand how each field changes coverage.
- Enable `enrich_data`, `get_contact`, and `get_transaction_history` when richer records are required for analysis or outreach.
- Schedule recurring runs for monitoring workflows instead of relying on manual one-off collection.
- Use `id` for deduplication when storing results over time.

### How to Run on Apify

1. Open the actor in Apify Console.
2. Configure the available input fields for the target location, listing mode, category, filters, and enrichment options.
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 download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

You can schedule runs to keep Malaysian real estate datasets fresh for reporting, monitoring, and enrichment workflows. Recurring runs are useful when you need consistent snapshots for the same location, category, or filter set.

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

#### Integration Options

- **CRM enrichment:** sync public listing, agent, agency, contact, and property attributes into account or lead records.
- **BI dashboards:** monitor pricing, availability, location coverage, property categories, and transaction-history trends.
- **Google Sheets or Airtable:** review smaller listing datasets, qualification lists, and monitoring samples with non-technical teams.
- **Webhooks:** trigger validation, notification, or ingestion workflows after each completed run.
- **Data enrichment pipelines:** merge listing records with valuation, territory, or customer datasets.
- **Warehouses and ETL jobs:** load normalized JSON records into historical reporting and analytics systems.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for analytics, operations, and automation.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into business 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.iproperty.com.my> publicly exposes at run time.
- Some optional fields may be missing on sparse listings, older listings, commercial records, or listings without public enrichment data.
- Very broad searches may take longer or require higher `limit` values to collect the desired coverage.
- Target-side changes can affect field availability, naming, or formatting.
- Regional, listing-type, account, or availability differences may change visible results.
- Contact and transaction-history fields are included only when available for the listing and enabled in the input.

### Troubleshooting

- **No results returned:** check filters, location or category spelling, and whether iProperty has matching public records for the selected scope.
- **Fewer results than expected:** broaden filters, raise `limit`, or verify that the target contains enough matching records.
- **Some fields are empty:** optional fields depend on what each public listing provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller location or category segments.
- **Output changed:** compare the current output with the field reference and include a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public iProperty Malaysia real estate listing data, including property details, prices, locations, layout fields, media, agent and agency details, project information, nearby places, and available transaction history.

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

Yes. The schema supports `location`, `deal_type`, `property_type`, price range, price per square foot, floor area, land area, building year, room counts, parking, unit type, floor level, furnishing, amenities, keyword, publication date, tenure, video availability, and verified-agent status.

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

The selected filters may match fewer public listings than the requested `limit`. Broaden the location, category, price range, room filters, or freshness window to increase coverage.

#### Can I schedule recurring runs?

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

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

Use `id` as the primary idempotency key. If your destination system is URL-oriented, store `url` as a secondary deduplication key.

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

Yes. Apify datasets support exports in JSON, CSV, Excel, and other supported formats from the dataset view.

#### Does this actor collect private data?

The actor is intended to collect publicly available listing information from iProperty Malaysia. Users are responsible for using any personal or contact information lawfully and responsibly.

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

Include the input used, the run ID, expected versus actual behavior, and a small output sample when helpful. Redact any sensitive private notes before sharing.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available Malaysia real estate listing information from <https://www.iproperty.com.my> for legitimate business purposes, including:

- **Real estate** research and market analysis
- **Lead qualification and enrichment**
- **Inventory monitoring and operational reporting**

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

#### 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, including GDPR and CCPA

### Support

For help, use the actor page or Issues section. Include the input used, with sensitive values redacted if necessary, the run ID, expected versus actual behavior, and a small output sample when it helps explain the issue.

# Actor input Schema

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

Select the marketplace segment to collect from. This choice shapes the listings returned and affects which sale-only filters, such as tenure, are useful.

## `location` (type: `string`):

Enter one Malaysian location, such as a city, state, township, neighborhood, or market. More specific locations produce a more targeted dataset, while broader locations can return a wider set of listings.

## `property_type` (type: `string`):

Collect only listings that match the selected property category. Commercial categories can make some residential-only filters irrelevant.

## `min_price` (type: `integer`):

Collect only listings priced at or above this amount. Leave empty when you do not need a lower price boundary.

## `max_price` (type: `integer`):

Collect only listings priced at or below this amount. Leave empty when you do not need an upper price boundary.

## `min_price_psf` (type: `integer`):

Collect only listings with a price per square foot at or above this amount. Leave empty when lower value-density filtering is not needed.

## `max_price_psf` (type: `integer`):

Collect only listings with a price per square foot at or below this amount. Leave empty when upper value-density filtering is not needed.

## `min_floor_area` (type: `integer`):

Collect only listings with at least this many square feet of floor area. Leave empty when you do not need a minimum built-up size.

## `max_floor_area` (type: `integer`):

Collect only listings with at most this many square feet of floor area. Leave empty when you do not need a maximum built-up size.

## `min_land_area` (type: `integer`):

Collect only listings with at least this many square feet of land area. Leave empty when you do not need a minimum land size.

## `max_land_area` (type: `integer`):

Collect only listings with at most this many square feet of land area. Leave empty when you do not need a maximum land size.

## `min_building_year` (type: `integer`):

Collect only listings completed in or after this year. Leave empty when you do not need an earliest completion year.

## `max_building_year` (type: `integer`):

Collect only listings completed in or before this year. Leave empty when you do not need a latest completion year.

## `bedroom` (type: `array`):

Collect only listings that match one of the selected bedroom counts. Leave empty to accept any bedroom count.

## `bathroom` (type: `array`):

Collect only listings that match one of the selected bathroom counts. Leave empty to accept any bathroom count.

## `parking` (type: `array`):

Collect only listings that match one of the selected parking-space counts. Leave empty to accept any parking count.

## `unit_type` (type: `string`):

Collect only listings matching this unit layout or lot-position type. Leave empty when unit type is not part of your selection criteria.

## `floor_level` (type: `array`):

Collect only listings matching one of the selected floor-level categories. Leave empty to include any floor level.

## `furnishing` (type: `array`):

Collect only residential listings matching one of the selected furnishing statuses. This filter does not apply to commercial property categories.

## `unit_amenities` (type: `array`):

Collect only residential listings that include one of the selected in-unit features. This filter does not apply to commercial property categories.

## `building_amenities` (type: `array`):

Collect only residential listings that include one of the selected building amenities. This filter does not apply to commercial property categories.

## `keyword` (type: `string`):

Collect only listings that match this keyword. Use a short property, area, feature, or project term; leave empty when location and filters are enough.

## `publication_date` (type: `string`):

Collect only listings posted within the selected time window. Use this when recent market activity matters more than older inventory.

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

Enable this to collect only listings that include video or virtual-tour media. This creates a narrower dataset focused on richer listing presentations.

## `tenure` (type: `array`):

Collect only sale listings matching one of the selected tenure values. Leasehold covers the available leasehold options for the selected property category; Bumi Lot applies only to residential categories.

## `verified_agent` (type: `boolean`):

Enable this to collect only listings marked as coming from verified agents. This narrows the dataset toward listings with an additional marketplace trust signal.

## `enrich_data` (type: `boolean`):

Enable this for more complete property listings, including descriptions, listing dates, furnishing, project facilities, nearby points of interest, and extra media when available. Turn it off for faster runs when the standard result fields are enough.

## `get_contact` (type: `boolean`):

Enable this to add available agent phone and contact fields to saved listing records. Leave disabled when you only need listing-level property data.

## `get_transaction_history` (type: `boolean`):

Enable this to add available sale and rental transaction history to saved listing records. This is useful for valuation, comparison, and market-research workflows.

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

Set the maximum number of listings to save for the location. Leave empty to keep collecting available matching listings until the run naturally finishes.

## Actor input object example

```json
{
  "deal_type": "buy",
  "location": "Bukit Bintang",
  "property_type": "all_residential",
  "with_video": false,
  "verified_agent": false,
  "enrich_data": true,
  "get_contact": true,
  "get_transaction_history": true,
  "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": "Bukit Bintang",
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/iproperty-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": "Bukit Bintang",
    "limit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/iproperty-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": "Bukit Bintang",
  "limit": 100
}' |
apify call fatihtahta/iproperty-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "iProperty Scraper with Contacts| Enterprise Grade",
        "description": "Extract iProperty Malaysia listings at scale with rich property detail, agent contacts, project data, nearby places, and transaction history. Built for enterprise-grade Malaysia real estate intelligence, lead enrichment, and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "qibr9SXvExe5kjLvX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~iproperty-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-iproperty-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~iproperty-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-iproperty-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~iproperty-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-iproperty-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"
                ],
                "properties": {
                    "deal_type": {
                        "title": "Choose Sale or Rent Listings",
                        "enum": [
                            "buy",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Select the marketplace segment to collect from. This choice shapes the listings returned and affects which sale-only filters, such as tenure, are useful.",
                        "default": "buy"
                    },
                    "location": {
                        "title": "Enter the Required Location",
                        "type": "string",
                        "description": "Enter one Malaysian location, such as a city, state, township, neighborhood, or market. More specific locations produce a more targeted dataset, while broader locations can return a wider set of listings."
                    },
                    "property_type": {
                        "title": "Choose Property Category",
                        "enum": [
                            "all_residential",
                            "all_commercial",
                            "residential_bungalow_villa",
                            "residential_apartment_condo",
                            "residential_semi_detached_house",
                            "residential_terrace_link_house",
                            "residential_residential_land",
                            "commercial_commercial_property",
                            "commercial_industrial_property",
                            "commercial_agricultural_land",
                            "commercial_other"
                        ],
                        "type": "string",
                        "description": "Collect only listings that match the selected property category. Commercial categories can make some residential-only filters irrelevant.",
                        "default": "all_residential"
                    },
                    "min_price": {
                        "title": "Set Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings priced at or above this amount. Leave empty when you do not need a lower price boundary."
                    },
                    "max_price": {
                        "title": "Set Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings priced at or below this amount. Leave empty when you do not need an upper price boundary."
                    },
                    "min_price_psf": {
                        "title": "Set Minimum Price per Square Foot",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings with a price per square foot at or above this amount. Leave empty when lower value-density filtering is not needed."
                    },
                    "max_price_psf": {
                        "title": "Set Maximum Price per Square Foot",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings with a price per square foot at or below this amount. Leave empty when upper value-density filtering is not needed."
                    },
                    "min_floor_area": {
                        "title": "Set Minimum Floor Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings with at least this many square feet of floor area. Leave empty when you do not need a minimum built-up size."
                    },
                    "max_floor_area": {
                        "title": "Set Maximum Floor Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings with at most this many square feet of floor area. Leave empty when you do not need a maximum built-up size."
                    },
                    "min_land_area": {
                        "title": "Set Minimum Land Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings with at least this many square feet of land area. Leave empty when you do not need a minimum land size."
                    },
                    "max_land_area": {
                        "title": "Set Maximum Land Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Collect only listings with at most this many square feet of land area. Leave empty when you do not need a maximum land size."
                    },
                    "min_building_year": {
                        "title": "Set Earliest Building Year",
                        "minimum": 1977,
                        "maximum": 2032,
                        "type": "integer",
                        "description": "Collect only listings completed in or after this year. Leave empty when you do not need an earliest completion year."
                    },
                    "max_building_year": {
                        "title": "Set Latest Building Year",
                        "minimum": 1977,
                        "maximum": 2032,
                        "type": "integer",
                        "description": "Collect only listings completed in or before this year. Leave empty when you do not need a latest completion year."
                    },
                    "bedroom": {
                        "title": "Choose Bedroom Counts",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only listings that match one of the selected bedroom counts. Leave empty to accept any bedroom count.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "studio",
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ],
                            "enumTitles": [
                                "Studio",
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ]
                        }
                    },
                    "bathroom": {
                        "title": "Choose Bathroom Counts",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only listings that match one of the selected bathroom counts. Leave empty to accept any bathroom count.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ],
                            "enumTitles": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ]
                        }
                    },
                    "parking": {
                        "title": "Choose Parking Space Counts",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only listings that match one of the selected parking-space counts. Leave empty to accept any parking count.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ],
                            "enumTitles": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5+"
                            ]
                        }
                    },
                    "unit_type": {
                        "title": "Choose Unit Type",
                        "enum": [
                            "duplex",
                            "triplex",
                            "studio",
                            "corner_lot",
                            "intermediate",
                            "end_lot",
                            "loft",
                            "dual_key",
                            "soho",
                            "penthouse"
                        ],
                        "type": "string",
                        "description": "Collect only listings matching this unit layout or lot-position type. Leave empty when unit type is not part of your selection criteria."
                    },
                    "floor_level": {
                        "title": "Choose Floor Levels",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only listings matching one of the selected floor-level categories. Leave empty to include any floor level.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "ground",
                                "low",
                                "mid",
                                "high",
                                "penthouse"
                            ],
                            "enumTitles": [
                                "Ground",
                                "Low",
                                "Mid",
                                "High",
                                "Penthouse"
                            ]
                        }
                    },
                    "furnishing": {
                        "title": "Choose Furnishing Status",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only residential listings matching one of the selected furnishing statuses. This filter does not apply to commercial property categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "unfurnished",
                                "partially_furnished",
                                "fully_furnished"
                            ],
                            "enumTitles": [
                                "Unfurnished",
                                "Partially Furnished",
                                "Fully Furnished"
                            ]
                        }
                    },
                    "unit_amenities": {
                        "title": "Choose Unit Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only residential listings that include one of the selected in-unit features. This filter does not apply to commercial property categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "aircon",
                                "balcony",
                                "bath_tub",
                                "corner_unit",
                                "helpers_room",
                                "private_pool",
                                "renovated",
                                "terrace"
                            ],
                            "enumTitles": [
                                "Aircon",
                                "Balcony",
                                "Bath tub",
                                "Corner unit",
                                "Helper's room",
                                "Private pool",
                                "Renovated",
                                "Terrace"
                            ]
                        }
                    },
                    "building_amenities": {
                        "title": "Choose Building Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only residential listings that include one of the selected building amenities. This filter does not apply to commercial property categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "gym",
                                "parking",
                                "swimming_pool",
                                "tennis_court"
                            ],
                            "enumTitles": [
                                "Gym",
                                "Parking",
                                "Swimming pool",
                                "Tennis court"
                            ]
                        }
                    },
                    "keyword": {
                        "title": "Enter Search Keyword",
                        "type": "string",
                        "description": "Collect only listings that match this keyword. Use a short property, area, feature, or project term; leave empty when location and filters are enough."
                    },
                    "publication_date": {
                        "title": "Choose Listing Freshness",
                        "enum": [
                            "3_days",
                            "7_days",
                            "14_days",
                            "30_days"
                        ],
                        "type": "string",
                        "description": "Collect only listings posted within the selected time window. Use this when recent market activity matters more than older inventory."
                    },
                    "with_video": {
                        "title": "Include Only Listings with Video or Virtual Tours",
                        "type": "boolean",
                        "description": "Enable this to collect only listings that include video or virtual-tour media. This creates a narrower dataset focused on richer listing presentations.",
                        "default": false
                    },
                    "tenure": {
                        "title": "Choose Tenure Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Collect only sale listings matching one of the selected tenure values. Leasehold covers the available leasehold options for the selected property category; Bumi Lot applies only to residential categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "freehold",
                                "malay_reserved_land",
                                "private_lease_scheme",
                                "leasehold",
                                "bumi_lot"
                            ],
                            "enumTitles": [
                                "Freehold",
                                "Malay Reserved Land",
                                "Private Lease Scheme",
                                "Leasehold",
                                "Bumi Lot (Residential)"
                            ]
                        }
                    },
                    "verified_agent": {
                        "title": "Require Verified Agent Listings",
                        "type": "boolean",
                        "description": "Enable this to collect only listings marked as coming from verified agents. This narrows the dataset toward listings with an additional marketplace trust signal.",
                        "default": false
                    },
                    "enrich_data": {
                        "title": "Collect Richer Property Listing Details",
                        "type": "boolean",
                        "description": "Enable this for more complete property listings, including descriptions, listing dates, furnishing, project facilities, nearby points of interest, and extra media when available. Turn it off for faster runs when the standard result fields are enough.",
                        "default": true
                    },
                    "get_contact": {
                        "title": "Include Agent Contact Details",
                        "type": "boolean",
                        "description": "Enable this to add available agent phone and contact fields to saved listing records. Leave disabled when you only need listing-level property data.",
                        "default": true
                    },
                    "get_transaction_history": {
                        "title": "Include Transaction History",
                        "type": "boolean",
                        "description": "Enable this to add available sale and rental transaction history to saved listing records. This is useful for valuation, comparison, and market-research workflows.",
                        "default": true
                    },
                    "limit": {
                        "title": "Set Maximum Listings",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Set the maximum number of listings to save for the location. Leave empty to keep collecting available matching listings until the run naturally finishes."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
