Realestate.com.kh Scraper | Cambodia Property Listings avatar

Realestate.com.kh Scraper | Cambodia Property Listings

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Realestate.com.kh Scraper | Cambodia Property Listings

Realestate.com.kh Scraper | Cambodia Property Listings

Scrape Cambodia's #1 property portal realestate.com.kh. Houses, condos, land & villas in Phnom Penh & Siem Reap. USD prices, Hard/Strata Title, Borey filter & foreign-eligible listings.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Realestate.com.kh Scraper — Cambodia Property Listings, Phnom Penh Condos, Siem Reap Villas & Sihanoukville Investor Data

The most complete Realestate.com.kh data extraction tool on Apify. Pull live Cambodia property listings — houses, condos, villas, land, shophouses, commercial and Borey gated-community projects — directly from Cambodia's #1 property portal. USD prices, Hard / Soft / Strata Title status, commune-level location, agency contacts, coordinates and full image galleries — structured and ready for foreign-investor research, expat relocation, condo pre-sale comps, hotel acquisition due diligence and Cambodia real estate market intelligence.

Apify Actor


What This Actor Does

The Realestate.com.kh Scraper is a production-ready Apify Actor that extracts structured property listings from realestate.com.kh — Cambodia's largest and most trusted English-language property portal, owned by the Digital Classifieds Group and used by virtually every international real estate agency operating in the Kingdom.

Cambodia is one of Southeast Asia's most foreign-friendly property markets — listings are priced in US dollars, condominium ownership is open to foreigners (above ground floor), Phnom Penh's BKK1 district hosts dense expat condo developments, Sihanoukville is reshaping itself around Chinese investor capital, and Siem Reap remains a tourism-driven villa and boutique hotel market. Realestate.com.kh aggregates listings across all of these markets in one searchable inventory, and this actor turns that inventory into a clean JSON dataset.

In a single run the actor returns structured records covering:

  • Houses & Link Houses — single-family and terraced housing across Phnom Penh, Siem Reap, Battambang and provincial markets
  • Condominiums — the booming Phnom Penh condo segment (BKK1, Tonle Bassac, Toul Kork, Daun Penh, Chamkarmon) and Sihanoukville beachfront towers
  • Villas & Twin Villas — high-end residential product in Chamkarmon, Toul Kork and Borey-style gated estates
  • Land — Hard Title and Soft Title plots, vital for developers, hotel acquisitions and agricultural buyers
  • Shophouses — the iconic Cambodian commercial-residential hybrid, dense in Phnom Penh's commercial corridors
  • Commercial — office, retail and mixed-use rental and sale stock
  • Borey projects — gated, master-planned community housing (a uniquely Cambodian asset class)
  • New Developments — pre-sale and off-plan condo, villa and Borey projects with developer-level data

Every record carries the listing's USD price, bedrooms / bathrooms, floor and land area in square metres, commune / district / province location, listing URL, and (when detail-page scraping is enabled) Hard / Soft / Strata Title status, agency name, contact phone, map coordinates, full image gallery, features list and the description. That makes it the fastest way to build or refresh a Cambodia real estate dataset for foreign-investor due diligence, expat relocation tooling, condo comps, hotel and resort M&A research, or Khmer-market analytics.


Why scrape Realestate.com.kh yourself when this exists?

Realestate.com.kh is a modern Next.js application with server-side rendering, JSON-blob hydration via __NEXT_DATA__, lazy-loaded image galleries, and a non-trivial URL taxonomy that mixes commune slugs, bed/bath counts and property-type tokens into a single path. Most teams who try a DIY scrape hit the same wall:

  • The site renders cards in Next.js SSR — naive BeautifulSoup/requests scripts get partial data because key fields live in the __NEXT_DATA__ JSON blob, not in the visible HTML
  • Detail pages bury the title type (Hard / Soft / Strata / LMAP), agency, original ID, listed-on date and coordinates in a deeply nested pageProps.cacheData.listing.data structure that changes shape across listing types
  • The URL pattern /buy/{commune}/{N}-bed-{M}-bath-{type}-{id}/ looks predictable but breaks for studios, land, and commercial listings which have no bed/bath segment
  • Relative dates ("3 weeks ago", "6 months ago") need to be parsed and normalised against now() to be useful in a database
  • Cambodian location data has three levels — commune (sangkat) / district (khan) / province — and the address string concatenates them inconsistently
  • USD price strings include $, ,, + ribbons and discount badges that have to be stripped before the number is usable
  • Pagination is straightforward ?page=N until you hit the dynamic infinite-scroll boundary and your simple loop never stops
  • Borey project names (gated community brand names like "Borey Peng Huoth", "Borey Vimean Phnom Penh") appear only on detail pages, not in the listing cards
  • Image URLs sit behind a CDN (images.realestate.com.kh) with multiple size variants — picking the right one needs domain knowledge
  • Pre-sale condo and Borey "new development" listings have a different schema again — project-level not unit-level — and most DIY scripts silently drop them
  • Rate-limiting is gentle but does kick in over a few hundred sequential requests without backoff
  • Maintaining all of this for the next six months while the Next.js bundle hash changes weekly is a part-time job nobody on your team signed up for

