
99.co Singapore Property Scraper
hipersoft/99co-scraper
Scrape 99.co Singapore property listings: price, price psf, beds, baths, size, tenure, district, postal code, agent, coordinates and URL. Sale or rent, bulk.
Total users
1Monthly users
1Total runs
89Per listing scraped
$0.003Last rebuilt
Oct 28, 2026Overview
Scrape 99.co Singapore property listings into clean JSON, CSV or Excel. This 99.co scraper extracts price, price per sqft, bedrooms, bathrooms, floor size, tenure, completion year, district, street, postal code, agent and coordinates for both sale and rent listings, in bulk. Fast and reliable.
Great for property research, price benchmarking, agent lead generation and market monitoring.

What does 99.co Property Scraper do?
The 99.co Property Scraper collects Singapore residential and commercial property listings and returns them as structured data. It crawls sale and rent listings and extracts every key data point — pricing, size, location and the marketing agent — so you can export a complete property dataset without any manual copy-paste.
What data can you scrape from 99.co?
| Category | Fields |
|---|---|
| 💰 Pricing | price, price formatted, price per sqft |
| 🏠 Property | property name, listing type, main category, sub category, bedrooms, bathrooms, floor size (sqft), tenure, completion year |
| 📍 Location | address, district number, street name, postal code, latitude, longitude |
| 👤 Agent | agent name, agent ID |
| 🔗 Links & media | listing URL, source URL, cover photo URL |
| 🕒 Meta | listing ID, posted date, description, collected date |
What you get

