iProperty Scraper with Contacts| Enterprise Grade avatar

iProperty Scraper with Contacts| Enterprise Grade

Pricing

from $0.70 / 1,000 property listings

Go to Apify Store
iProperty Scraper with Contacts| Enterprise Grade

iProperty Scraper with Contacts| Enterprise Grade

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.

Pricing

from $0.70 / 1,000 property listings

Rating

0.0

(0)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

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

ParameterTypeDescriptionDefault
deal_typestringListing segment to collect. Allowed values: buy for sale listings, rent for rental listings.buy
locationstringRequired Malaysian location, such as a city, state, township, neighborhood, or market name.
property_typestringProperty 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_priceintegerMinimum asking price in Malaysian ringgit (MYR).
max_priceintegerMaximum asking price in Malaysian ringgit (MYR).
min_price_psfintegerMinimum price per square foot in MYR per sqft.
max_price_psfintegerMaximum price per square foot in MYR per sqft.
min_floor_areaintegerMinimum built-up floor area in square feet.
max_floor_areaintegerMaximum built-up floor area in square feet.
min_land_areaintegerMinimum land area in square feet.
max_land_areaintegerMaximum land area in square feet.
min_building_yearintegerEarliest building completion year. Allowed range: 1977 to 2032.
max_building_yearintegerLatest building completion year. Allowed range: 1977 to 2032.
bedroomarray of stringsBedroom counts to include. Allowed values: studio, 1, 2, 3, 4, 5+.
bathroomarray of stringsBathroom counts to include. Allowed values: 1, 2, 3, 4, 5+.
parkingarray of stringsParking-space counts to include. Allowed values: 1, 2, 3, 4, 5+.
unit_typestringUnit layout or lot-position filter. Allowed values: duplex, triplex, studio, corner_lot, intermediate, end_lot, loft, dual_key, soho, penthouse.
floor_levelarray of stringsFloor-level categories to include. Allowed values: ground, low, mid, high, penthouse.
furnishingarray of stringsResidential furnishing statuses to include. Allowed values: unfurnished, partially_furnished, fully_furnished.
unit_amenitiesarray of stringsResidential in-unit amenities to include. Allowed values: aircon, balcony, bath_tub, corner_unit, helpers_room, private_pool, renovated, terrace.
building_amenitiesarray of stringsResidential building amenities to include. Allowed values: gym, parking, swimming_pool, tennis_court.
keywordstringShort keyword for a property, area, feature, or project term.
publication_datestringListing freshness window. Allowed values: 3_days, 7_days, 14_days, 30_days.
with_videobooleanWhen enabled, collect only listings with video or virtual-tour media.false
tenurearray of stringsSale-listing tenure filter. Allowed values: freehold, malay_reserved_land, private_lease_scheme, leasehold, bumi_lot.
verified_agentbooleanWhen enabled, collect only listings marked as coming from verified agents.false
enrich_databooleanAdds richer listing details when available, including descriptions, listing dates, furnishing, facilities, nearby places, and extra media.true
get_contactbooleanAdds available agent phone and contact fields to saved records.true
get_transaction_historybooleanAdds available sale and rental transaction-history fields to saved records.true
limitintegerMaximum 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

{
"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

{
"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

{
"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

{
"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.