This actor solves every one of those problems: it tries __NEXT_DATA__ first, falls back to DOM parsing, normalises USD prices, parses relative dates, splits commune / district / province, dedupes by listing ID, follows pagination cleanly, and yields uniform records ready for Postgres, BigQuery, Sheets, Power BI or your CRM — no Cheerio glue code, no Next.js reverse engineering, no proxy plumbing.


Quick Start

One-Click Run

  1. Click "Try for free" on the Apify Store page
  2. Pick a listingType (buy / rent / new-developments / all), a propertyType (e.g. condo, villa, land, borey) and add city slugs to cities (e.g. ["phnom-penh", "siem-reap"])
  3. Hit Start — the actor scrapes the search result pages, paginates automatically, and writes structured listings to your dataset
  4. Download as JSON, CSV, Excel, HTML, XML, RSS or JSON Lines straight from the Apify dataset view, or pull it via the dataset API into your data pipeline

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/realestate-com-kh-scraper").call(run_input={
"listingType": "buy",
"propertyType": "condo",
"cities": ["bkk-1", "tonle-bassac", "toul-kork"],
"scrapeDetails": True,
"maxRecords": 500,
"requestDelay": 1500,
"proxyConfiguration": {"useApifyProxy": True}
})
for record in client.dataset(run["defaultDatasetId"]).iterate_items():
print(
record["propertyId"],
record["title"],
f"${record['price']:,}" if record.get("price") else "POA",
f"{record.get('bedrooms') or '-'}br",
record.get("commune"),
record.get("titleType") or "—",
)

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/realestate-com-kh-scraper').call({
listingType: 'buy',
propertyType: 'villa',
cities: ['siem-reap', 'sihanoukville'],
scrapeDetails: true,
maxRecords: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Pulled ${items.length} villas across Siem Reap and Sihanoukville`);
for (const v of items.slice(0, 5)) {
console.log(`${v.title} — $${v.price?.toLocaleString() ?? 'POA'}${v.commune}, ${v.province}`);
}

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~realestate-com-kh-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"listingType": "rent",
"propertyType": "apartment",
"cities": ["bkk-1", "chamkarmon", "daun-penh"],
"maxRecords": 300,
"scrapeDetails": false
}'

Direct URL Mode (skip filters)

If you already have a curated set of Realestate.com.kh search URLs from your own market research, drop them straight into startUrls:

{
"startUrls": [
"https://www.realestate.com.kh/buy/phnom-penh/condo/",
"https://www.realestate.com.kh/buy/sihanoukville/",
"https://www.realestate.com.kh/rent/siem-reap/villa/",
"https://www.realestate.com.kh/new-developments/phnom-penh/"
],
"scrapeDetails": true,
"maxRecords": 0
}

When startUrls is set, the listingType, propertyType and cities filters are ignored — your URLs take precedence.


How It Works

The actor combines got-scraping (HTTP with realistic browser fingerprinting) + Cheerio (HTML parsing) + a JSON-blob extractor that hooks into Next.js's __NEXT_DATA__ hydration script. Because Realestate.com.kh is fully server-rendered, no headless browser is required — which keeps runs fast, cheap, and reliable.

Source endpoints

Endpoint patternExampleWhat it returns
/buy/{city}/{type}/?page={n}/buy/phnom-penh/condo/?page=2Paginated condos for sale
/rent/{city}/{type}/?page={n}/rent/bkk-1/apartment/?page=1Paginated rentals in a commune
/new-developments/{city}/?page={n}/new-developments/phnom-penh/Off-plan / pre-sale projects
/buy/{commune}/{N}-bed-{M}-bath-{type}-{id}//buy/toul-kork/3-bed-3-bath-villa-12345/Individual detail page
script#__NEXT_DATA__embedded in every pageHydrated JSON state (richest source)

Extraction strategy

  1. List page — request HTML, try __NEXT_DATA__ for structured listings first, fall back to DOM card parsing (a[href*="/buy/"] / a[href*="/rent/"] selectors with regex extraction of price, beds, baths and area)
  2. URL parsing/buy/{commune}/{N}-bed-{M}-bath-{type}-{id}/ is regex-parsed to recover commune, bed/bath count, property type and listing ID even when the card markup is sparse
  3. Detail page (optional, set scrapeDetails: true) — request the listing URL, parse pageProps.cacheData.listing.data for title type, agency, original reference ID, features groups, security & amenities, mainContent description, showCase images, dataGraph coordinates and profile contact info
  4. Pagination — increment ?page=N until the response yields zero new listings or maxPages / maxRecords is hit
  5. Deduplication — every record is keyed on propertyId (falling back to listingUrl) so the same listing is never written twice across cities or pages
  6. USD price parser — strips $, commas and flag suffixes (POA, Reduced, +) so prices land in your dataset as clean floats
  7. Relative date parser"3 weeks ago", "6 months ago" etc. become real ISO-8601 timestamps anchored at run time
  8. Location parser — splits "Boeng Keng Kang 1, Chamkar Mon, Phnom Penh" into commune / district / province
  9. Retry & backoff — 429s trigger exponential backoff (5s × attempt), non-200 responses retry up to 3 times with linear backoff
  10. Proxy session rotation — each request rotates an Apify residential proxy session (session-rkh{N}) so a single long run won't burn the same IP

Input Parameters

{
"startUrls": [],
"listingType": "buy",
"propertyType": "condo",
"cities": ["bkk-1", "tonle-bassac"],
"scrapeDetails": true,
"maxRecords": 500,
"maxPages": 0,
"requestDelay": 1500,
"proxyConfiguration": { "useApifyProxy": true }
}

Parameter reference

ParameterTypeDefaultDescription
startUrlsarray<string | object>[]Direct Realestate.com.kh search URLs. When set, all other filters are ignored.
listingTypestringbuyOne of buy, rent, new-developments, all.
propertyTypestringallall, house, condo, apartment, villa, land, shophouse, commercial, borey.
citiesarray<string>[]City or commune slugs as used in the site URL (e.g. phnom-penh, siem-reap, sihanoukville, bkk-1, tonle-bassac, toul-kork, chamkarmon, daun-penh). Empty array = all Cambodia.
scrapeDetailsbooleanfalseWhen true, visits each listing's detail page to extract title type (Hard / Soft / Strata), agency, contact phone, coordinates, full image gallery, features, amenities and the description via __NEXT_DATA__. Slower, much richer.
maxRecordsinteger0Cap on total listings saved. 0 = unlimited.
maxPagesinteger0Cap on pages per search URL. 0 = unlimited.
requestDelayinteger1000Milliseconds between requests. 10002000 recommended. Min 500, max 10000.
proxyConfigurationobject{ "useApifyProxy": true }Apify proxy config — residential is the default and recommended group. The site is not aggressive about bot detection but proxies help on larger runs.

Tip: Set scrapeDetails: false for fast inventory scans (price / beds / area / commune only) and scrapeDetails: true when you need title type, agency, contact phone, coordinates or amenities for downstream enrichment.


Output Schema

Every record uses the same flat JSON shape regardless of property type or listing type, so downstream consumers (databases, BI tools, CRMs) can ingest the entire dataset without per-category branching.

Core fields

FieldTypeDescription
propertyIdinteger | nullNumeric Realestate.com.kh listing ID
originalIdstring | nullAgency's internal reference ID (when published)
titlestring | nullListing headline
listingTypestring | nullFor Sale, For Rent or New Development
propertyTypestring | nullCondo, House, Villa, Apartment, Land, Shophouse, Commercial, Borey, Link House, Twin Villa, Studio, Penthouse, Flat
titleTypestring | nullHard Title, Soft Title, Strata Title or LMAP (detail page only)
listingUrlstring | nullCanonical detail-page URL

Pricing fields (USD)

FieldTypeDescription
pricenumber | nullCurrent asking / rent price in USD
originalPricenumber | nullPre-discount price when the listing carries a discount ribbon
discountPercentnumber | nullDiscount percentage when published
currencystring | nullAlways USD — Cambodia residential listings are USD-denominated
priceFlagsarray | nullRibbons / badges (Reduced, Hot Property, Featured, etc.)

Property attributes

FieldTypeDescription
bedroomsinteger | nullBedroom count
bathroomsinteger | nullBathroom count
floorAreanumber | nullInterior / built-up size in square metres (m²)
landAreanumber | nullPlot size in square metres (m²) — primarily for land, villas and houses
facingstring | nullCompass facing direction (e.g. North, South-East) when published
featuresarray | nullProperty feature labels (Balcony, Open Kitchen, River View, Maid's Quarters etc.)
amenitiesarray | nullBuilding/Borey amenity labels (Swimming Pool, Gym, Sauna, 24-Hour Security, Underground Parking)

Location fields

FieldTypeDescription
communestring | nullSangkat name (e.g. Boeng Keng Kang Ti Muoy, Tonle Bassac, Toul Kork)
districtstring | nullKhan name (e.g. Chamkar Mon, Daun Penh, 7 Makara)
provincestring | nullProvince / city name (Phnom Penh, Siem Reap, Preah Sihanouk, Battambang, Kampot, Kep, Kandal)
boreystring | nullBorey (gated community) project name when the listing is inside one
coordinatesobject | null{ "lat": 11.5564, "lng": 104.9282 } GPS coordinates

Agency & contact

FieldTypeDescription
agencyNamestring | nullListing agency or agent name
contactPhonestring | nullPublished contact phone for the agent / agency

Content & media

FieldTypeDescription
descriptionstring | nullFull listing description (detail page only)
imagesarray<string> | nullImage URLs from the gallery (images.realestate.com.kh CDN)

Timestamps

FieldTypeDescription
listedAtstring | nullISO-8601 — when the listing was first published (computed from the site's relative date)
updatedAtstring | nullISO-8601 — when the listing was last edited
scrapedAtstring | nullISO-8601 — when this actor pulled the record

Example: Phnom Penh condo for sale

{
"propertyId": 1283456,
"originalId": "REKH-PP-CON-0042",
"title": "2-Bedroom Condo with River View in Tonle Bassac",
"listingType": "For Sale",
"propertyType": "Condo",
"titleType": "Strata Title",
"price": 215000,
"originalPrice": 235000,
"discountPercent": 8.5,
"currency": "USD",
"priceFlags": ["Reduced", "Featured"],
"bedrooms": 2,
"bathrooms": 2,
"floorArea": 78.5,
"landArea": null,
"facing": "South-East",
"commune": "Tonle Bassac",
"district": "Chamkar Mon",
"province": "Phnom Penh",
"borey": null,
"features": ["Balcony", "River View", "Open Kitchen", "Furnished"],
"amenities": ["Swimming Pool", "Gym", "24-Hour Security", "Underground Parking", "Elevator"],
"agencyName": "IPS Cambodia",
"contactPhone": "+855 12 345 678",
"description": "Modern 2-bed condo on the 18th floor with unobstructed views over the Tonle Bassac and Mekong rivers...",
"images": [
"https://images.realestate.com.kh/listings/1283456/main.jpg",
"https://images.realestate.com.kh/listings/1283456/02.jpg"
],
"coordinates": { "lat": 11.5471, "lng": 104.9301 },
"listingUrl": "https://www.realestate.com.kh/buy/tonle-bassac/2-bed-2-bath-condo-1283456/",
"listedAt": "2026-04-19T00:00:00.000Z",
"updatedAt": "2026-05-08T00:00:00.000Z",
"scrapedAt": "2026-05-16T10:42:11.000Z"
}

Example: Siem Reap villa for rent

{
"propertyId": 998877,
"originalId": null,
"title": "4-Bedroom Pool Villa near Wat Bo, Siem Reap",
"listingType": "For Rent",
"propertyType": "Villa",
"titleType": "Hard Title",
"price": 1800,
"currency": "USD",
"priceFlags": null,
"bedrooms": 4,
"bathrooms": 4,
"floorArea": 320,
"landArea": 600,
"commune": "Sala Kamreuk",
"district": "Siem Reap",
"province": "Siem Reap",
"borey": null,
"features": ["Private Pool", "Garden", "Western Kitchen", "Furnished"],
"amenities": ["24-Hour Security", "Parking", "Garden"],
"agencyName": "Angkor Properties",
"contactPhone": "+855 17 999 888",
"coordinates": { "lat": 13.3536, "lng": 103.8616 },
"listingUrl": "https://www.realestate.com.kh/rent/sala-kamreuk/4-bed-4-bath-villa-998877/",
"scrapedAt": "2026-05-16T10:42:14.000Z"
}

Listing Type Reference

ValueSite SectionMeaning
buy/buy/Properties for sale (resale and pre-sale)
rent/rent/Long-term rentals — apartments, condos, villas, shophouses, commercial
new-developments/new-developments/Off-plan / pre-sale projects with developer-level information
allcombinedScrapes buy + rent sequentially

Property Type Reference

ValueKhmer Market Note
houseSingle-family or link house; common across Phnom Penh outskirts and provinces
condoThe dominant foreign-buyer asset class — high-rise condominiums (Strata Title)
apartmentLong-term rental apartments, primarily in BKK1, BKK3, Toul Kork and Chamkarmon
villaDetached or twin villa — Toul Kork, Chamkarmon and Borey gated estates
landLand plots (Hard / Soft Title); critical for developers and hotel buyers
shophouseThe classic Cambodian commercial-residential row building
commercialOffice, retail and mixed-use commercial inventory
boreyGated, master-planned community housing — a uniquely Cambodian asset

Title Type Reference

Cambodia's land-title system is unique in Southeast Asia and is the single biggest factor in foreign-investor due diligence.

Title TypeForeign-Eligible?Description
Hard TitleLocal nationals only (land)National-level title issued by the Ministry of Land Management. Strongest legal protection.
Soft TitleLocal nationals onlyDistrict / commune-level title. Most common historically; weaker than Hard Title.
Strata TitleYes (foreigners)Co-ownership title for condominium units above the ground floor — the only title type foreigners may directly own.
LMAPLocal nationals onlyLand Management and Administration Project — modernised systematic title; effectively equivalent to Hard Title.

Foreigners can lease Hard / Soft Title properties (up to 50 years renewable) or hold via a Cambodian-majority landholding company / nominee structure. Strata Title condos are the cleanest direct-ownership path.


Use Cases

Foreign Investor Property Research

International investors weighing Cambodia exposure use this dataset to:

  • Filter by titleType: Strata Title to isolate foreign-eligible condominium stock
  • Map condo pricing per square metre across BKK1, Tonle Bassac, Toul Kork, Daun Penh and Chamkarmon to spot under-priced micro-markets
  • Compare resale vs pre-sale prices in the same building (run once with listingType: buy, once with listingType: new-developments)
  • Track yield potential by joining buy and rent runs for the same commune to calculate gross rental yield
  • Build a deal-flow alert pipeline by scheduling daily runs and diffing against the previous day for new listings, price drops or status changes

Chinese Investor & Sihanoukville Market Intelligence

Sihanoukville's transformation around Chinese capital, casino and hotel development is one of the most dramatic real estate stories in Asia. Funds, family offices and journalists use this dataset to:

  • Monitor Sihanoukville inventory in real timecities: ["sihanoukville"] returns the full active stock
  • Track price recovery / decline through monthly snapshots after the post-online-gambling-ban correction
  • Identify distressed assets by filtering for priceFlags: ["Reduced"] or large discountPercent values
  • Map coastal commune coverage — Buon, Pir, Bei, Otres, Independence Beach — using commune field
  • Trace agency / developer activity through the agencyName field on detail pages

Expat & Digital Nomad Relocation

Relocation services, expat-focused property platforms and digital-nomad communities (Hacker Paradise, NomadList, Outsite) consume this dataset to:

  • Curate Phnom Penh rentals in BKK1, BKK3, Tonle Bassac, Toul Kork and Chamkarmon — the expat heartland
  • Filter furnished apartments under $X / month for short-stay nomads
  • Surface Siem Reap pool villas for remote workers wanting Angkor-adjacent lifestyle
  • Highlight Kep and Kampot rentals for the slow-travel / lifestyle segment
  • Enrich relocation guides with current price data per neighbourhood and property type

Condominium Pre-Sale & Resale Comps

Developers, valuers, brokers and pre-sale resellers use the dataset to:

  • Build per-building price-per-m² benchmarks by grouping listings on borey / project name
  • Compare pre-sale (off-plan) pricing in new-developments against equivalent resale condos
  • Identify under-priced units in projects where multiple listings exist
  • Track absorption rate — count active listings per project over time
  • Power valuation models with floor area, bed count, district and amenities as features

Hotel, Resort & Boutique Acquisition Due Diligence

Hospitality investors evaluating Cambodia entry — Phnom Penh boutique, Siem Reap riad-style, Kampot waterfront, Kep oyster-coast, Sihanoukville beachfront — use this dataset to:

  • Source acquisition targets by filtering propertyType: commercial or propertyType: villa with high landArea
  • Build market comps for hotel valuation in tertiary markets
  • Identify land plots suitable for greenfield development with titleType: Hard Title filter
  • Track listed inventory turnover as a market-health indicator
  • Cross-reference agency footprints to identify dominant local advisors

Borey & Gated-Community Market Analytics

Cambodia's Borey segment (Peng Huoth, Vimean Phnom Penh, Chip Mong, Williams Land, Maha Sen Sok, etc.) is a uniquely local asset class. Borey developers, secondary-market brokers and lenders use this dataset to:

  • Inventory active Borey listings per project using the borey field
  • Benchmark pricing of Link Houses, Twin Villas and Queen Villas within and across Borey brands
  • Monitor secondary-market activity for primary-sale developers measuring after-market liquidity
  • Power loan-to-value models for mortgage providers underwriting Borey purchases
  • Track new Borey launches via listingType: new-developments + propertyType: borey

Real Estate Tech & Proptech Builders

Cambodian and regional proptech startups (rental marketplaces, mortgage calculators, valuation AVMs, virtual-tour platforms) use the dataset to:

  • Bootstrap inventory without negotiating direct partnerships with every agency
  • Train ML models on title type, location, area and price to predict valuations
  • Power "compare similar listings" features inside their own apps
  • Build neighbourhood pages with live counts of active rentals / sales per commune
  • Detect duplicate listings across agencies for inventory hygiene

Market Research, Macro & Journalism

Bloomberg, Nikkei Asia, Khmer Times, Phnom Penh Post stringers and macro analysts at HSBC, Knight Frank, CBRE and Colliers use Realestate.com.kh as the de-facto Cambodia property barometer:

  • Quantify listing volume trends as a leading indicator of market sentiment
  • Track median asking price per commune for quarterly reports
  • Monitor foreign-vs-local share by filtering on Strata Title proportion
  • Visualise the BKK1 condo pipeline via new-developments runs
  • Investigate Sihanoukville recovery with longitudinal pricing snapshots

Compliance, AML & Sanctions Screening

Banks, escrow providers and law firms supporting Cambodia real estate transactions use the dataset for:

  • Beneficial-ownership research by aggregating which agencies handle high-value listings
  • Source-of-funds documentation support with verifiable market-rate price comps
  • Suspicious-pricing detection — listings priced wildly above or below market may indicate value-transfer mechanisms
  • Cross-border KYC for Chinese, Vietnamese, Korean and Singaporean buyers

Academic & Development Economics Research

Universities (RUPP, Pannasastra, NUS, Sciences Po), the World Bank, ADB and OECD use Cambodia real estate microdata to:

  • Study urbanisation and gentrification in Phnom Penh communes
  • Quantify foreign-capital footprint in Sihanoukville and BKK1
  • Research land titling reform through observable Hard / Soft / Strata distribution
  • Inform housing-affordability policy with market-asking-price baselines
  • Track post-pandemic tourism recovery through Siem Reap and coastal listing activity

Sample Queries & Recipes

Recipe 1 — All Phnom Penh condos for sale, full detail

Foreign-investor inventory scan with full Hard / Strata Title, agency, coordinates and amenities.

{
"listingType": "buy",
"propertyType": "condo",
"cities": ["phnom-penh"],
"scrapeDetails": true,
"maxRecords": 0
}

Recipe 2 — BKK1 furnished apartments for rent (expat / nomad)

{
"listingType": "rent",
"propertyType": "apartment",
"cities": ["bkk-1", "bkk-3", "tonle-bassac"],
"scrapeDetails": true,
"maxRecords": 300
}

Recipe 3 — Sihanoukville distressed-asset sweep

{
"listingType": "buy",
"propertyType": "all",
"cities": ["sihanoukville"],
"scrapeDetails": true,
"maxRecords": 0
}

Then filter downstream for distress signals:

distressed = [
r for r in records
if (r.get("discountPercent") or 0) >= 10
or "Reduced" in (r.get("priceFlags") or [])
or (r.get("price") and r["price"] < 50000 and r.get("propertyType") == "Condo")
]

Recipe 4 — Siem Reap pool villas (lifestyle / boutique hotel scouting)

{
"listingType": "buy",
"propertyType": "villa",
"cities": ["siem-reap"],
"scrapeDetails": true
}

Recipe 5 — Pre-sale / off-plan project intelligence

{
"listingType": "new-developments",
"propertyType": "all",
"cities": ["phnom-penh", "sihanoukville"],
"scrapeDetails": true
}

Recipe 6 — Cambodia-wide land for sale (Hard Title only after filter)

{
"listingType": "buy",
"propertyType": "land",
"cities": [],
"scrapeDetails": true,
"maxRecords": 0
}

Post-filter for Hard Title only:

hard_title_land = [r for r in records if r.get("titleType") == "Hard Title"]

Recipe 7 — Toul Kork & Chamkarmon villa comps

{
"listingType": "buy",
"propertyType": "villa",
"cities": ["toul-kork", "chamkarmon"],
"scrapeDetails": true
}

Recipe 8 — Quick 50-record sample run

{
"listingType": "buy",
"propertyType": "condo",
"cities": ["bkk-1"],
"maxRecords": 50,
"scrapeDetails": false
}

Integration Examples

Google Sheets (via Apify Integration)

  1. Schedule the actor daily at 7:00 AM Phnom Penh time (0 0 * * * UTC)
  2. Add the "Save to Google Sheets" integration to the schedule
  3. Get a fresh Cambodia condo / villa / land sheet every morning — perfect for brokerage dashboards or investor weekly updates

Make.com / Zapier / n8n

The Apify connector is available on every major automation platform. Trigger downstream workflows on:

  • New listings — diff today's run against yesterday's, push a Slack alert for any condo under $150K in BKK1
  • Price drops — fire a CRM task when a watched listing's price falls
  • Status flips — alert when an active listing disappears (likely sold)
  • Agency activity spikes — email a weekly digest of top-5 agencies by new-listing count

Power BI / Tableau / Looker / Metabase

Point your BI tool at the Apify dataset REST endpoint. Refresh nightly. Build dashboards covering:

  • Median USD/m² by commune over time
  • Phnom Penh BKK1 vs. Tonle Bassac condo absorption rates
  • Sihanoukville inventory and pricing trend (post-2019 baseline)
  • New-development project pipeline by developer
  • Borey market activity heat-map

Postgres / Snowflake / BigQuery

Use Apify's webhook integration to POST run results to your warehouse ingestion endpoint after every scheduled run, or pull via the dataset API:

import psycopg2
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
conn = psycopg2.connect("postgresql://user:pass@host/cambodia_re")
run = client.actor("haketa/realestate-com-kh-scraper").last_run(status="SUCCEEDED")
for r in client.dataset(run["defaultDatasetId"]).iterate_items():
conn.cursor().execute("""
INSERT INTO listings (property_id, title, price_usd, commune, province, listing_type, title_type, scraped_at)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
ON CONFLICT (property_id) DO UPDATE
SET price_usd = EXCLUDED.price_usd, scraped_at = EXCLUDED.scraped_at;
""", (r["propertyId"], r["title"], r["price"], r["commune"], r["province"],
r["listingType"], r["titleType"], r["scrapedAt"]))
conn.commit()

Salesforce / HubSpot CRM Enrichment

Trigger a nightly run filtered to your sales territory (e.g. cities: ["bkk-1", "toul-kork"]), then upsert against Account records keyed on agencyName. Property price changes can auto-create Tasks or trigger nurture workflows for active investor leads.

QGIS / Mapbox / Kepler.gl

coordinates makes every listing instantly mappable. Drop the dataset JSON into Kepler.gl for a one-click interactive Phnom Penh price heat-map; render in QGIS for cartography-quality output for investor decks and IM (information memorandum) documents.


Major Cambodian Markets Covered

Province / CityHeadline Communes / AreasMarket Note
Phnom PenhBKK1, BKK3, Tonle Bassac, Toul Kork, Daun Penh, Chamkarmon, 7 Makara, Russey Keo, Sen SokCapital & dominant condo / commercial market — the foreign-investor centre of gravity
Siem ReapSala Kamreuk, Svay Dangkum, Sla Kram, Chreav, Kouk ChakTourism & boutique hospitality — Angkor Wat-driven villa and guesthouse market
Sihanoukville (Preah Sihanouk)Buon, Pir, Bei, Otres, Independence Beach, ReamCoastal / casino / Chinese-investor market, condo and beachfront stock
BattambangSvay Por, Rattanak, Tomnob Tek PosCambodia's second city — affordable, agricultural-region commercial hub
KampotKrong Kampot, Kampong BayRiverside lifestyle market, durian-country, expat retirement destination
KepKep, Sangkat Prey ThomCoastal lifestyle and boutique resort market — pepper-coast tourism
KandalTa Khmau, Sa'ang, Kien SvayPhnom Penh commuter belt — Borey / villa expansion zone
Kampong ChamKrong Kampong ChamMekong river city, agricultural and trading hub
Pursat / Kampong Speu / Kampong ChhnangProvincial capitalsEmerging secondary markets, agricultural land focus
Mondulkiri / RatanakiriSen Monorom, BanlungHighland / eco-tourism land and resort opportunities

Submit a city or commune slug exactly as it appears in the realestate.com.kh URL (e.g. phnom-penh, siem-reap, sihanoukville, bkk-1, tonle-bassac, toul-kork, chamkarmon, daun-penh, 7-makara, sen-sok).


Cost & Performance

MetricValue
Enginegot-scraping HTTP + Cheerio + __NEXT_DATA__ parser — no headless browser
Runtime (50 listings, no detail)~30–60 seconds
Runtime (500 listings, no detail)~3–6 minutes
Runtime (500 listings, with detail)~12–25 minutes (depends on requestDelay)
Pricing modelPay-per-event (transparent per-record pricing)
Data freshnessLive at run time — direct fetch from realestate.com.kh
Auth requiredNone
Proxy requiredRecommended for >200 listings; defaults to Apify residential
ConcurrencySafe to run multiple filtered configurations in parallel (e.g. one per city)
Memory footprint256 MB sufficient — minMemoryMbytes: 128, maxMemoryMbytes: 1024
Retry policyUp to 3 attempts per URL with exponential backoff on 429

  • Public data only — every field surfaced by this actor is already published on the public realestate.com.kh listing pages, available to any visitor without login or paywall
  • No PII / no buyer data — the actor returns agency / agent listing contacts (which the agents have voluntarily published as part of the listing) and never user, buyer, viewer or registration data
  • No PHI / no financial records — purely property-listing data
  • Respect the source — do not republish copyrighted descriptions or images verbatim without permission; transformative analytics, internal dashboards and aggregated market reports are the standard fair-use pattern
  • Robots / ToS — the actor obeys polite request pacing (default 1000 ms delay, configurable) and ships no aggressive concurrency settings. Review Realestate.com.kh's Terms of Use before high-volume runs
  • Cambodian data protection — Cambodia has no comprehensive data-protection law equivalent to GDPR, but agency contact data should still be handled with reasonable care
  • GDPR / CCPA — compliance for downstream consumers in the EU / California is the responsibility of the data controller, not the actor
  • No anti-competition — the actor is intended for market intelligence, due diligence, research and aggregation, not for unauthorised scraping to undermine the source platform

Important: This data may not be used for unlawful purposes including but not limited to harassment, identity fraud, or violation of Cambodian land-ownership restrictions. Investor and developer users should consult licensed Cambodian counsel for title verification, foreign-ownership structuring and KYC obligations.


Frequently Asked Questions

How fresh is the data?

The actor scrapes live at run time — every record reflects what's on realestate.com.kh the moment the actor runs. Schedule it hourly, daily or weekly to build a time series.

How many listings will I get?

Varies — Realestate.com.kh hosts tens of thousands of active listings across all Cambodia at any time. A nationwide unfiltered run (cities: [], listingType: all, propertyType: all) returns the bulk of the inventory; a filtered run (e.g. condo in bkk-1) returns hundreds. Set maxRecords to cap; leave it 0 for unlimited.

Does this scraper need a login or API key?

No. Realestate.com.kh listings are public — no authentication required. You only need an Apify account to run the actor.

Are prices in USD or KHR (Khmer Riel)?

USD. Cambodia's real estate market is fully dollarised; the site publishes all prices in US dollars and the actor's currency field is always "USD". Convert to KHR downstream if you need it (1 USD ≈ 4,100 KHR).

What's the difference between Hard Title, Soft Title and Strata Title?

Hard Title is national-level land title (strongest legal protection). Soft Title is district / commune-level (most common historically). Strata Title is condominium co-ownership — the only title type foreigners may directly own. LMAP titles are modernised systematic Hard Titles. See the Title Type Reference table above.

Can foreigners buy property in Cambodia?

Foreigners can directly own condominium units above the ground floor with Strata Title. Other property types require leasing structures or Cambodian-majority landholding companies. Filter titleType: "Strata Title" to isolate foreign-eligible inventory.

Does it cover Sihanoukville's Chinese-investor market?

Yes — set cities: ["sihanoukville"] and the actor returns all active inventory across Sangkat Buon, Pir, Bei, Otres and Independence Beach. Pair with priceFlags and discountPercent filters to flag distressed assets from the post-2019 correction.

Does it include Borey (gated-community) listings?

Yes. Set propertyType: "borey" for the dedicated Borey category, or look at the borey field on individual house / villa records to see which gated community a listing belongs to. New Borey launches are also surfaced via listingType: "new-developments".

Can I get agency phone numbers and contact details?

Yes — when scrapeDetails: true, the actor pulls agencyName and contactPhone from the listing detail page's __NEXT_DATA__ profiles section. Without detail scraping, list-level data may be sparser.

Are coordinates / map pins included?

Yes — when scrapeDetails: true, the coordinates object is populated from the detail page's dataGraph block. Without detail scraping coordinates are usually null.

Does the actor cover pre-sale / off-plan condos?

Yes — set listingType: "new-developments" to scrape Realestate.com.kh's dedicated new-developments section, which surfaces off-plan condo, villa and Borey projects with developer-level information.

Can I run this on a schedule?

Yes — Apify's Scheduler supports any cron expression. Common patterns: hourly for hot-market price tracking, daily at 7 AM Phnom Penh time for brokerage dashboards, weekly for market reports.

Does the actor deduplicate?

Yes. Records are deduped by propertyId (falling back to listingUrl) so the same listing is never written twice across overlapping searches, cities or paginated pages.

Does it handle CAPTCHAs?

Realestate.com.kh does not deploy aggressive CAPTCHA / anti-bot today. The actor uses realistic browser fingerprints via got-scraping, randomised Apify residential proxy sessions and configurable per-request delay, which together avoid the rate-limit thresholds in normal use. Reduce concurrency and increase requestDelay if you see 429 responses.

What if Realestate.com.kh changes its HTML?

The actor uses a layered strategy: __NEXT_DATA__ JSON extraction first, DOM card parsing second, URL regex parsing third. Minor markup changes typically don't break the extractor. Major Next.js bundle restructures are patched in subsequent versions — open an issue if you see a regression.

What export formats are supported?

JSON, CSV, Excel (XLSX), HTML, XML, RSS and JSON Lines — directly from the Apify dataset view or via the API.

Does it work on the Apify free plan?

Yes — full functionality on the free tier. Costs are pay-per-event, and most small filtered runs cost cents.

Can I scrape only one Borey project?

Use startUrls with the Borey project's search URL on the site (e.g. a filtered search for a specific Borey name), or post-filter the records by the borey field.

Are commercial / office listings included?

Yes — set propertyType: "commercial" for office, retail and mixed-use commercial inventory across Phnom Penh, Sihanoukville and Siem Reap.

Does it support other Cambodian portals (Khmer24, ip.cambodia.com)?

Not in this actor — it's purpose-built for Realestate.com.kh's specific Next.js architecture. See the Related Actors section for our Southeast Asia portfolio (Lamudi Philippines, VivaReal Brazil, Chotot Vietnam, Mudah Malaysia) and ask in the Issues tab if you'd like Khmer24 coverage added.


If you build cross-border real estate, marketplace or location intelligence pipelines, these sibling actors are useful complements:

Real estate — Southeast Asia & adjacent

Real estate — global

Marketplaces & classifieds (regional Southeast Asia)


Comparison vs. Alternatives

ApproachSetup timeData freshnessSchema normalizationUSD price parsingTitle-type extractionMaintenance burden
This actor< 2 minutesLiveBuilt-inBuilt-inBuilt-in (detail mode)None — managed
Custom Cheerio/Puppeteer script1–3 weeks of devLiveDIYDIYDIYContinuous — Next.js bundle changes break parsers
Hire a local Cambodian devDays to weeksVariableDIYDIYDIYOngoing labour cost
Manual copy-paste from websiteHours per pullLiveNoneNoneNoneDoesn't scale
Negotiate API access with portalWeeks to monthsVariableProvidedProvidedProvidedCommercial agreement required
Buy a market-report PDFDaysQuarterly / staleN/AN/AN/ASnapshot only — no time series

Why Pay-Per-Event Pricing?

Most scraping tools either charge a flat monthly subscription (you pay even if you don't use it) or per-Compute-Unit (unpredictable). This actor uses pay-per-event pricing:

  • You only pay when the actor actually runs and produces records
  • Charges scale with how much data you consume — a 50-record test costs cents
  • Transparent, line-item billing in Apify Console
  • No monthly minimums, no platform lock-in
  • Free to evaluate — run a maxRecords: 50 sample before committing

Changelog

VersionDateNotes
1.0.02026-05Initial public release — got-scraping + Cheerio + __NEXT_DATA__ parser, full pagination, optional detail-page enrichment with Hard / Soft / Strata Title, agency, contact phone, coordinates, features and amenities

Keywords

Realestate.com.kh scraper · Cambodia real estate data · Cambodia property scraper · Phnom Penh property scraper · Phnom Penh condo scraper · BKK1 condo prices Cambodia · Tonle Bassac condo data · Toul Kork villa scraper · Chamkarmon real estate data · Daun Penh property listings · Siem Reap property data · Siem Reap villa scraper · Sihanoukville property scraper · Sihanoukville Chinese investor data · Battambang real estate scraper · Kampot property data · Kep coastal real estate · Kandal property listings · Khmer property listings extractor · Cambodia real estate API · Cambodia property listings API · Cambodia foreign investor property · Strata Title Cambodia scraper · Hard Title land Cambodia · Soft Title property data · Borey gated community scraper · Cambodia condo pre-sale data · Cambodia new developments scraper · Cambodia rental listings · Phnom Penh expat apartments · Cambodia digital nomad rentals · Cambodia commercial property data · Cambodia land for sale scraper · Cambodia shophouse listings · Cambodia real estate market intelligence · Apify Cambodia actor · Southeast Asia property scraper · realestate.com.kh data extraction · Cambodia condo comps · Phnom Penh price per square metre · Sihanoukville beachfront data · USD property listings Cambodia · Cambodia agency contact data · Cambodia hotel acquisition due diligence · Cambodia property data warehouse · Phnom Penh property analytics


Support

  • Bug reports: Use the Issues tab on the Apify Store page
  • Feature requests: Same place — tell us the use case and the city / commune / property type
  • Direct contact: Through the Apify developer profile at apify.com/haketa

If this actor saves you time on Cambodia real estate research, a 5-star rating on the Apify Store helps other investors, brokers, journalists, hospitality acquirers and proptech teams discover it. Thank you — អរគុណ!