Singapore PropertyGuru Listings Scraper (Price, PSF, Agent) avatar

Singapore PropertyGuru Listings Scraper (Price, PSF, Agent)

Pricing

from $6.80 / 1,000 results

Go to Apify Store
Singapore PropertyGuru Listings Scraper (Price, PSF, Agent)

Singapore PropertyGuru Listings Scraper (Price, PSF, Agent)

Scrape Singapore property listings: title, price, price per square foot, property type, bedrooms, bathrooms, floor area, district, agent name and listing link. Export to JSON, CSV or Excel.

Pricing

from $6.80 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

14 days ago

Last modified

Share

Singapore PropertyGuru Listings Scraper (Price, PSF, Agent)

Singapore PropertyGuru Listings Scraper (Price, PSF, Agent)

Here is one real result, with every field the actor returns:

{
"id": 500178207,
"title": "St. Regis Residences Singapore",
"listingType": "For Sale",
"price": 10800000,
"priceText": "S$ 10,800,000",
"priceType": "Negotiable",
"currency": "SGD",
"psf": "S$ 2,874.63 psf",
"propertyType": "Condominium",
"bedrooms": 4,
"bathrooms": 4,
"floorArea": 3757,
"floorAreaText": "3,757 sqft",
"tenure": "999-year Leasehold",
"builtYear": 2008,
"district": "Tanglin / Holland / Bukit Timah, Orchard / Holland (D09-10)",
"districtCode": "D10",
"region": "Orchard / Holland (D09-10)",
"address": "33 Tanglin Road",
"nearestMrt": "7 min (610 m) from TE13 Orchard Boulevard MRT Station",
"agentName": "Tony Liaw",
"agentLicense": "R042890Z",
"agentId": 183142,
"agentProfileUrl": "https://www.propertyguru.com.sg/agent/tony-liaw-183142",
"agentHasMobile": true,
"agentPhoto": "https://sg1-cdn.pgimgs.com/agent/183142/APHO.137984896.V120B.png",
"agencyName": "SLP INTERNATIONAL PROPERTY CONSULTANTS PTE LTD",
"agencyId": 2726,
"isVerified": false,
"thumbnailUrl": "https://sg1-cdn.pgimgs.com/listing/500178207/UPHO.160391504.V550/St-Regis-Residences-Singapore-Tanglin-Holland-Bukit-Timah-Singapore.jpg",
"photoUrls": [
"https://sg1-cdn.pgimgs.com/listing/500178207/UPHO.160391504.V800/St-Regis-Residences-Singapore-Tanglin-Holland-Bukit-Timah-Singapore.jpg",
"https://sg1-cdn.pgimgs.com/listing/500178207/UPHO.160391505.V800/St-Regis-Residences-Singapore-Tanglin-Holland-Bukit-Timah-Singapore.jpg"
],
"photoCount": 6,
"postedDate": "5 Aug 2026",
"listingUrl": "https://www.propertyguru.com.sg/listing/for-sale-st-regis-residences-singapore-500178207",
"source": "PropertyGuru Singapore",
"observedAt": "2026-08-10T14:29:16.445Z"
}

The photoUrls array above is trimmed to 2 of the 6 real entries for length; all shown values are real and unaltered.

The most complete Singapore PropertyGuru listings scraper available. It returns every field the listing exposes, including price and price-per-square-foot, property type, beds, baths, floor area, tenure, built year, district, nearest MRT and the full listing agent and agency contact, plus an optional contact-enrichment add-on, and gives you a listing type and keyword filter to target exactly the properties you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches PropertyGuru Singapore for the listing type and keyword you pass, paginates through the matching properties, and writes one normalized record per listing to the run's dataset. Each record carries the price and price text, price-per-square-foot, property type, bedrooms, bathrooms, floor area, tenure, built year, district and region, nearest MRT, and the full listing agent and agency detail (name, license, profile URL, photo and agency). Numeric price and floor area are parsed alongside the display text, photo URLs are collected, and missing source values are returned as null.

An optional paid contact-enrichment add-on can try to find a public business email and contact name for each listing agent.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 properties for sale in Singapore.

{
"listingType": "sale",
"searchQuery": "singapore",
"maxListings": 10
}

Every input field is optional. Change searchQuery to an area, project or MRT such as Tampines or Orchard to narrow the results.

Input reference

FieldTypeRequiredDefaultDescription
maxListingsintegerno10Maximum number of listings to collect per search. Vary the keyword to gather more across runs.
listingTypeenumnosaleWhether to collect properties sale (for sale) or rent (for rent).
searchQuerystringnosingaporeFree text to filter listings, for example an area, project name or MRT such as Tampines, condo, Orchard.
enrichContactsbooleannofalseOptional paid add-on. For each result without an email, attempt to find a public business contact email and a contact person's name. Billed per attempt, plus an extra charge only when an email is found.
enrichContactsMaxintegerno50Cap how many results the add-on tries to enrich. Free Apify accounts are capped at 3.

Output reference

