PropertyGuru SE Asia Real Estate Scraper
Pricing
Pay per event
PropertyGuru SE Asia Real Estate Scraper
Scrape PropertyGuru and DDproperty listings across Singapore and Thailand. Extract sale and rental properties with price, address, geo coordinates, bedrooms, bathrooms, floor area, agent name, license number, phone, and image URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
PropertyGuru Scraper — Singapore + Thailand Real Estate Listings (DDproperty)
Scrape property listings from PropertyGuru (Singapore) and DDproperty (Thailand) in one run. This is a PropertyGuru API alternative and DDproperty Thailand scraper for exporting Singapore and Bangkok real estate data — sale and rental listings — to JSON, CSV, or Excel. Returns sale and rental listings with price, address, geo coordinates, bedrooms, bathrooms, floor area, agent name, license number, phone, and image URLs — all flattened into a single unified record schema across both countries.
PropertyGuru SE Asia Property Scraper Features
- Covers two PropertyGuru-Group portals: PropertyGuru Singapore and DDproperty Thailand.
- Handles both sale and rental listings via a single
listingTypetoggle. - Optional
regionPathslug narrows the search to a specific city, district, or MRT station. - Returns a unified record schema across both portals — same field names, same types, regardless of brand.
- Extracts agent contact details including the CEA license number (Singapore) where the listing publishes it.
- Geo coordinates (latitude / longitude) when the listing exposes them, useful for mapping pipelines.
- Image URLs come back as a flat array per listing — no rehosting, no transformation.
Who Uses This Singapore + Thailand Real Estate Data?
- Real estate agents tracking competitor inventory and price movements across SG / TH.
- Foreign investors sourcing residential and commercial deals in Singapore and Bangkok.
- PropTech and analytics teams building cross-country price models on the dominant SE Asia portal network.
- Banks and mortgage desks running portfolio pricing against current listed comparables.
- Researchers studying SE Asian real estate trends without scraping each brand separately.
How PropertyGuru SE Asia Property Scraper Works
- Pick a brand (PropertyGuru SG or DDproperty TH), a listing type (sale or rent), and an optional region path.
- The scraper solves the Cloudflare challenge once per run using a residential proxy in the brand's country.
- It then walks the listing pages, parses the embedded
__NEXT_DATA__Apollo cache, and emits one record per listing. - Pagination continues until
maxItemsis reached or the listing pool runs out.
Input
{"brand": "PROPERTYGURU_SG","listingType": "SALE","regionPath": "","maxItems": 15,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "SG"}}
| Field | Type | Default | Description |
|---|---|---|---|
brand | string | PROPERTYGURU_SG | Which portal to scrape: PROPERTYGURU_SG (Singapore) or DDPROPERTY_TH (Thailand). |
listingType | string | SALE | SALE or RENT. |
regionPath | string | "" | Optional URL slug to narrow the search. Examples: in-singapore, in-bangkok. Leave blank for nationwide. |
maxItems | integer | 15 | Max listings to scrape. The portal returns ~20 listings per page; deep paging is capped at 50 pages per query. |
proxyConfiguration | object | RESIDENTIAL | Residential proxy required (Cloudflare blocks datacenter IPs). Country is inferred from the brand if unspecified. |
Example: Bangkok Rentals
{"brand": "DDPROPERTY_TH","listingType": "RENT","regionPath": "in-bangkok","maxItems": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "TH"}}
PropertyGuru SE Asia Property Scraper Output Fields
{"listing_id": "24123456","brand": "PROPERTYGURU_SG","country": "SG","listing_type": "SALE","url": "https://www.propertyguru.com.sg/listing/24123456","title": "Marina One Residences — 2 Bed Premium Floor","description": "Marina Bay condo with full sea view...","property_type": "Condominium","price": 2850000,"currency": "SGD","price_psf": 3120,"bedrooms": 2,"bathrooms": 2,"floor_area_sqft": 915,"land_area_sqft": null,"tenure": "99-year Leasehold","completion_year": 2017,"project_name": "Marina One Residences","address": "21 Marina Way","district": "Marina Bay","city": "Singapore","region": "Central Region","latitude": 1.2779,"longitude": 103.8581,"agent_name": "Tan Wei Ming","agent_license": "R012345A","agent_phone": "+65 9123 4567","agent_agency": "PropNex Realty","image_urls": ["https://sg2-cdn-pgimgs.com/listing/24123456/N-12345/x.jpg","https://sg2-cdn-pgimgs.com/listing/24123456/N-12346/x.jpg"],"posted_at": "2026-04-15T08:30:00Z","scraped_at": "2026-04-30T12:55:53Z"}
| Field | Type | Description |
|---|---|---|
listing_id | string | Unique listing identifier from the portal backend. |
brand | string | PROPERTYGURU_SG or DDPROPERTY_TH. |
country | string | Two-letter country code (SG or TH). |
listing_type | string | SALE or RENT. |
url | string | Listing detail page URL. |
title | string | Listing headline. |
description | string | Listing description, truncated to 2,000 characters. |
property_type | string | Property type (e.g. Condominium, Landed, HDB, Apartment, Shophouse, Terrace). |
price | number | Sale price, or monthly rent, in local currency. |
currency | string | Currency code (SGD or THB). |
price_psf | number | Price per square foot, when published by the listing. |
bedrooms | integer | Number of bedrooms. |
bathrooms | integer | Number of bathrooms. |
floor_area_sqft | number | Floor area in square feet (converted from sqm when needed). |
land_area_sqft | number | Land area in square feet, landed properties only. |
tenure | string | Freehold, 99-year Leasehold, 999-year Leasehold, etc. |
completion_year | integer | Year the project was or will be completed (TOP). |
project_name | string | Development or project name. |
address | string | Listing address (street + district). |
district | string | District or neighborhood name. |
city | string | City name. |
region | string | Region or state name. |
latitude | number | Latitude in decimal degrees. |
longitude | number | Longitude in decimal degrees. |
agent_name | string | Listing agent name. |
agent_license | string | Agent license number (CEA in Singapore; no scheme in Thailand). |
agent_phone | string | Agent phone number. |
agent_agency | string | Agency or brokerage name. |
image_urls | string[] | Array of image URLs. |
posted_at | string | Date the listing was first published (ISO 8601, when available). |
scraped_at | string | Timestamp when this record was scraped (ISO 8601). |
FAQ
Does PropertyGuru SE Asia Property Scraper cover iProperty Malaysia?
Not in this version. iProperty MY uses a second layer of bot protection on top of Cloudflare that needs a different bypass strategy. It's on the roadmap for a future release. For now, this actor covers PropertyGuru Singapore and DDproperty Thailand — the two portals where the listing data is reachable through the same approach.
What's the difference between PropertyGuru and DDproperty?
Both are PropertyGuru-Group brands and run the same backend. PropertyGuru is the Singapore portal; DDproperty is the Thailand portal. The actor returns identical record shapes for both, so a downstream pipeline can mix and match without per-country branching.
Why does it require a residential proxy?
PropertyGuru-Group portals sit behind Cloudflare's managed challenge. Datacenter IPs are blocked outright. Residential proxy in the brand's country is the only reliable path, and the actor pins to the right country automatically.
How fast does it run?
About 5 records per second once the Cloudflare challenge is solved. The challenge takes 15-60 seconds depending on residential proxy session quality. A 100-record run typically finishes in well under two minutes. A 1,000-record run is paced — both for politeness and to dodge rate limits.
Why can't I get more than 1,000 results per query?
PropertyGuru caps deep pagination at 50 pages (about 1,000 listings) per filtered query. Use the regionPath input to narrow the search by city or district to surface more inventory beyond that ceiling.
Is there a PropertyGuru API to download Singapore property listings?
PropertyGuru does not offer a public listings API. This actor is the practical alternative: it reads the same data the site renders and exports Singapore (PropertyGuru) and Thailand (DDproperty) listings to JSON, CSV, or Excel, with price, address, geo coordinates, agent contact, and CEA license number in each record.
Can I get full agent license metadata or MRT distance?
The current build returns whatever the listing card publishes, which is enough for most use cases. Per-listing detail-page fetches and transit-distance enrichment are planned for a v2 release. File an issue if you need them sooner.
Need More Features?
If you need iProperty Malaysia, batdongsan Vietnam, rumah123 Indonesia, or extra fields like full agent licensing or transit-distance enrichment, open an issue and we'll prioritize it.
Why Use PropertyGuru SE Asia Property Scraper?
- One actor, two countries — Singapore and Thailand listings land in the same dataset with the same field names. No reconciliation needed downstream.
- Cloudflare handled — the actor solves the managed challenge automatically. You don't think about it.
- Card-level extraction is fast — pulls full listing data straight from the embedded Next.js Apollo cache, no per-listing detail page fetches required for the published fields.
- Stable schema across brands — PropertyGuru Group runs both portals on the same backend, so the data shape is the same on either side of the border.