iProperty MY Scraper - Properties, Prices, Agents & Photos avatar

iProperty MY Scraper - Properties, Prices, Agents & Photos

Pricing

from $1.00 / 1,000 listing results

Go to Apify Store
iProperty MY Scraper - Properties, Prices, Agents & Photos

iProperty MY Scraper - Properties, Prices, Agents & Photos

Scrape property listings from iProperty.com.my for sale or rent: price, PSF, bedrooms, bathrooms, floor area, tenure, property type, full address, agent (name, license, agency, contact numbers) and photo gallery. Search and URL modes, filters, 8 sort orders, and optional detail enrichment.

Pricing

from $1.00 / 1,000 listing results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

a day ago

Last modified

Share

iProperty.com.my Scraper

Pull structured property listings from iProperty.com.my at scale. Search by channel (for sale or for rent), location and filters, or paste any iProperty.com.my search or listing URL, and get a clean record per property with price, price type, price-per-square-foot, bedrooms, bathrooms, floor area, tenure, property type, the full address with region / district / area, the photo gallery, the listing agent (name, license, verified status, profile) and agency, and the aggregate agent rating. Two modes (search and URL), 8 sort orders, and location, property-type, price and bedroom filters. An optional detail pass adds the full property description, map coordinates, and the listing agent's contact numbers.

Why This Scraper?

  • ~50 fields per listing, including price type (e.g. Negotiable), price-per-square-foot, tenure, the full photo gallery and the agent / agency profile.
  • Two ways in: build a search from channel + location + filters, or paste search and listing URLs directly. Filter fields are ignored in URL mode so pasted links are used as-is.
  • 8 sort orders (price, date, bedrooms, built-up size) and location, property-type, price and bedroom filters.
  • Optional detail enrichment adds the full property description, the map coordinates (latitude / longitude), and the listing agent's contact numbers.
  • One simple cap: set Max items and the run stops there once enough results are collected.
  • Export results straight into Notion, Linear, Airtable or Apify via MCP connectors, without touching the dataset.

A note on agent reviews

iProperty.com.my does not publish per-comment agent reviews on its public pages. There is no list of individual review texts to scrape. The only review signal the public site exposes is an aggregate agent rating, returned here as agentRating with reviewCount and ratingAverage (these are commonly 0). This scraper returns that aggregate and does not invent per-comment reviews.

The listing agent's direct phone number is gated behind an on-page verification step and is not present in the page data, so agent.phone is intentionally left out rather than guessed.

Data You Get

Sample shape - values are illustrative placeholders, not from a live listing.

FieldExample
listingId501630772
titleTaman Wawasan, Puchong
propertyType2-storey Terraced House
priceValue750000
pricePrettyRM 750,000
priceTypeNegotiable
psfRM 535.71 psf
bedrooms4
bathrooms3
floorArea1800
tenureFreehold
fullAddressJalan Wawasan, Taman Wawasan, Puchong, Selangor
agent.nameExample Agent
agent.licenseREN 00000
agency.nameExample Realty Sdn. Bhd.
agentRating{ reviewCount: 0, ratingAverage: 0 }
imageCount6
thumbnailhttps://example-cdn/listing/501630772/thumb.jpg
urlhttps://www.iproperty.com.my/property/puchong/taman-wawasan/sale-501630772/

Detail fields (when Fetch full details is on): description, latitude, longitude, agentPhone, agentContacts.

How to Use

Search for sale in a location:

{
"mode": "search",
"channel": "sale",
"location": "kuala-lumpur",
"sortBy": "price_asc",
"maxItems": 50
}

Filter by price and bedrooms:

{
"mode": "search",
"channel": "sale",
"priceMin": 300000,
"priceMax": 800000,
"bedrooms": 3,
"maxItems": 100
}

Paste iProperty.com.my URLs (filters ignored):

{
"mode": "url",
"urls": [
"https://www.iproperty.com.my/property-for-rent"
],
"fetchDetails": true,
"maxItems": 80
}

Input Parameters

ParameterTypeDescription
modestringsearch (build a search from channel + location + filters) or url (use pasted URLs).
channelstringsale or rent.
locationstringOptional location slug to narrow the search. Empty = whole country.
propertyTypestringOptional property-type filter.
priceMinintegerMinimum price (MYR).
priceMaxintegerMaximum price (MYR).
bedroomsintegerMinimum number of bedrooms.
sortBystringOne of 8 sort orders (price, date, bedrooms, built-up size).
urlsarrayiProperty.com.my search or listing URLs (URL mode).
fetchDetailsbooleanVisit each listing page for the full description, map coordinates and agent contact numbers.
maxItemsintegerThe single cap on the run. 0 = unlimited. Default 20.
maxPagesintegerOptional safety bound on pages per search. Empty = unlimited; the run stops at Max items.
proxyobjectProxy configuration. Apify Residential recommended.
maxResidentialMBintegerResidential traffic budget in MB. Caps how much residential traffic a run may use; the run keeps working as long as the site still serves results. 0 = unlimited.
resumeFromRunIdstringContinue one specific interrupted run — paste a previous run or dataset ID and this run skips listings already collected there.
incrementalModebooleanTurn this on for daily/recurring monitoring of the same search. The first run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default.
stateKeystringOptional. Name a monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty for an automatic key derived from the search/URL and detail settings.
emitUnchangedbooleanOff by default. Also return UNCHANGED listings (incremental mode) — returns and bills extra rows you already have.
emitExpiredbooleanOff by default. Also return EXPIRED listings no longer found since the last run (incremental mode) — only produced after a complete, non-resumed, non-capped scan. Returns and bills extra synthetic rows.
mcpConnectorsarrayOptional MCP connectors to pipe results into (Notion, Linear, Airtable, Apify).
notionParentPageUrlstringNotion parent page URL/id for the Notion connector.
maxNotifyListingsintegerCap on items written to each connector per run.