Each listing is returned as one clean record. Example output:
{
"id": "QXiw6M9urAnhvTTaUYPT2T",
"propertyName": "Rosewood Suites",
"listingType": "sale",
"subCategory": "Condo",
"price": 1350000,
"priceFormatted": "S$1,350,000",
"pricePsf": 1072,
"bedrooms": 3,
"bathrooms": 2,
"sizeSqft": 1259,
"tenure": "99 yrs",
"completedYear": 2011,
"address": "Rosewood Drive, Singapore",
"districtNumber": 25,
"streetName": "Rosewood Drive",
"postalCode": "737916",
"latitude": "1.44",
"longitude": "103.79",
"agentName": "Jane Tan",
"agentId": "a1b2c3",
"photoUrl": "https://.../cover.jpg",
"postedAt": 1753862400000,
"description": "Spacious 3-bedroom unit near the MRT.",
"url": "https://www.99.co/singapore/sale/property/rosewood-suites-condo",
"sourceUrl": "https://www.99.co/singapore/sale",
"collectedAt": "2026-07-30T10:00:00.000Z"
}
Output schema
| Field | Type | Description |
|---|---|---|
id |
string | Unique listing identifier. |
propertyName |
string | Name of the property or development. |
listingType |
string | Whether the listing is for sale or rent. |
mainCategory |
string | Top-level property category (residential or commercial). |
subCategory |
string | Property type such as Condo, HDB or Landed. |
price |
integer | Listing price in SGD. |
priceFormatted |
string | Human-readable price string. |
pricePsf |
integer | Price per square foot in SGD. |
bedrooms |
integer | Number of bedrooms. |
bathrooms |
integer | Number of bathrooms. |
sizeSqft |
integer | Floor area in square feet. |
tenure |
string | Land tenure, e.g. 99 years or freehold. |
completedYear |
integer | Year the property was completed. |
address |
string | Full property address. |
districtNumber |
integer | Singapore postal district number. |
streetName |
string | Street name of the property. |
postalCode |
string | Singapore postal code. |
latitude |
string | Geographic latitude of the property. |
longitude |
string | Geographic longitude of the property. |
agentName |
string | Name of the marketing agent on the listing. |
agentId |
string | Unique identifier of the listing agent. |
photoUrl |
string (URL) | Cover photo image URL. |
postedAt |
integer | Timestamp when the listing was posted. |
description |
string | Listing description text. |
url |
string (URL) | Direct link to the listing. |
sourceUrl |
string (URL) | Source page URL for the listing. |
collectedAt |
string (ISO date) | Timestamp when the record was collected. |
Use cases
- Property price research — benchmark prices and price-per-sqft across districts and property types.
- Agent lead generation — build a list of active marketing agents with the listings they represent.
- Market monitoring — track new sale and rent listings over time to spot trends.
- Comparative market analysis — pull comparable units by size, tenure and location.
- Investment screening — filter by price, yield indicators and completion year.
- Data enrichment — join property records with your own CRM or valuation models.
How to scrape 99.co data
- Add the 99.co Property Scraper to your Apify account.
- Choose the listing type — for sale or for rent.
- Optionally set a main category and the maximum number of listings.
- Click Run.
- Export the results as JSON, CSV, Excel or XML, or pull them via the Apify API.
Input
{
"listingType": "sale",
"mainCategory": "",
"maxItems": 500
}
| Field | Type | Description |
|---|---|---|
listingType |
string | sale or rent. |
mainCategory |
string | Optional main category filter (residential / commercial). Leave empty for all. |
maxItems |
integer | Maximum number of listings to scrape. |
Need more Singapore property data?
- PropertyGuru Singapore Scraper
- EdgeProp Singapore Scraper
- SRX Property Scraper
- Singapore HDB Resale Flat Prices
FAQ
How many listings can I scrape?
As many as you like — set maxItems to cap the run, or leave it high to pull everything available.
Do I need any setup or a login? No setup and no login. Just add the actor, choose sale or rent, and run.
Can I scrape both sale and rent listings?
Yes. Set listingType to sale or rent.
What export formats are supported? JSON, CSV, Excel and XML, plus programmatic access through the Apify API.
How does billing work? You pay only per item you get, so costs scale with the number of listings you scrape.
Is the data only public data? Yes — the scraper returns only publicly available listing information.
Can I integrate this with other tools? The 99.co Property Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Notes
Original clean-room implementation. Returns only public data; you are responsible for compliance with 99.co's terms. Not affiliated with 99.co.
Input
| Field | Type | Description |
|---|---|---|
listingTypeListing type | string · sale, rent | Properties for sale or for rent. Default: "sale" |
mainCategoryCategory (optional) | string | Optional main category, e.g. Empty = all. |
maxItemsMax listings | integer | Maximum listings to scrape. Default: 200 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~99co-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/99co-scraper").call(run_input={})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/99co-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Listing scraped One property listing scraped. | $0.003 | $0.0015 |
| API request One search page fetched (30 listings). | $0.001 | $0.001 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
CNN Fear & Greed Index Scraper
Scrape the CNN Fear & Greed Index: current market-sentiment score and rating, a full historical timeline, and all seven component indicators. Clean structured JSON, CSV or Excel for trading signals, backtesting, dashboards and alerting.
547 runs · 6 users · $0.003 / item scrapedDivar Scraper
Scrape classified ads from Divar, Iran's largest marketplace: title, price (Toman), category, city, district, images and the listing URL. Search any Iranian city with an optional keyword and export one clean row per ad as JSON, CSV or Excel. For market research, price tracking and n8n.
224 runs · 22 users · $0.003 / listing scrapedAirbnb Scraper
Search Airbnb by location and scrape listings: name, property type, price, rating, reviews, coordinates, photos, badges and link. For short-term rental, pricing and market research.
122 runs · 2 users · $0.005 / listing scrapedSingapore HDB Property Information Scraper
Export master data for every HDB block in Singapore (~13,300 blocks): address, town, year completed, max floor, total units, unit mix by flat type (sold & rental) and amenities (market/hawker, carpark, commercial, pavilion). Filter by town, street, year. Public open data, no setup.
113 runs · 1 users · $0.002 / block scrapedPropertyGuru Singapore Scraper
Scrape PropertyGuru Singapore property listings: price, beds, baths, size, address, property type, agent and URL. For property research and lead generation.
106 runs · 3 users · $0.004 / listing scrapedEdgeProp Singapore Property Scraper
Scrape EdgeProp Singapore property listings for sale and rent: price, address, beds, baths, size, PSF and URL.
105 runs · 1 users · $0.004 / listing scrapedSend the site and the fields. We build it and you get it first.