99.co Scraper | Singapore Indonesia Real Estate API
Pricing
from $2.50 / 1,000 results
99.co Scraper | Singapore Indonesia Real Estate API
Scrape 99.co Singapore & Indonesia — HDB, condo, landed, rooms, commercial, rumah, apartemen & ruko for sale or rent. Prices, MRT & images — 99.co API alternative.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
What does 99.co Scraper do?
99.co Scraper extracts Southeast Asia real estate listings from 99.co Singapore and 99.co Indonesia. Cover HDB, condo, landed houses, executive condo, room rentals, and commercial (office, retail, industrial, warehouse, shophouse) in Singapore — plus Indonesian rumah, apartemen, ruko, tanah, kost, vila, and more — for sale and rent.
Pick a market (SG / ID), choose property types, or paste search/listing URLs, then download structured results as JSON, CSV, Excel, or HTML.
This Actor is a practical 99.co API alternative: it opens live 99.co pages with Camoufox (browser anti-bot), reads DOM cards + JSON-LD (Singapore) or #__NEXT_DATA__ (Indonesia), and normalizes prices, beds, baths, area, MRT / location, tags, and listing URLs for proptech, research, and CRM pipelines.
What can this 99.co scraper extract?
| Data point | Description |
|---|---|
| Listing ID & URL | Stable ID / slug and canonical 99.co listing link |
| Market | SG or ID (+ currency SGD / IDR) |
| Channel | BUY (sale / jual) or RENT (rent / sewa) |
| Category / type | e.g. condos-apartments, hdb, rooms, apartemen, rumah |
| Title & project | Headline / project name when shown |
| Price | Amount + formatted price / PSF (SG) when available |
| Size & rooms | Floor area (sqft / sqm), bedrooms, bathrooms |
| Location | Address locality, region, MRT walk times (SG), geo when present |
| Tenure & year | Freehold / leasehold and built year when shown (SG) |
| Tags & badges | e.g. Top Pick, Verified, Fully Furnished |
| Contact controls | Call / WhatsApp button presence (numbers are not clicked) |
| Source layer | dom_card, next_data, srp+ldp, etc. |
Why scrape 99.co?
- Singapore market research — track asking prices and inventory for HDB, condo, EC, and landed homes
- Indonesia property intelligence — pull jual/sewa listings for rumah, apartemen, ruko, and commercial types
- Investment & proptech — feed CRM, pricing models, or dashboards with fresh sale/rent data
- Competitive monitoring — watch tags, PSF, and inventory shifts across categories
- Export & automation — pull 99.co property data into Sheets, warehouses, or your own API
How to scrape 99.co
- Open 99.co Scraper in Apify Console.
- Set market (
SG/ID/all), channel (BUYorRENT), and property type(s), or paste 99.co start URLs. - Choose max listings / max pages and whether to open detail pages.
- Keep Apify Proxy → RESIDENTIAL enabled (country defaults to SG or ID by market).
- Click Start, then export results from the Dataset tab.
Markets covered
| Code | Site | Typical proxy |
|---|---|---|
SG | 99.co/singapore | RESIDENTIAL + SG |
ID | 99.co/id | RESIDENTIAL + ID |
Not included: sister brands on different domains — Rumah123.com, SRX, iProperty.com.sg.
Property categories
| Market | Categories |
|---|---|
Singapore (SG) | hdb, condos-apartments, houses, executive-condominiums, rooms (RENT), commercial, shophouse, retail, offices, industrial, warehouse |
Indonesia (ID) | rumah, apartemen, ruko, tanah, kost, gudang, vila, ruang-kantor, komersial, hotel, pabrik, gedung-bertingkat, toko, kios (RENT) |
propertyType— single categorypropertyTypes— multi-select; overridespropertyTypewhen non-emptyallexpands each market’s primary navigation categories
Example input — scrape Singapore condos, HDB, and houses for sale
{"market": "SG","channel": "BUY","propertyTypes": ["condo", "hdb", "houses"],"maxItems": 30,"maxPages": 1,"scrapeDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "SG"}}
Example input — scrape Indonesia apartemen for sale
{"market": "ID","channel": "BUY","propertyType": "apartemen","maxItems": 20,"maxPages": 1,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "ID"}}
Example input — scrape Singapore room rentals
{"market": "SG","channel": "RENT","propertyType": "rooms","maxItems": 20,"maxPages": 1}
Example input — 99.co search URL
{"startUrls": [{"url": "https://www.99.co/singapore/sale/condos-apartments"}],"maxItems": 15,"maxPages": 1}
Supported URL patterns
- Singapore sale/rent:
https://www.99.co/singapore/sale,/sale/hdb,/rent/rooms,/sale/commercial/offices, … - Singapore detail:
/singapore/{sale\|rent}/property/{slug} - Indonesia jual/sewa:
https://www.99.co/id/jual/apartemen,/id/sewa/rumah, … - Indonesia detail:
/id/properti/{slug}-cp-{id} - Pagination: SG
?page_num=2· ID?hlmn=2
How much does it cost to scrape 99.co?
This Actor uses Pay per event pricing. You pay for:
| Event | Price |
|---|---|
Actor Start (apify-actor-start) | $0.005 per start (scaled by run memory: one event per GB, minimum one) |
result (apify-default-dataset-item) | $2.50 / 1,000 results ($0.0025 per listing in the default dataset) |
Platform usage (compute, residential proxy, etc.) is also billed to the user on top of event charges.
Example (illustrative): 1 start + 1,000 listings ≈ $0.005 + $2.50 in event fees, plus platform usage for the run.
Tip: set a max total charge on the run if you want a hard spending cap. Start with maxItems 5–20 while validating fields and proxy.
Input
Open the Input tab for the full schema. Main fields:
| Field | Purpose |
|---|---|
startUrls | 99.co SG / ID search or listing URLs |
market / markets | SG, ID, or all |
channel | BUY or RENT |
propertyType / propertyTypes | Category or multi-select (all expands primary cats) |
maxItems / maxPages | Caps (fair-shared across categories) |
scrapeDetails | Enrich each card from the listing detail page |
requestDelayMillis | Delay between navigations |
proxyConfiguration | Prefer Apify RESIDENTIAL; country matched to market when omitted |
Output example
You can download the dataset extracted by 99.co Scraper in JSON, HTML, CSV, or Excel.
{"id": "balmoral-tower-condo-7T4xvri2E4dJWdoFwmWVFz","url": "https://www.99.co/singapore/sale/property/balmoral-tower-condo-7T4xvri2E4dJWdoFwmWVFz","source": "99.co","market": "SG","sourceCountry": "SG","channel": "BUY","operationType": "sale","propertyType": "condos-apartments","title": "Balmoral Tower","price": 12380000,"priceCurrency": "SGD","priceFormatted": "S$ 12,380,000","pricePsf": 2474,"bedrooms": "6+1","floorAreaSqft": 5005,"mrt": {"name": "Newton MRT","walkMinutes": 8,"distanceM": 587},"scrapedAt": "2026-07-18T14:03:14.875380+00:00"}
Indonesia example (IDR):
{"id": "1013025068","url": "https://www.99.co/id/properti/apartemen-dijual-600jt-tangerang-cp-1013025068","source": "99.co","market": "ID","channel": "BUY","propertyType": "apartemen","title": "Dijual Segera Apartemen 1 KT & 1 KM di Tangerang, Tangerang","price": 600000000,"priceCurrency": "IDR","priceFormatted": "Rp 600 Juta","bedrooms": 1,"sourceLayer": "next_data","scrapedAt": "2026-07-18T14:32:56.000000+00:00"}
Is it legal to scrape 99.co?
Our scrapers are ethical and do not extract private user data that is not shown on public listing pages. They only extract what 99.co has chosen to display publicly.
Contact policy: Call / WhatsApp / Show phone controls are detected as presence flags only (callButtonPresent, whatsappButtonPresent). Phone numbers are never clicked, revealed, or stored (contact.phoneNumber is always null).
You should still comply with site terms, applicable Singapore / Indonesia and international laws (including personal-data rules for agent contacts), and only scrape when you have a legitimate purpose. If unsure, consult your lawyers.
Actor name note
The platform Actor slug remains ninetynine-co-sg-scraper for continuity (historical SG-first publish). The Store title/description cover Singapore + Indonesia. Functionally this Actor scrapes both markets on www.99.co.
FAQ
How do I scrape 99.co Singapore condos for sale?
Set market to SG, channel to BUY, and propertyType to condo (or condos-apartments). Keep RESIDENTIAL + SG proxy enabled.
How do I scrape 99.co Indonesia apartemen or rumah?
Set market to ID, channel to BUY or RENT, and propertyType to apartemen or rumah. Use apifyProxyCountry: "ID".
How do I scrape HDB listings on 99.co?
Use market: "SG" and propertyType: "hdb" (sale or rent). HDB is Singapore-only.
How do I scrape 99.co room rentals?
Set channel to RENT and propertyType to rooms. The Actor uses /singapore/rent/rooms.
How do I scrape commercial offices or shops on 99.co?
Set market to SG and propertyType to offices, retail, industrial, warehouse, shophouse, or commercial.
Do I need a 99.co API key?
No. This Actor scrapes the public 99.co websites and returns structured property data — useful when you need a 99.co data API without an official partnership.
Can I export 99.co listings to Google Sheets or Excel?
Yes. Download the Dataset as Excel/CSV, or use Apify integrations and the Dataset API to push results into Sheets, webhooks, or your backend.
Why is a residential proxy required?
99.co uses Cloudflare. Plain HTTP often returns 403 / “Just a moment…”. Cloud runs should use Apify RESIDENTIAL with country SG or ID.
What if a 99.co scrape returns zero results?
Confirm market / category URL, keep the matching residential proxy on, try a smaller maxItems, and inspect Key-Value Store ERROR_SUMMARY / OUTPUT / DEBUG_* records.
Tips for better 99.co scraping
- Prefer
propertyTypesfor multi-category runs; useallto expand primary categories. - Enable
scrapeDetailswhen you need richer LDP fields (description, geo, sections). - Keep
requestDelayMillisaround 1500–2500 for stable sessions. - Start with small
maxItemsto validate price / category tags before scaling. - Match proxy country to market (
SGvsID) for higher success rates.
Support
Questions or feature requests? Open an issue on the Actor page or contact the developer through Apify. Feedback on additional filters, districts, or export formats is welcome.