One dataset item per listing. Types: string, integer, boolean, string[], or null when the source value is absent.

FieldTypeDescription
idintegerPropertyGuru listing ID.
titlestringListing title (usually the project or property name).
listingTypestringFor Sale or For Rent.
priceintegerNumeric price, or null.
priceTextstringDisplay price text, for example S$ 10,800,000.
priceTypestringPrice qualifier, for example Negotiable, or null.
currencystringCurrency, always SGD.
psfstringPrice per square foot text, for example S$ 2,874.63 psf.
propertyTypestringProperty type, for example Condominium.
bedroomsintegerNumber of bedrooms, or null.
bathroomsintegerNumber of bathrooms, or null.
floorAreaintegerFloor area in sqft (numeric), or null.
floorAreaTextstringFloor area display text, for example 3,757 sqft.
tenurestringTenure, for example 999-year Leasehold.
builtYearintegerYear built, or null.
districtstringDistrict description.
districtCodestringDistrict code, for example D10.
regionstringRegion description.
addressstringStreet address, or null.
nearestMrtstringNearest MRT with walk time and distance, or null.
agentNamestringListing agent name.
agentLicensestringAgent CEA license number.
agentIdintegerAgent ID.
agentProfileUrlstringAgent profile URL.
agentHasMobilebooleanWhether the agent lists a mobile number.
agentPhotostringAgent photo URL, or null.
agencyNamestringAgency name.
agencyIdintegerAgency ID.
isVerifiedbooleanWhether the listing is verified.
thumbnailUrlstringListing thumbnail image URL.
photoUrlsstring[]Listing photo URLs.
photoCountintegerNumber of photos.
postedDatestringListing posted date as shown, for example 5 Aug 2026.
listingUrlstringPublic listing URL.
sourcestringAlways PropertyGuru Singapore.
observedAtstringISO 8601 timestamp of when the record was collected.
enrichedEmailstringAdd-on only. Public business email found, or null.
enrichedContactNamestringAdd-on only. Contact person name found, or null.
enrichedJobTitlestringAdd-on only. Contact person job title, or null.
enrichedEmailStatusstringAdd-on only. Verification status of the found email.
enrichedSourcestringAdd-on only. Source URL the contact was found on.
enrichedConfidencestringAdd-on only. Confidence of the contact match.
errorstringPresent only on a failed run: a single item with a populated error field is written instead of results.

Example output record

Real record from a live run (input {"listingType": "sale", "searchQuery": "singapore", "maxListings": 10}):

{
"id": 500178207,
"title": "St. Regis Residences Singapore",
"listingType": "For Sale",
"price": 10800000,
"priceText": "S$ 10,800,000",
"currency": "SGD",
"psf": "S$ 2,874.63 psf",
"propertyType": "Condominium",
"bedrooms": 4,
"bathrooms": 4,
"floorArea": 3757,
"tenure": "999-year Leasehold",
"builtYear": 2008,
"districtCode": "D10",
"address": "33 Tanglin Road",
"nearestMrt": "7 min (610 m) from TE13 Orchard Boulevard MRT Station",
"agentName": "Tony Liaw",
"agentLicense": "R042890Z",
"agencyName": "SLP INTERNATIONAL PROPERTY CONSULTANTS PTE LTD",
"photoCount": 6,
"postedDate": "5 Aug 2026",
"listingUrl": "https://www.propertyguru.com.sg/listing/for-sale-st-regis-residences-singapore-500178207",
"source": "PropertyGuru Singapore",
"observedAt": "2026-08-10T14:29:16.445Z"
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-propertyguru-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"listingType":"sale","searchQuery":"Orchard","maxListings":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-propertyguru-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"listingType":"rent","searchQuery":"Tampines","maxListings":100}'

Apify CLI:

apify call scrapers_lat/singapore-propertyguru-scraper \
--input '{"listingType":"sale","searchQuery":"condo","maxListings":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per listing returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxListings.
  • Contact enrichment is an optional paid add-on, off by default. It is billed per attempt, with an extra charge only when an email is found; free Apify accounts are capped at 3 enrichment attempts.

FAQ and troubleshooting

A run returned 0 records. Why? The keyword matched no current listings, or the source was briefly unreachable. Broaden the searchQuery and retry. Zero-result runs are not charged.

Do I get the listing agent's contact? Yes. Each record includes the agent name, CEA license, profile URL, photo and agency, and whether the agent lists a mobile number. Enable the enrichContacts add-on to also try to find a public business email.

For sale or for rent? Set listingType to sale or rent.

Why is a field null? The listing did not publish that value. Missing source values are returned as null, never invented.

How do I gather many listings across an area? Vary the searchQuery (different areas, projects or MRTs) across runs and raise maxListings.

Is this an official PropertyGuru tool? No. This actor is independent and has no affiliation with PropertyGuru. It reads only publicly available listing data. Use the results in accordance with the source's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for public platforms: real estate, company registries, government data, finance and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with PropertyGuru. Accesses only publicly available listing data. Use the results in accordance with the source's terms.