99.co Project & Condo Profile Scraper avatar

99.co Project & Condo Profile Scraper

Pricing

from $20.00 / 1,000 project profiles

Go to Apify Store
99.co Project & Condo Profile Scraper

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

Elena Vance

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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:

projecttypetenureTOPunitsactive listingssold PSF (6m)nearest MRT
Tembusu GrandCondo99 years20256382292,734.87Tanjong Katong
Neptune CourtCondo99 years1975752301,073.29Marine Terrace
The MeyeriseCondoFreehold2016239252,771.70Katong Park
Parc EleganceCondoFreehold2013161141,615.24Marine 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:

FieldMeaning
soldAvgPsf6Months / soldAvgPsf12MonthsTransacted average price per sqft
latestSalePriceMost recent recorded transaction
highestSalePriceHighest recorded transaction
askingPriceMin / askingPriceMaxCurrent asking range
rentAvgPsf6Months / rentAvgPsf12MonthsTransacted rent per sqft
latestRent / highestRent / rentMin / rentMaxThe 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

FieldDescription
clusterIdsProject IDs, or 99.co URLs with an ID appended to the slug.
districtsDiscover every project with an active listing in these districts.
propertyTypeall, condo, hdb, landed. Narrows discovery.
maxItemsHow many projects to return. Default 25.
includeNearbyAmenitiesNearest MRT, bus stop, school, supermarket, clinic, park, bank, ATM — plus the full list. Default on.
amenityRadiusHow far to look, in metres. Default 2,000.
includeNearbyProjectsUp to 10 neighbouring developments. Default off.
includePhotosEvery project photo with its caption. Default off.
maxRunSecsTime 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. nearbyProjects links 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_profile and the price paragraph, HDB and landed carry a description, landed adds bedroom types and floor-plan counts. Every row carries the same columns regardless, filled with nulls — so CSV exports stay stable.
  • totalUnits is null when 99.co reports "0 units", which means it does not know rather than that the project has no units.
  • ownerOccupiedRatio / tenantRatio are 99.co's own estimate, derived from rental transaction volume against total units. Condo projects only.
  • marketSegment (CCR/RCR/OCR) and districtName are derived from the district number using URA's convention; 99.co does not return them.

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.

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.