
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape PropertyGuru Singapore and Malaysia: condos, HDB flats, landed homes and more for sale or rent with price, psf, beds, baths, size, address, coordinates, MRT and schools nearby, photos, description, project details and agent name, phone, licence and agency.
Scrape PropertyGuru Singapore (propertyguru.com.sg) and PropertyGuru Malaysia (propertyguru.com.my) into clean, spreadsheet-ready rows: condos, HDB flats, landed homes, land and Malaysian commercial property for sale or rent. Each row has the price, price per sqft, beds, baths, size, full address, GPS coordinates, nearby MRT/LRT stations and schools, photos, floor plans, description and project details, plus the agent's name, phone number, licence number and agency. No login and no browser needed.
| Field | What it does |
|---|---|
startUrls | PropertyGuru SG or MY search URLs (any filters), listing URLs, or project URLs (all sale and rent units in the project). |
locations | Singapore: district codes (D09) or names, or any neighbourhood, HDB estate, MRT station or condo name. Malaysia: state names (Kuala Lumpur, Selangor, Penang) or any area, township or project. |
maxItems | Maximum listings across all inputs (default 20, 0 = no limit). |
listingType | sale or rent (for location searches). |
market | SG or MY: the site used for location and filter-only searches. |
propertyType | condo, condominium, apartment, executive-condo, hdb, landed, terraced-house, semi-detached-house, detached-house, bungalow, good-class-bungalow, cluster-house, townhouse, serviced-residence, flat, land, commercial, office, shop, industrial, agricultural-land. |
minPrice / maxPrice | Price range in SGD or MYR (monthly rent for rentals). |
minBedrooms / maxBedrooms / minBathrooms | Room filters (0 bedrooms = studio). |
minSize / maxSize | Floor area in sqft. |
keyword, furnishing, tenure, postedWithinDays, sort | Extra filters and sort order. |
includeDetails | Open each listing page for the phone, coordinates, description, schools, unit features, floor plans and dates (default on). |
proxyConfiguration | Proxy settings. Residential (default) is pinned to the listing's country; datacenter IPs get Cloudflare challenges, so a datacenter run moves to residential by itself. |
{
"startUrls": [{ "url": "https://www.propertyguru.com.sg/property-for-sale?listingType=sale&propertyTypeGroup=N&locale=en" }],
"locations": ["D15", "Bishan"],
"market": "SG",
"listingType": "rent",
"propertyType": "condo",
"minPrice": 3000,
"maxPrice": 6000,
"minBedrooms": 2,
"maxItems": 500,
"includeDetails": true
}
One row per listing. Main fields:
| Field | Description |
|---|---|
id, url, market | Listing ID, link and country (SG / MY). |
title, headline, projectName, description | Listing title, agent headline, project and full description. |
listingType, propertyType, propertyTypeGroup, hdbType | Sale or rent, type (e.g. Condominium, HDB Flat 4A, Terraced House). |
price, priceFormatted, currency, priceType, pricePerSqft | Asking price or monthly rent, SGD or MYR, negotiable flag and price psf. |
bedrooms, bathrooms, floorAreaSqft, floorAreaSqm, landAreaSqft, landAreaSqm | Size and rooms. |
tenure, furnishing, floorLevel, tenancyStatus, unitFeatures, facilities | Unit and project details. |
address, street, postalCode, district, districtCode, region, regionCode, latitude, longitude | Location. |
nearestTransit, nearbyStations, nearbySchools | Nearest MRT/LRT stations and schools with distances. |
photos, photoCount, floorPlans, videoUrls, thumbnail | Media. |
agentName, agentPhone, agentPhones, agentLicense, agentJobTitle, agentVerified, agentProfileUrl | Agent. |
agencyName, agencyLicense, agencyId, listerType | Agency. |
developer, completionYear, totalUnits, projectStatus, projectUrl, projectDescription | Project facts (TOP year in Singapore). |
postedAt, updatedAt, firstPostedAt, expiresAt, listedText, status | Dates and status. |
Example (trimmed; people and phone numbers are fictional):
{
"id": 500207545,
"url": "https://www.propertyguru.com.sg/listing/for-sale-concourse-skyline-500207545",
"market": "SG",
"title": "Concourse Skyline",
"listingType": "sale",
"propertyType": "Condominium",
"price": 2950000,
"priceFormatted": "S$ 2,950,000",
"currency": "SGD",
"priceType": "Negotiable",
"pricePerSqft": 1768.59,
"bedrooms": 4,
"bathrooms": 4,
"floorAreaSqft": 1668,
"floorAreaSqm": 155.0,
"tenure": "99-year Leasehold",
"furnishing": "Partially Furnished",
"address": "300 Beach Road, Beach Road / Bugis / Rochor",
"postalCode": "199555",
"district": "Beach Road / Bugis / Rochor",
"districtCode": "D07",
"region": "City & South West (D01-08)",
"latitude": 1.300603,
"longitude": 103.861821,
"nearestTransit": "CC5 Nicoll Highway MRT Station (340 m)",
"nearbySchools": [{ "name": "Stamford Primary School", "type": "PRIMARY SCHOOL", "distanceKm": 0.9, "walkMinutes": 12 }],
"facilities": ["Clubhouse", "Gymnasium room", "Lap pool"],
"photoCount": 9,
"agentName": "Jane Tan",
"agentPhone": "+6590000000",
"agentLicense": "R000000A",
"agencyName": "ERA REALTY NETWORK PTE LTD",
"agencyLicense": "L3002382K",
"developer": "Hong Fok Land Ltd",
"completionYear": 2014,
"totalUnits": 360,
"postedAt": "2026-10-15T23:35:09Z"
}
You pay per listing saved: $1.50 per 1,000 listings, plus $0.50 per 1,000 listings that are enriched from their listing page (phone, coordinates, description, schools). With details on, that's $2.00 per 1,000 listings; with details off, $1.50. Platform usage (compute and residential proxy traffic) is billed separately and is small.
Worked example: 1,000 listings with full details cost about $2.00 in listing fees plus a few cents of usage.
Is it legal to scrape PropertyGuru? The actor collects publicly visible listing data only, without logging in. You are responsible for using the data in line with PropertyGuru's terms and data protection laws such as Singapore's PDPA and Malaysia's PDPA, especially for agent contact details.
Do I need an account, cookies or my own proxy? No. The actor works without login and uses the platform's residential proxies in Singapore or Malaysia by default (PropertyGuru challenges datacenter IPs).
How many listings can I get? As many as the search has. PropertyGuru shows 20 listings per page and the actor walks through every page. Use several URLs or locations for very large exports.
Why is a field empty? Agents fill listings differently: some don't add floor plans, floor level or furnishing, and HDB or landed listings have no project facts. Rows saved with Open each listing page off contain search-card data only.
Can I sort by newest? In Malaysia, yes. PropertyGuru Singapore blocks automated access to its "Newest" sort, so Singapore searches run in Recommended order. Use Posted within (3, 7, 14 or 31 days) to get fresh listings.
Can I schedule it or use the API? Yes. Schedule runs in the console, or start them through the API and read the dataset as JSON, CSV or Excel.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalPropertyGuru URLs
Paste links from propertyguru.com.sg or propertyguru.com.my: search result pages (any filters, district, MRT, HDB estate or keyword search), single listing pages, or project pages (all units for sale and rent in that project). Refine your search on the site, then copy the URL from the address bar.
locationsarrayOptionalLocations to search
Places to search with the filters below. Singapore: district codes (D09, D15) or district names, and any neighbourhood, HDB estate, MRT station, road or condo name (Orchard, Tampines, Bishan MRT). Malaysia: state names (Kuala Lumpur, Selangor, Penang, Johor) and any area, township or project (Mont Kiara, Petaling Jaya, Cyberjaya). Each entry is one search in the market chosen below.
maxItemsintegerOptionaldefault 20Max listings
Maximum number of listings to save across all URLs and locations. 0 means no limit.
Used for Locations searches (and for a search over the whole market when no URL or location is given). Pasted search URLs keep their own filters.
listingTypeenumOptionaldefault "sale"For sale or rent
Listings for sale or for rent.
marketenumOptionaldefault "SG"Market
Country site used for Locations searches and filter-only searches. Pasted URLs always use their own site.
propertyTypeenumOptionaldefault "any"Property type
Type of property. Types marked SG or MY exist on that site only. Commercial property in Singapore lives on a separate site and is not covered.
minPriceintegerOptionalMin price
Minimum price in the market's currency (SGD or MYR) (monthly rent for rentals).
maxPriceintegerOptionalMax price
Maximum price in the market's currency (SGD or MYR) (monthly rent for rentals).
minBedroomsintegerOptionalMin bedrooms
Minimum number of bedrooms (5 means 5 or more).
maxBedroomsintegerOptionalMax bedrooms
Maximum number of bedrooms (0 means studio only).
minBathroomsintegerOptionalMin bathrooms
Minimum number of bathrooms.
minSizeintegerOptionalMin size (sqft)
Minimum floor area in square feet.
maxSizeintegerOptionalMax size (sqft)
Maximum floor area in square feet.
keywordstringOptionalKeyword
Free-text keyword the site searches for, e.g. a road, MRT station, project name or feature (pool, sea view).
furnishingenumOptionaldefault "any"Furnishing
Furnishing status.
tenureenumOptionaldefault "any"Tenure
Ownership tenure.
postedWithinDaysenumOptionaldefault "any"Posted within (days)
Only listings posted or refreshed within this many days. Useful for daily or weekly monitoring.
sortenumOptionaldefault "relevance"Sort by
Order of the results. Newest first works for Malaysia; PropertyGuru Singapore blocks automated access to that sort, so Singapore searches use Recommended order instead (combine with 'Posted within' for fresh listings).
includeDetailsbooleanOptionaldefault trueOpen each listing page
Visit every listing page to add the agent phone number and licence, agency licence, GPS coordinates, full description, unit features, facilities, all photos and floor plans, nearby MRT/LRT stations and schools, furnishing, project details (developer, TOP/completion year, total units) and posted / updated / expiry dates. Turn off for faster runs with search-card data only (price, beds, baths, size, address, district, agent name and licence, agency, photos).
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential proxies are the default: PropertyGuru's Cloudflare challenges datacenter IPs. Exits are pinned to Singapore or Malaysia to match each URL's site unless you set a country. If you pick datacenter, the run moves to residential by itself once it gets blocked.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| thumbnail | any | Photo |
| url | any | Listing |
| title | any | Title |
| market | any | Market |
| listingType | any | Sale/rent |
| propertyType | any | Type |
| price | any | Price |
| currency | any | Currency |
| bedrooms | any | Beds |
| bathrooms | any | Baths |
| floorAreaSqft | any | Size (sqft) |
| pricePerSqft | any | Price psf |
| district | any | District |
| region | any | Region |
| projectName | any | Project |
| agentName | any | Agent |
| agentPhone | any | Phone |
| agencyName | any | Agency |
| postedAt | any | Posted |
| id | any | ID |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Listing details | One listing enriched from its listing page (agent phone, coordinates, description, schools, floor plans). Turn off 'Open each listing page' to skip it. | $0.0005 |
| Listing | One property listing saved to the dataset. | $0.0015 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/propertyguru-scraper').call({
"startUrls": [
{
"url": "https://www.propertyguru.com.sg/property-for-sale?listingType=sale&propertyTypeGroup=N&locale=en"
}
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/propertyguru-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/propertyguru-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
New HDB rental listings with full details.
Condo rentals in Malaysia with full details.
Condos for sale in a price range, cheapest first.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.