99co Singapore Property Scraper
REAL ESTATEBUSINESS
99co Singapore Property Scraper
Scrape property listings from 99.co — Singapore's #2 property portal. Extracts sale, rent, new launch, and commercial listings with pricing, location, agent details, and region classification (CCR / RCR / OCR).
What it does
For each listing type you request (sale, rent, new launch, or commercial), the actor:
- Loads the 99.co search page using a real browser with residential Singapore proxy to clear Cloudflare protection
- Calls the internal search API (
/api/v10/web/search/listings) using the browser's authenticated session - Extracts listing details directly from the API response — no separate detail-page visits
- Paginates automatically until
maxItemsis reached
Input
| Field | Type | Required | Description |
|---|---|---|---|
maxItems |
Integer | Yes | Maximum number of listings to return (min: 1) |
listingTypes |
Array | No | Listing types to include. Options: sale, rent, new-launch, commercial. Defaults to ["sale", "rent"] |
Example input
{
"maxItems": 100,
"listingTypes": ["sale", "rent"]
}
Output
Each record contains:
| Field | Description |
|---|---|
listing_id |
Unique listing identifier |
listing_type |
sale, rent, etc. |
title |
Listing title or address |
description |
Listing description |
property_type |
Property type (Condo, HDB, Landed, etc.) |
tenure |
Freehold / Leasehold |
district |
District number (1–28) |
district_code |
District code (e.g. D10) |
region |
CCR / RCR / OCR classification |
project_name |
Development or project name |
address |
Street address |
postal_code |
Singapore postal code |
latitude / longitude |
GPS coordinates |
price_sgd |
Asking price or monthly rent in SGD |
price_psf_sgd |
Price per square foot in SGD |
bedrooms |
Number of bedrooms |
bathrooms |
Number of bathrooms |
floor_area_sqft |
Floor area in square feet |
land_area_sqft |
Land area in square feet (landed properties) |
completion_year |
Year of completion |
school_within_1km |
Nearby schools within 1 km |
amenities |
Property amenities and features |
agent_name |
Listing agent name |
agent_cea_no |
Agent CEA registration number |
agent_phone |
Agent contact number |
agency |
Agency name |
listing_url |
Direct URL to the listing |
image_urls |
Array of property photo URLs (up to 20) |
posted_at |
Date the listing was posted |
scraped_at |
ISO timestamp of when the record was scraped |
Notes
- Cloudflare bypass: The actor uses a real Chromium browser with residential Singapore proxies to pass Cloudflare's JS challenge. This is why it requires more compute than a simple HTTP crawler.
- Rate limits: Run with
maxItemsat 500 or fewer per run to stay within reasonable query limits. For large extracts, split by listing type. - Data freshness: The search API returns live listings — data is current at scrape time.
- Memory: Requires 2048 MB due to the browser-based extraction.