Com APIpropertyguru.com.sg ↗
Access Singapore property listings for sale and rent, new project launches, and agent search via the PropertyGuru API. Prices, floor area, MRT proximity, and more.
What is the Com API?
The PropertyGuru Singapore API exposes 5 endpoints covering residential property listings for sale and rent, new project launches, and agent search across Singapore. The search_properties_for_sale endpoint returns paginated listing summaries with price, PSF, bedroom count, floor area, MRT proximity, and agent details, while get_property_listing_detail retrieves the full record for a single listing by its URL slug.
curl -X GET 'https://api.parse.bot/scraper/b2a1aa00-4ad0-413c-8581-439d040fd61c/search_properties_for_sale?page=1&query=D09' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace propertyguru-com-sg-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
PropertyGuru Singapore API - Usage Example
Get your API key from: https://parse.bot/settings
"""
from parse_apis.propertyguru_singapore_api import PropertyGuru, ListingNotFound
guru = PropertyGuru()
# Search for properties for sale in District 09 (Orchard / River Valley)
for listing in guru.listings.for_sale(query="D09", limit=5):
print(listing.title, listing.price.pretty, listing.bedrooms)
# Search for rental properties in District 01
for rental in guru.listings.for_rent(query="D01", limit=3):
print(rental.title, rental.address, rental.price.pretty)
# Get full details for one listing via the slug navigation
listing = guru.listings.for_sale(query="D09", limit=1).first()
if listing:
detail = listing.details()
print(detail.title, detail.district, detail.agency)
print(detail.floor_area, detail.tenure, detail.price.formatted)
# Search new project launches
for project in guru.projects.launches(limit=3):
print(project.name, project.developer, project.price)
# Handle a listing that doesn't exist
try:
detail = listing.details()
print(detail.title, detail.listing_id)
except ListingNotFound as exc:
print(f"Listing not found: {exc.listing_slug}")
print("exercised: listings.for_sale / listings.for_rent / listing.details / projects.launches")
Search for properties for sale in Singapore with optional keyword or district filter. Returns paginated results with listing summaries including price, bedrooms, floor area, and agent info. Pagination via page number. Each listing includes a URL slug usable with get_property_listing_detail.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| query | string | Search keyword or district code (e.g., 'D09' for Orchard/River Valley, 'D01' for Raffles Place). District codes follow the pattern D01-D28. |
{
"type": "object",
"fields": {
"page": "integer current page number",
"listings": "array of property listing summaries with id, title, address, price, psf, property_type, bedrooms, bathrooms, floor_area, mrt, agent, url, and slug",
"total_pages": "integer total number of pages available"
},
"sample": {
"data": {
"page": 1,
"listings": [
{
"id": 25375951,
"mrt": {
"nearbyText": "9 min (720 m) from TE16 Havelock MRT Station"
},
"psf": "S$ 1,915.71 psf",
"url": "https://www.propertyguru.com.sg/listing/for-sale-cheap-fully-renovated-developer-unit-for-sale-2-bed-loft-in-d09-25375951",
"agent": {
"id": 12389785,
"name": null,
"agency": null
},
"price": {
"value": 2000000,
"pretty": "S$ 2,000,000",
"currency": "SGD",
"localeStringValue": "2000000"
},
"title": "CHEAP! Fully Renovated Developer Unit for Sale! 2 Bed + Loft in D09!",
"address": "",
"bedrooms": 2,
"bathrooms": 2,
"floor_area": 1044,
"property_type": "SALE"
}
],
"total_pages": 303
},
"status": "success"
}
}About the Com API
Property Search and Listing Data
The search_properties_for_sale and search_properties_for_rent endpoints accept an optional query parameter that can be a keyword or a Singapore district code (e.g., D09 for Orchard/River Valley, D01 for Raffles Place). Both return paginated arrays of listing summaries with fields including id, title, address, price, psf (price per square foot), property_type, bedrooms, bathrooms, floor_area, and the nearest MRT station. Pagination is controlled via the page parameter, and total_pages in the response indicates how many pages are available for a given query.
Listing Detail
The get_property_listing_detail endpoint accepts a listing_slug obtained from the url field in search results. It returns a richer record with the marketing headline, tenure, district, agency, and a nested price object containing value, formatted, and currency. Agent information is returned as an object with id, name, and license_number, which aligns with Singapore's estate agent licensing requirements.
New Projects and Agents
The search_new_projects endpoint returns developer-launched projects, each with developer, price, property_type, bedrooms, bathrooms, an is_spotlight flag, and associated labels. It supports keyword filtering and pagination. The search_agents endpoint lets you look up real estate agents in Singapore by name and returns a paginated array of agent records, useful for verifying agent identity or building directories.
The Com API is a managed, monitored endpoint for propertyguru.com.sg — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when propertyguru.com.sg changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official propertyguru.com.sg API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor asking prices and PSF trends across Singapore districts for rental and sale properties.
- Build a property comparison tool using bedroom count, floor area, and MRT proximity from listing summaries.
- Alert users to new project launches by developer or location using
search_new_projectswith a keyword filter. - Populate a CRM with agent license numbers and agency affiliations via
get_property_listing_detail. - Track inventory depth per district by iterating through paginated results for specific district codes like
D15orD10. - Cross-reference rental and sale PSF values for the same address to estimate yield estimates.
- Verify real estate agent credentials by name using the
search_agentsendpoint.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does PropertyGuru have an official developer API?+
How does district filtering work in the search endpoints?+
search_properties_for_sale and search_properties_for_rent accept a query parameter that can be a Singapore district code such as D09 (Orchard/River Valley) or D01 (Raffles Place). You can also pass a keyword like a neighbourhood name or development name. Results are paginated; use the page parameter alongside total_pages in the response to walk through all results.What property detail fields does `get_property_listing_detail` return that search summaries do not?+
tenure (e.g., freehold or 99-year leasehold), a headline marketing string, the agent's license_number, a structured price object with value, formatted, and currency sub-fields, and the district name. Search summary endpoints return flatter records focused on quick comparison fields like psf, floor_area, and MRT proximity.Does the API return sold transaction history or past rental prices for a property?+
Are commercial or industrial property listings included?+
property_type field in listing summaries will indicate the type returned, but dedicated filtering for commercial or industrial segments is not a current input parameter. You can fork this API on Parse and revise it to target those listing categories with additional query parameters.