A robust tool for collecting detailed property listings from 99.co, focused on Singapore’s real estate market. It helps teams and analysts turn scattered listings into structured, usable property data for research, analysis, and decision-making.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for 99-co-property-listings-scraper you've just found your team — Let’s Chat. 👆👆
This project extracts comprehensive real estate listings from 99.co and converts them into clean, structured datasets. It solves the problem of manually browsing and compiling property information by automating data collection at scale. The scraper is designed for data analysts, real estate professionals, and developers who need reliable property data.
- Collects structured listings from multiple search URLs
- Handles pagination for large result sets
- Normalizes pricing, size, and location details
- Captures agent and contact information
- Outputs data ready for analysis or storage
| Feature | Description |
|---|---|
| Multi-URL support | Scrape multiple search result pages in a single run. |
| Pagination handling | Automatically navigates through paginated listings. |
| Rich property details | Extracts prices, PSF, floor area, beds, and baths. |
| Media collection | Gathers high-quality property photos and listing URLs. |
| Agent information | Captures agent name, phone, and profile details. |
| Location insights | Includes nearest MRT station and walking distance. |
| Flexible output | Data can be exported in common structured formats. |
| Field Name | Field Description |
|---|---|
| listing_id | Unique identifier for the property listing. |
| listing_title | Title describing the property and listing type. |
| price | Asking price with currency formatting. |
| psf | Price per square foot value. |
| beds | Number of bedrooms. |
| bathrooms | Number of bathrooms. |
| floorarea_sqft | Total floor area in square feet. |
| lease_type | Lease duration or ownership type. |
| formatted_address | Full property address. |
| photo_urls | List of property image URLs. |
| agent | Agent name, contact details, and profile info. |
| commute_nearest_mrt | Nearest MRT station with distance and duration. |
| est_mortgage_formatted | Estimated monthly mortgage value. |
[
{
"searchUrl": "https://www.99.co/singapore/sale",
"listing_title": "2 Bed Apartment (Condo) for Sale in City Gate",
"price": "S$ 1,670,000",
"psf": "S$ 2,155 psf",
"beds": 2,
"bathrooms": 2,
"floorarea_sqft": 775,
"formatted_address": "371 Beach Road 199597",
"agent": {
"name": "Jas Ng",
"phone": "+6586660118"
},
"commute_nearest_mrt": {
"name": "Nicoll Highway MRT",
"distance": "267m",
"duration": "4 mins"
}
}
]
99.co Property Listings Scraper/
├── src/
│ ├── main.py
│ ├── extractors/
│ │ ├── listings_parser.py
│ │ ├── agent_parser.py
│ │ └── location_utils.py
│ ├── outputs/
│ │ ├── json_exporter.py
│ │ └── csv_exporter.py
│ └── config/
│ └── settings.example.json
├── data/
│ ├── input.sample.json
│ └── output.sample.json
├── requirements.txt
└── README.md
- Real estate analysts use it to collect market listings, so they can analyze pricing trends.
- Property investors use it to compare properties, so they can identify high-value opportunities.
- Data teams use it to build datasets, so they can power dashboards and reports.
- Developers use it to integrate property data, so they can enrich real estate platforms.
- Market researchers use it to track listings, so they can monitor supply changes.
Does this support multiple search pages? Yes. You can provide multiple search URLs, and the scraper will process them sequentially.
Can I limit the number of listings collected? Yes. You can configure a maximum item limit to control output size.
What formats can the data be exported in? The extracted data can be exported into structured formats such as JSON or CSV.
Is the data structured consistently? Yes. All fields are normalized to ensure consistency across listings.
Primary Metric: Processes an average of 35 to 45 listings per minute per search URL under normal conditions.
Reliability Metric: Maintains over 97 percent successful extraction rate across large result sets.
Efficiency Metric: Optimized requests keep memory usage stable even with thousands of listings.
Quality Metric: Over 95 percent field completeness for pricing, size, and location attributes.
