99.co Project & Condo Profile Scraper
Pricing
from $20.00 / 1,000 project profiles
99.co Project & Condo Profile Scraper
Scrape Singapore condo, HDB and landed project profiles from 99.co: tenure, TOP year, unit count, blocks, asking and transacted PSF, price range per bedroom type, owner/tenant mix, and nearby MRT, schools and amenities with walk, drive and taxi times.
Pricing
from $20.00 / 1,000 project profiles
Rating
0.0
(0)
Developer
Elena Vance
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Singapore development profiles from 99.co — condos, HDB blocks and landed estates. Tenure, TOP year, unit count, blocks and postal codes, asking and transacted price statistics, price range per bedroom type, owner/tenant mix, and every nearby MRT, school, supermarket and clinic with walking, driving, transit and taxi-fare estimates.
One row per project. No API key, no login, no residential proxy, no browser.
What you get
A real sample, from a District 15 condo run:
| project | type | tenure | TOP | units | active listings | sold PSF (6m) | nearest MRT |
|---|---|---|---|---|---|---|---|
| Tembusu Grand | Condo | 99 years | 2025 | 638 | 229 | 2,734.87 | Tanjong Katong |
| Neptune Court | Condo | 99 years | 1975 | 752 | 30 | 1,073.29 | Marine Terrace |
| The Meyerise | Condo | Freehold | 2016 | 239 | 25 | 2,771.70 | Katong Park |
| Parc Elegance | Condo | Freehold | 2013 | 161 | 14 | 1,615.24 | Marine Parade |
Transacted prices, not just asking prices
This is the part nothing else in 99.co's public API gives you. Each condo profile carries a market-summary paragraph that this Actor parses into numbers:
| Field | Meaning |
|---|---|
soldAvgPsf6Months / soldAvgPsf12Months | Transacted average price per sqft |
latestSalePrice | Most recent recorded transaction |
highestSalePrice | Highest recorded transaction |
askingPriceMin / askingPriceMax | Current asking range |
rentAvgPsf6Months / rentAvgPsf12Months | Transacted rent per sqft |
latestRent / highestRent / rentMin / rentMax | The rental equivalents |
priceInsightText always ships alongside them — the original paragraph, so you
can check any figure that looks surprising.
These are condo-only. Sampled across nine projects, the paragraph is present on every condo and absent on every HDB block and landed estate. A null there is the normal case for two thirds of Singapore's stock, not a parsing failure.
Two ways to choose projects
By ID — take the clusterId column straight from the
99.co Property Listings Scraper. The two datasets join on it.
{ "clusterIds": ["debEkK5yYiRSHe6JSjXVB32L", "deqzJz68eCci7cgYgEy8Zr64"] }
By district — discover every project with an active listing:
{ "districts": ["D9", "D10", "D11"], "propertyType": "condo", "maxItems": 200 }
The two combine; explicit IDs are scraped first.
Input
| Field | Description |
|---|---|
clusterIds | Project IDs, or 99.co URLs with an ID appended to the slug. |
districts | Discover every project with an active listing in these districts. |
propertyType | all, condo, hdb, landed. Narrows discovery. |
maxItems | How many projects to return. Default 25. |
includeNearbyAmenities | Nearest MRT, bus stop, school, supermarket, clinic, park, bank, ATM — plus the full list. Default on. |
amenityRadius | How far to look, in metres. Default 2,000. |
includeNearbyProjects | Up to 10 neighbouring developments. Default off. |
includePhotos | Every project photo with its caption. Default off. |
maxRunSecs | Time budget. Discovery is capped at half of it. |
Amenities, with commute cost
Every nearby place carries walking, driving and transit times — and 99.co's own taxi fare estimate, which is unusual and genuinely useful for commute-cost analysis:
{"category": "MRT Stations", "name": "Marine Terrace", "distanceM": 897,"walkTime": null, "driveTime": "2 mins", "transitTime": "9 mins","taxiFare": "S$ 4.77"}
A null walkTime is information, not a gap: 99.co omits the walking route when
a place is not realistically walkable. The distance is always there.
The eight flat nearest* columns (name, distance, walk time) are what most
runs filter on; nearbyAmenities holds all ~80 places for the runs that need
them. Both come from one request.
What this Actor does NOT return
- Price history as a time series. The transacted figures are the summary statistics 99.co publishes — six-month and twelve-month averages, latest and highest — not a transaction-by-transaction ledger.
- Transacted prices for HDB or landed. See above; 99.co does not publish them in this payload.
- Projects with no active listing. 99.co puts a development's ID only inside its listings, so a project with nothing currently for sale or rent cannot be discovered by district. Supply its ID directly if you have one.
- IDs for neighbouring projects.
nearbyProjectslinks are slug-only — 99.co publishes no slug-to-ID lookup, so they cannot be fed back in. - Floor plans as images, unit-level layouts, or developer contact details.
Notes on the data
- The payload's key set changes with property type: condos carry
resident_profileand the price paragraph, HDB and landed carry adescription, landed adds bedroom types and floor-plan counts. Every row carries the same columns regardless, filled with nulls — so CSV exports stay stable. totalUnitsis null when 99.co reports "0 units", which means it does not know rather than that the project has no units.ownerOccupiedRatio/tenantRatioare 99.co's own estimate, derived from rental transaction volume against total units. Condo projects only.marketSegment(CCR/RCR/OCR) anddistrictNameare derived from the district number using URA's convention; 99.co does not return them.
Related
99.co Property Listings Scraper — every individual listing with price, PSF,
floor area and agent contacts, and the clusterId column that feeds this
Actor. It reaches all 48,000+ listings by working around 99.co's
10,000-result cap.
Legal
This Actor collects publicly available property information. You are responsible for using the data in compliance with applicable law and with 99.co's terms.