99.co Property Scraper — Singapore Listings & Agent Leads
Pricing
$4.00 / 1,000 property listing scrapeds
99.co Property Scraper — Singapore Listings & Agent Leads
Scrape Singapore property from 99.co — HDB, condos, landed & commercial, for sale or rent. Get prices, PSF, beds, floor area, tenure, MRT distance, geo-coordinates, photos plus the listing agent name, phone & WhatsApp. Monitoring mode returns only new listings. Export to JSON, CSV, Excel.
Pricing
$4.00 / 1,000 property listing scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
14
Total users
1
Monthly active users
19 days ago
Last modified
Categories
Share
99.co Property Scraper — Singapore Listings, Prices & Agent Leads
Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by 99 Group or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "99.co" is referenced only to describe the publicly available website this Actor collects data from.
Extract complete Singapore property data from 99.co — sale & rent listings across HDB, condos, apartments, landed houses, executive condominiums, rooms and commercial units. Get the fields that actually matter: real asking prices, price-per-sqft, bedrooms/bathrooms, floor & land area, tenure, TOP/built year, exact geo-coordinates, nearest-MRT distance and walk time, photos — plus the listing agent's name, phone and WhatsApp, so every result doubles as a ready-to-contact lead.
No login, no cookies, no browser automation — fast direct-from-API extraction with the richest dataset in the category.
Why this 99.co scraper?
Most property scrapers return a thin row — price, beds, a URL — and leave the rest empty. This actor pulls 99.co's own internal listings API and ships every field on the card, including agent contacts and MRT connectivity:
| Data | Typical scrapers | This actor |
|---|---|---|
| Asking price + price/sqft | ✅ | ✅ |
| Beds, baths, floor area, land area | partial | ✅ all |
| Tenure (freehold / 99-yr) + TOP/built year | ❌ | ✅ |
| Geo-coordinates (lat/lng) | partial | ✅ |
| Nearest MRT — line, walk time, distance | ❌ | ✅ |
| All listing photos | partial | ✅ |
| USP / highlight tags | ❌ | ✅ |
| Listing agent name | ❌ | ✅ |
| Agent phone + WhatsApp | ❌ | ✅ |
| Premium / corporate agent flags | ❌ | ✅ |
| Monitoring mode (only new listings) | ❌ | ✅ |
Use cases
- Real-estate agent lead generation — every listing carries the agent's name, phone and WhatsApp. Filter by area, price band or property type and build a contact list of active Singapore agents in minutes.
- Property market & price intelligence — track asking prices, price-per-sqft and new-launch supply by district, MRT line, HDB town or condo project.
- Investor & buyer deal-hunting — monitor just-listed units that match your criteria (e.g. freehold 3-bedders near an MRT under a price cap) and act before the market.
- Portals, apps & valuation models — feed structured, geo-tagged listing data with full specs into your own search app, CMA tool or pricing model.
- Competitor & agency monitoring — watch which agencies and agents dominate a neighbourhood and how fast their inventory turns over.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the 99.co Property Scraper, paste one or more 99.co search URLs (or use the simple sale/rent + property-type builder), and click Start.
- Watch results stream into the dataset table.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Tip: any 99.co filter works
Open 99.co, set any filters in the UI — location, district, MRT, price range, bedrooms, property type, freehold, floor level, and so on — then copy the URL from your browser and paste it into searchUrls. The scraper reproduces that exact search and paginates through every page. No need to learn parameters.
Input
{"searchUrls": ["https://www.99.co/singapore/sale/condos-apartments?price_max=2000000&num_beds=3","https://www.99.co/singapore/rent/hdb"],"sortBy": "recency","maxResults": 500,"monitoringMode": false,"includeAgentContacts": true}
- searchUrls — one or more 99.co search/listing pages with whatever filters you want. Leave empty to use the simple builder.
- listingType / propertyType — the simple search builder (
sale/rent×hdb/condo/landed/ec/room/commercial), used only when no URLs are provided. - sortBy —
relevance(default),recency(newest first — best for monitoring),price_low,price_high. - maxResults (default 200) — listings per search;
0= no limit (scrapes every available page). - monitoringMode (default false) — remember listings from previous runs (per search) and output only the new ones. See below.
- includeAgentContacts (default true) — include agent name, phone and WhatsApp. Turn off to exclude all agent personal data.
- proxyConfiguration (default Singapore residential) — required; 99.co is served from Singapore behind Cloudflare. Keep the default.
Output
One record per listing:
{"listingId": "iD6zEuiwhqX8AMzsxjgCUs","listingUrl": "https://www.99.co/singapore/sale/property/toh-drive-landed-iD6zEuiwhqX8AMzsxjgCUs","listingTitle": "5 Bed Bungalow (Landed) for Sale in Toh Estate","listingType": "sale","propertySegment": "residential","mainCategory": "landed","subCategory": "Bungalow","price": 8700000,"priceFormatted": "S$ 8,700,000","currency": "SGD","isNegotiable": true,"pricePerSqft": 1401,"bedrooms": "5","bathrooms": 5,"builtUpSqft": 4400,"landAreaSqft": 6211,"tenure": "Freehold","builtYear": 2013,"furnishing": null,"address": "Toh Drive","neighbourhood": "Loyang East","region": "East Region","latitude": 1.3646052524058343,"longitude": 103.97297793694283,"nearestMrtName": "Loyang MRT","nearestMrtLines": ["CR 3"],"mrtWalkMinutes": 10,"mrtDistanceMeters": 737,"postedAt": "2026-06-12T06:36:09.182Z","photoCount": 8,"coverPhotoUrl": "https://pic2.99.co/v3/bcYm9D96gMdF7wMsM9LNtn?...","photoUrls": ["https://pic2.99.co/v3/bcYm9D96gMdF7wMsM9LNtn?...", "..."],"uspTags": ["Near MRT Station", "Spacious Layout", "Freehold Property"],"agentName": "Julie Phua","agentPhone": "+6591500299","agentWhatsapp": "+6591500299","agentIsPremium": true,"agentIsCorporate": false,"isWhatsappEnquiryAllowed": true,"searchUrl": "https://www.99.co/singapore/sale","scrapedAt": "2026-06-12T12:00:00.000Z"}
Monitoring — get only new listings
Turn on monitoringMode and the actor remembers which listings it has already returned for each search (in a persistent key-value store) and, on the next run, outputs only listings that are new since last time.
This is a pure result filter — the actor still runs once and exits, so it works with, not against, the Apify scheduler:
- Set
monitoringMode: trueandsortBy: recency. - Create an Apify Schedule (e.g. every hour) for the actor.
- Add a webhook or Zapier step to push each new listing into your CRM, Slack or a spreadsheet.
You now have a live feed of just-listed Singapore properties (and fresh agent leads) with zero duplicates.
How much does it cost to scrape 99.co?
This Actor uses Apify's pay-per-event pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:
- Property Listing Scraped - One 99.co property listing with full details: price, PSF, bed/baths, floor area, tenure, location, geo-coordinates, nearest MRT, photos and the listing agent's contact details.
The current price of each event is shown on the Pricing tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it hourly/daily to monitor new listings in a district, MRT zone, or price band.
- Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/99-co-property-scraper').call({searchUrls: ['https://www.99.co/singapore/sale/condos-apartments?num_beds=3'],sortBy: 'recency',maxResults: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} listings & agent leads`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new agent leads straight into your CRM.
- Slack — get notified when a monitored search finds new listings.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find 3-bedroom condos for sale near an MRT under S$2M on 99.co and list the agents" and let it run this scraper for you.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
- Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
More scrapers from scrapesage
Build a complete Singapore + lead-gen data stack:
- SGCarMart Used Car Scraper — Singapore used-car prices, COE/OMV/ARF and dealer leads.
- Airbnb Scraper & Market Monitor — short-stay listings, prices and availability.
- Eventbrite Scraper — events + organizer leads with contact data.
- LinkedIn Jobs Scraper — job postings as hiring-intent signals.
- Facebook Ad Library Scraper — competitor ad intelligence.
- Google Ads Transparency Scraper — who's advertising what on Google.
- Telegram Scraper — channels, messages, media and search.
Tips
- Exhaust a big search: 99.co caps very deep pagination. To pull a large segment fully, split it into narrower searches (by district, price band, or property type) — each paginates independently.
- Cheapest, freshest leads: combine
sortBy: recency+monitoringMode+ an hourly Schedule so each run scrapes only the handful of brand-new listings. - Keep the Singapore residential proxy: 99.co is geo-served and Cloudflare-protected; datacenter or non-SG IPs get blocked.
- Map view: every record has
latitude/longitude— drop the dataset straight onto a map or into a geospatial tool.
FAQ
Which property types does it cover? Everything on 99.co Singapore — HDB resale, condos & apartments, landed houses, executive condominiums (EC), rooms, and commercial — for both sale and rent.
Do I need to learn URL parameters? No. Apply filters on 99.co normally and paste the resulting URL. The scraper mirrors that exact search, including every filter you set.
Where do the agent phone numbers come from? They are the contact numbers each agent publishes on their own 99.co listing — the same details a buyer sees on the page. Set includeAgentContacts: false to exclude them.
How do I get only new listings? Turn on monitoringMode and sort by recency, then schedule the actor. Each run outputs only listings not seen on previous runs — no duplicates.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
Is scraping 99.co legal? This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (e.g. Singapore's PDPA for personal data) and 99.co's terms.
A field is null — why? Some listings genuinely omit a value (e.g. no floor area for a landed home, or an agent who hides furnishing). Fields are null only when the data isn't published, never because the scraper skipped them.
Data & lawful use
This Actor reads business and professional listings that the professionals themselves published to be found: names, roles, firms, ratings and the contact details shown on the public listing. Because those details belong to identifiable people, treat the output as personal data. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis (usually legitimate interest for B2B prospecting or market research), keep any outreach relevant to the professional's line of work, honour opt-outs and deletion requests, and do not use the output for spam.
Under Apify's Standard Actor Contract, which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.
Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by 99 Group or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
"99.co" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official 99.co product, is not authorised or certified by 99 Group, and does not distribute 99.co software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.