OrbTop

PropertyGuru SE Asia Real Estate Scraper

REAL ESTATEBUSINESSOTHER

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 listingType toggle.
  • Optional regionPath slug 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

  1. Pick a brand (PropertyGuru SG or DDproperty TH), a listing type (sale or rent), and an optional region path.
  2. The scraper solves the Cloudflare challenge once per run using a residential proxy in the brand's country.
  3. It then walks the listing pages, parses the embedded __NEXT_DATA__ Apollo cache, and emits one record per listing.
  4. Pagination continues until maxItems is 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.