
PropertyGuru Singapore Scraper
hipersoft/propertyguru-scraper
Scrape PropertyGuru Singapore property listings: price, beds, baths, size, address, property type, agent and URL. For property research and lead generation.
Total users
3Monthly users
2Total runs
106Per listing scraped
$0.004Last rebuilt
Oct 28, 2026Overview
Scrape PropertyGuru Singapore property listings into clean JSON, CSV, Excel or XML. The PropertyGuru scraper extracts title, address, price, price-per-sqft, bedrooms, bathrooms, floor area, property type, tenure, build year, nearest MRT, listing agent, agency and the listing URL from for-sale and for-rent search results. Fast and reliable, and a cheaper alternative to collecting the data by hand.

What does PropertyGuru Scraper do?
The PropertyGuru scraper crawls PropertyGuru Singapore for-sale and for-rent search pages and exports every property listing as a structured row. Point it at a listing type or paste your own filtered search URLs, set a limit, and get a clean dataset of prices, sizes, locations and agent details — ready for analysis or export to JSON, CSV, Excel or XML.
What data can you scrape from PropertyGuru?
| Data point | Description |
|---|---|
| 🏠 Listing basics | Title, address, property type, listing ID |
| 💲 Pricing | Price, formatted price text, price per sqft (PSF) |
| 📐 Property details | Bedrooms, bathrooms, floor area (sqft), tenure, build year |
| 🚇 Location | Address and nearest MRT station |
| 👤 Agent & agency | Marketing agent name and agency name |
| 🔗 Links | Direct listing URL and source search URL |
| 🕒 Freshness | Listing recency and collection timestamp |
What you get