Resume & recurring updates

Two different features, both optional:

  • Resume (resumeFromRunId) continues one specific interrupted crawl: paste a previous run or dataset ID and this run skips every listing already collected there. No state is kept between unrelated runs.
  • Incremental mode (incrementalMode) is for scheduling this same search daily/weekly and getting only what changed. The actor remembers its own baseline for the search (keyed by stateKey, or an automatic key derived from the search/URL and detail settings) and classifies every listing as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED. By default only NEW/UPDATED/REAPPEARED listings return; turn on emitUnchanged/emitExpired to also get those (both return — and bill — extra rows). EXPIRED listings are only produced after a run that scanned its full search with no cap hit and no Resume.

Output then carries changeType, changedFields, firstSeenAt, and lastSeenAt. Change detection ignores scrapedAt/scraped_at (per-run timestamps) and searchMetadata (search-relative), and it ignores fields that only exist once the optional detail fetch has run — description, latitude, longitude, agentContacts, agentPhone, and the full images/imageCount gallery — since none of those can be compared across runs where detail fetching was toggled on or off. recency (e.g. "Listed on Aug 05, 2026 (55s ago)") is normalised, not ignored: the trailing (... ago) relative-age clock is stripped before comparison so it never re-triggers UPDATED on its own, but a genuine change to the listed date still does. Price, bedrooms, bathrooms, floor area, address, and every other core field do trigger UPDATED when they change.

Send results into your apps (MCP connectors)

Optionally pipe each run's results into the tools you already use through Model Context Protocol (MCP) connectors. Authorize a connector under Apify, Settings, API & Integrations, then select it in mcpConnectors. Notion receives a rich page per listing (set notionParentPageUrl); Linear, Airtable and Apify get a best-effort write or digest. The MCP export never changes the dataset and never fails the run; maxNotifyListings caps how many items go to each connector.

Output Example

Sample shape - values are illustrative placeholders, not from a live listing.

{
"listingId": 501630772,
"url": "https://www.iproperty.com.my/property/puchong/taman-wawasan/sale-501630772/",
"title": "Taman Wawasan, Puchong",
"propertyType": "2-storey Terraced House",
"typeText": "For Sale",
"price": { "value": 750000, "pretty": "RM 750,000", "currency": "MYR", "type": "Negotiable" },
"priceValue": 750000,
"pricePerArea": "RM 416.67 psf",
"psf": "RM 535.71 psf",
"bedrooms": 4,
"bathrooms": 3,
"floorArea": 1800,
"tenure": "Freehold",
"location": { "area": "Taman Wawasan", "district": "Puchong", "region": "Selangor" },
"fullAddress": "Jalan Wawasan, Taman Wawasan, Puchong, Selangor",
"agent": { "id": 0, "name": "Example Agent", "license": "REN 00000", "isVerified": true, "profileUrl": "https://www.iproperty.com.my/property-agent/example-0/" },
"agency": { "id": 0, "name": "Example Realty Sdn. Bhd." },
"agentRating": { "reviewCount": 0, "ratingAverage": 0 },
"images": ["https://example-cdn/listing/501630772/photo-1.jpg"],
"imageCount": 6,
"thumbnail": "https://example-cdn/listing/501630772/thumb.jpg",
"description": "Full property description (when Fetch full details is on).",
"latitude": 3.04,
"longitude": 101.62,
"source": "iproperty.com.my",
"scrapedAt": "2024-01-01T00:00:00+00:00"
}

Plan Requirement

Runs on any Apify plan. This site serves best on residential connections, so set the proxy to Apify Residential for reliable results (Residential access is included on the Starter plan and higher). Datacenter and free-tier connections are commonly rejected and will return zero items; if you run on datacenter, a free tier or a non-residential connection the run logs a warning before spending compute.

Reliability

  • Built for resilient, unattended runs: transient errors are recovered automatically so a run keeps working without manual intervention.
  • Residential traffic budget: set maxResidentialMB to cap residential spend. The run keeps returning results as long as the site still serves them, and will not silently drop to zero. 0 = unlimited.