Each listing is returned as a structured record like this:
{
"listingId": "18909402",
"title": "Eight Riversuites",
"address": "Whampoa East",
"price": 1299999,
"priceText": "S$ 1,299,999",
"pricePsf": 1857.14,
"bedrooms": 2,
"bathrooms": 2,
"sizeSqft": 700,
"propertyType": "Condominium",
"tenure": "99-year Leasehold",
"buildYear": 2017,
"nearestMrt": "Boon Keng MRT",
"recency": "Listed 2 days ago",
"agentName": "Kaeden Ong",
"agencyName": "PropNex Realty",
"listingUrl": "https://www.propertyguru.com.sg/listing/for-sale-eight-riversuites-18909402",
"sourceUrl": "https://www.propertyguru.com.sg/property-for-sale",
"collectedAt": "2026-07-30T09:29:00.000Z"
}
Output schema
| Field | Type | Description |
|---|---|---|
listingId |
string | Unique PropertyGuru listing identifier |
title |
string | Listing or development title |
address |
string | Listing address or locality |
price |
integer | Asking price as a number |
priceText |
string | Price as shown on the listing (formatted) |
pricePsf |
number | Price per square foot |
bedrooms |
integer | Number of bedrooms |
bathrooms |
integer | Number of bathrooms |
sizeSqft |
integer | Floor area in square feet |
propertyType |
string | Property type (e.g. Condominium, HDB, Landed) |
tenure |
string | Land tenure (e.g. 99-year Leasehold, Freehold) |
buildYear |
integer | Year the property was built |
nearestMrt |
string | Nearest MRT station |
recency |
string | How recently the listing was posted or updated |
agentName |
string | Name of the marketing agent |
agencyName |
string | Name of the agent's agency |
url |
string (URL) | Canonical listing URL |
listingUrl |
string (URL) | Direct link to the listing |
sourceUrl |
string (URL) | Search URL the listing was found on |
collectedAt |
string (ISO date) | Timestamp when the record was collected |
Use cases
- Price benchmarking — compare asking prices and price-per-sqft across districts and property types.
- Market monitoring — track new listings, price changes and inventory over time.
- Agent lead generation — build lists of active agents and agencies by area.
- Property research — assemble datasets of condos, HDB and landed homes for analysis.
- Investment screening — filter by tenure, build year, size and PSF to shortlist deals.
- Valuation models — feed real listing data into pricing and comparables models.
How to scrape PropertyGuru data
- Add the PropertyGuru Scraper to your Apify account.
- Choose a listing type (for sale or for rent), or paste your own filtered search URLs.
- Optionally set a property type (e.g.
hdb,condo) to narrow results. - Set Max listings to control how much data you collect.
- Click Run, then export the results as JSON, CSV, Excel or XML — or pull them via the Apify API.
Input
{
"listingType": "sale",
"maxItems": 40
}
For more volume, pass several filtered search URLs (by district, price band or property type):
{
"searchUrls": [
"https://www.propertyguru.com.sg/property-for-sale/district/D09",
"https://www.propertyguru.com.sg/property-for-rent/hdb"
],
"maxItems": 200
}
| Field | Type | Description |
|---|---|---|
listingType |
string | sale or rent. |
propertyType |
string | Optional property-type path segment (e.g. hdb, condo). |
searchUrls |
array | Explicit PropertyGuru search URLs; overrides listingType/propertyType. |
maxItems |
integer | Maximum number of listings to collect. |
Need more Singapore data?
- 99.co Property Scraper
- EdgeProp Singapore Scraper
- SRX Property Scraper
- MyCareersFuture Jobs Scraper
- Singapore Carpark Availability (Live)
FAQ
How many listings can I scrape? As many as you like — set Max listings, or pass multiple search URLs to collect more per run.
Do I need any setup or a login? No setup and no login. Just add the actor, choose a listing type or paste search URLs, and run.
Which export formats are supported? JSON, CSV, Excel and XML, plus the Apify API and dataset views.
How fresh is the data?
Every run collects the listings live from PropertyGuru at that moment, with a collectedAt timestamp on each record.
Can I filter by district, price or property type? Yes — paste PropertyGuru search URLs that already carry your filters, and the scraper follows them.
How does billing work? You pay per listing you collect — no subscriptions and no minimums.
Can I connect it to other tools? The PropertyGuru Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Is it legal? The scraper collects only publicly available listing data. You are responsible for how you use the data and for complying with PropertyGuru's terms.
Notes
Original clean-room implementation. Returns only public data; you are responsible for compliance with PropertyGuru's terms. Not affiliated with or endorsed by PropertyGuru.
Input
| Field | Type | Description |
|---|---|---|
listingTypeListing type | string · sale, rent | Whether to scrape properties for sale or for rent. Default: "sale" |
propertyTypeProperty type (optional) | string | Optional property-type path segment, e.g. hdb or condo. |
searchUrlsSearch URLs (optional) | array | Explicit PropertyGuru search URLs; overrides listingType/propertyType. |
maxItemsMax listings | integer | Maximum listings to scrape. Default: 60 |
debugDebug | boolean | Log the discovered data structure to the key-value store. Default: false |
proxyConfigurationProxy | object | Proxy configuration. Leave the default — it is tuned for reliable results. Default: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~propertyguru-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/propertyguru-scraper").call(run_input={})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/propertyguru-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Listing scraped One property listing scraped. | $0.004 | $0.004 |
| Search page cleared One search URL cleared through Cloudflare and scraped. | $0.01 | $0.01 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
CNN Fear & Greed Index Scraper
Scrape the CNN Fear & Greed Index: current market-sentiment score and rating, a full historical timeline, and all seven component indicators. Clean structured JSON, CSV or Excel for trading signals, backtesting, dashboards and alerting.
547 runs · 6 users · $0.003 / item scrapedDivar Scraper
Scrape classified ads from Divar, Iran's largest marketplace: title, price (Toman), category, city, district, images and the listing URL. Search any Iranian city with an optional keyword and export one clean row per ad as JSON, CSV or Excel. For market research, price tracking and n8n.
224 runs · 22 users · $0.003 / listing scrapedAirbnb Scraper
Search Airbnb by location and scrape listings: name, property type, price, rating, reviews, coordinates, photos, badges and link. For short-term rental, pricing and market research.
122 runs · 2 users · $0.005 / listing scrapedSingapore HDB Property Information Scraper
Export master data for every HDB block in Singapore (~13,300 blocks): address, town, year completed, max floor, total units, unit mix by flat type (sold & rental) and amenities (market/hawker, carpark, commercial, pavilion). Filter by town, street, year. Public open data, no setup.
113 runs · 1 users · $0.002 / block scrapedEdgeProp Singapore Property Scraper
Scrape EdgeProp Singapore property listings for sale and rent: price, address, beds, baths, size, PSF and URL.
105 runs · 1 users · $0.004 / listing scrapedCrexi Commercial Real Estate Scraper
Scrape Crexi commercial real estate listings: price, address, property type, size, cap rate, broker and URL.
101 runs · 2 users · $0.0075 / listing scrapedSend the site and the fields. We build it and you get it first.