# EdgeProp.sg Scraper — Singapore Real Estate Data (`logiover/edgeprop-sg-scraper`) Actor

Scrape EdgeProp.sg Singapore property listings (sale & rent): price, PSF, bedrooms, bathrooms, floor area, project, district, tenure, images plus the listing agent name, agency, agent ID and mobile. No login, no API key. Great for Singapore property data export and real-estate agent lead generation.

- **URL**: https://apify.com/logiover/edgeprop-sg-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate, Lead generation, AI
- **Features:** Limited permissions
- **Stats:** 12 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## EdgeProp.sg Scraper — Singapore Real Estate Listings, Prices & Property-Agent Leads (No API)

<img src="https://cdn-icons-png.flaticon.com/128/619/619153.png" width="92" alt="EdgeProp.sg Scraper"/>

![Apify Actor](https://img.shields.io/badge/Apify-Actor-00A67E?logo=apify\&logoColor=white) ![No API key](https://img.shields.io/badge/No%20API%20key-required-2ea44f) ![Pay per result](https://img.shields.io/badge/Pricing-Pay%20per%20result-1C7ED6) ![Real Estate](https://img.shields.io/badge/Category-Real%20Estate-8B5CF6) ![Export](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-F59E0B)

Turn **edgeprop.sg**, one of Singapore's leading real-estate portals, into clean, structured **Singapore property data** — every condo, HDB flat and landed home for sale or rent, with **no browser, no API key and no login**. This **EdgeProp scraper** reads the site's own structured Next.js listing data directly and returns one clean row per property: asking price (SGD), raw price string and **PSF (price per sqft)**, floor and land area in sqft + sqm, bedrooms, bathrooms, project, street, postal code, district, planning region and market segment (CCR / RCR / OCR), tenure and year completed — plus the **property-agent leads** (name, CEA registration number, agency and phone) behind each listing. It works as a practical **EdgeProp API alternative** and a ready-made **PropertyGuru alternative data** source, exporting straight to CSV, Excel or JSON.

> ### 🏆 Why this EdgeProp scraper?
>
> **35+ fields per listing** · **thousands of listings per run** · price + PSF in SGD · floor & land area (sqft + sqm) · district, tenure & CCR/RCR/OCR segment · **agent name + CEA ID + agency + phone** · sale & rent · export to JSON / CSV / Excel. The unofficial **EdgeProp API alternative** for Singapore real-estate data and property-agent leads.

***

### ✨ What this Actor does / Key features

- 🏙️ **All segments, sale & rent** — condo / apartment, **HDB** (resale + rent) and **landed**, for both sale and rent (plus room rentals), across the whole island.
- 💰 **Full pricing** — asking price (SGD), raw price string and **PSF (price per sqft)** on every listing.
- 📐 **Size & layout** — floor area (sqft + sqm), land area (sqft + sqm) for landed homes, **bedrooms** and bathrooms.
- 📍 **Location detail** — project / development, street, postal code, postal district, planning region and market segment (CCR / RCR / OCR).
- 📜 **Tenure & age** — freehold / leasehold tenure and year completed, plus new-launch and developer-listing flags.
- 🎯 **Property-agent leads** — agent name, **CEA registration number**, agency, **phone number** and agent profile URL, so a single run doubles as a broker outreach list.
- 📈 **High-volume mode** — price-band sharding slices each category into asking-price bands to pull thousands of unique, deduplicated listings per category (instead of just the top 20).
- 🔓 **No login, no API key** — reads public listing data over the site's own Next.js data; works as an unofficial **EdgeProp API** alternative.
- ⚡ **No browser, cheap proxy** — datacenter proxy (the default) is enough for edgeprop.sg, keeping runs fast and low-cost.
- 📤 **Export anywhere** — one clean row per listing to **CSV, Excel or JSON**, or pull from the Apify API / webhooks.

***

### 🚀 Quick start (3 steps)

1. **Configure** — pick a `propertyType` (condo / hdb / landed / any) and `listingType` (sale / rent / room), or paste EdgeProp category URLs into `startUrls`. Keep **high-volume mode** on for deep coverage and set `maxResults` to cap the run.
2. **Run** — click **Start**. The Actor reads EdgeProp's structured listing data, shards each category into price bands, deduplicates by listing ID and paginates over Apify Proxy.
3. **Get your data** — open the **Output** tab and download as **CSV, Excel or JSON**, or pull it from the Apify API / webhooks. One clean row per property, with price, PSF, project, district and the agent included.

***

### 📥 Input

No input is strictly required — the defaults scrape condos for sale. Use the simple selectors, or paste EdgeProp category URLs from your browser to override them.

**Example 1 — condos for sale**

```json
{
  "propertyType": "condo",
  "listingType": "sale",
  "maxResults": 1000
}
```

**Example 2 — HDB flats for rent**

```json
{
  "propertyType": "hdb",
  "listingType": "rent",
  "maxResults": 500
}
```

**Example 3 — paste specific EdgeProp category URLs**

```json
{
  "startUrls": [
    "https://www.edgeprop.sg/condo-apartment-for-sale",
    "https://www.edgeprop.sg/hdb-for-rent"
  ],
  "maxResults": 2000
}
```

| Field | Type | Description |
|-------|------|-------------|
| `propertyType` | string | `condo`, `hdb`, `landed` or `any`. Picks the EdgeProp category. Ignored when `startUrls` is set. |
| `listingType` | string | `sale`, `rent` or `room` (room rental). Ignored when `startUrls` is set. |
| `startUrls` | array | Optional. Paste edgeprop.sg category URLs (e.g. `https://www.edgeprop.sg/condo-apartment-for-sale`) — these override the selectors above. Any `/all` suffix and query string are normalized automatically. |
| `maxResults` | integer | Global cap across all categories. `0` = no limit. Default `200`. |
| `maxResultsPerSearch` | integer | Per-category cap. `0` = no per-category cap. |
| `priceShardSharding` | boolean | **High-volume mode.** Slices each category into asking-price bands to pull thousands of unique listings (deduped by listing ID). Off = top 20 recommended per category. Default `true`. |
| `maxConcurrency` | integer | How many price-band requests to fetch in parallel per category (1–6, default 4). |
| `useProxy` / `proxyConfiguration` | boolean / object | Apify Proxy — **datacenter (the default) is enough** for edgeprop.sg. Switch to RESIDENTIAL only if you hit persistent challenges. |

***

### 📤 Output

One clean, flat row per property listing. Below is a trimmed sample; the full field reference (35+ fields) follows. Export to CSV, Excel or JSON, or pull via the Apify API.

```json
{
  "listingId": "m_1980317",
  "url": "https://www.edgeprop.sg/listing/apartment-condo/condominium/26-NEWTON/m_1980317",
  "listingType": "sale",
  "propertyType": "Apartment / Condo",
  "propertySubType": "Condominium",
  "title": "26 NEWTON",
  "project": "26 NEWTON",
  "street": "Newton Road",
  "postalCode": "307957",
  "district": "11",
  "planningRegion": "Central Region",
  "projectRegion": "CCR",
  "price": "2110900",
  "priceRaw": "S$ 2,110,900",
  "priceCurrency": "SGD",
  "psf": "1886",
  "bedrooms": "2",
  "bathrooms": "2",
  "floorAreaSqft": "1119",
  "floorAreaSqm": "103.96",
  "landAreaSqft": null,
  "landAreaSqm": null,
  "tenure": "Freehold",
  "yearCompleted": "2016",
  "assetId": "13245",
  "agentName": "Martin Goh",
  "agentId": "R001839F",
  "agency": "REALSTAR PREMIER GROUP PRIVATE LIMITED",
  "agentPhone": "93202020",
  "agentUrl": "https://www.edgeprop.sg/property-agents/Martin-Goh-93202020",
  "image": "https://img.tepcdn.com/.../e8bcdf6e.jpg",
  "scrapedAt": "2026-06-07T10:31:24.950Z"
}
```

<details><summary><b>📋 Full field reference (click to expand)</b></summary>

| Field | Description |
|-------|-------------|
| `listingId` | Unique EdgeProp listing ID |
| `url` | Canonical listing URL on edgeprop.sg |
| `listingType` | `sale`, `rent` or `room` |
| `propertyType` | Property type (e.g. Apartment / Condo, HDB, Landed) |
| `propertySubType` | Sub-type (e.g. Condominium, Executive Condominium, Cluster House) |
| `title` | Listing / project title |
| `project` | Project or development name |
| `street` | Street name |
| `postalCode` | Singapore postal code |
| `district` | Postal district (e.g. 11) |
| `planningRegion` | Planning region (e.g. Central Region) |
| `projectRegion` | Market segment — CCR / RCR / OCR |
| `price` | Asking price (numeric) |
| `priceRaw` | Raw price string as shown on the site |
| `priceCurrency` | Currency (SGD) |
| `psf` | Price per square foot |
| `bedrooms` | Number of bedrooms |
| `bathrooms` | Number of bathrooms |
| `floorAreaSqft` | Floor / built-up area in sqft |
| `floorAreaSqm` | Floor / built-up area in sqm |
| `landAreaSqft` | Land area in sqft (landed) |
| `landAreaSqm` | Land area in sqm (landed) |
| `tenure` | Tenure (Freehold / 99-year leasehold, etc.) |
| `yearCompleted` | Year the development was completed |
| `assetId` | EdgeProp internal asset / project ID |
| `agentName` | Listing agent's name |
| `agentId` | Agent's **CEA registration number** |
| `agentPhone` | Agent's phone number (parsed from the agent's CEA profile URL) |
| `agentUrl` | Agent's public profile URL on EdgeProp |
| `agentPhoto` | Agent photo URL |
| `agency` | Agency / brokerage name |
| `developerListing` | Whether this is a developer listing |
| `isNewLaunch` | Whether the project is a new launch |
| `imageCount` | Number of listing images |
| `image` | Main listing photo URL |
| `insights` | EdgeProp neighbourhood / valuation insight tags |
| `updatedAt` | Listing last-updated timestamp |
| `scrapedAt` | ISO timestamp of when the row was scraped |

> ℹ️ **Agent phone note:** `agentPhone` is available for **most** listings, parsed from each agent's CEA profile URL. Where EdgeProp does not expose it, the field is empty. `landAreaSqft` / `landAreaSqm` are populated for landed homes and are `null` for condos and HDB flats.

</details>

***

### 💡 Use cases

- 📊 **Singapore property market analysis** — track asking prices, PSF, inventory and sale-vs-rent across districts and CCR / RCR / OCR segments.
- 🧮 **Rental yield & PSF research** — compare rents against sale prices and PSF per project to compute gross yield across projects and districts.
- 🎯 **Agent & brokerage lead generation** — build outreach lists of Singapore property agents (name · CEA ID · agency · phone) by area, price band or property type.
- 💹 **Investment screening** — filter condo / HDB / landed by tenure, year completed, size and price to shortlist deals.
- 📈 **Price tracking & alerts** — re-run on a schedule and diff against prior datasets to catch new listings and price movements.
- 🗂️ **Portals, dashboards & ML** — power a Singapore property feed, a BI dashboard or a valuation model from a scheduled run.

***

### 👥 Who uses it

Singapore property agencies & brokerages · proptech & portal builders · property investors · valuation & mortgage analysts · data journalists · market researchers · B2B lead-gen teams targeting property agents.

***

### 💰 Pricing

This Actor runs on Apify's **pay-per-result** model: you pay for the listings you extract, with no monthly subscription and no EdgeProp API fees. Datacenter proxy (the default) keeps runs cheap and fast. See the **Pricing** tab on the Actor's Apify page for current rates, and use `maxResults` to keep any run inside your budget.

***

### ❓ Frequently Asked Questions

#### Is this an EdgeProp API alternative?

Yes. EdgeProp.sg does not offer a public API for its listings. This Actor works as an unofficial **EdgeProp API alternative** — it reads the site's own structured listing data and returns clean, machine-readable rows (JSON / CSV / Excel) with no API key.

#### Can I scrape EdgeProp without an API or login?

Yes. The scraper reads public edgeprop.sg listing data **without any login or account**. Just pick a segment or paste EdgeProp category URLs and run it — no credentials, no token.

#### How do I export Singapore property data to CSV or JSON?

Run the Actor on any segment or EdgeProp URL, then open the **Output** tab and download the dataset as **CSV, Excel (XLSX) or JSON** — or pull it straight from the Apify API. Every property and agent field is included.

#### Is it legal to scrape EdgeProp.sg?

The Actor collects only **publicly available** listing data — the same information any visitor can see without logging in. You are responsible for complying with EdgeProp's terms of use and your local regulations, including Singapore's **PDPA** when handling property-agent contact details.

#### How much data can I get?

As much as your search returns. Because EdgeProp renders only the first page (~20 listings) for a bare category URL, keep **high-volume mode (price-band sharding)** on: it slices each category into asking-price bands so the scraper pulls **thousands of unique, deduplicated listings** per category. Set `maxResults` to `0` for no limit.

**Does it include the property agent's phone number?**
For most listings, yes. `agentPhone` is parsed from the agent's public CEA profile URL, alongside the agent name, **CEA registration number** (`agentId`), agency and profile link. A small share of listings expose no agent phone, in which case the field is empty.

**Do I need a residential proxy?**
No. EdgeProp.sg works well over the default **datacenter** proxy, which keeps runs cheap. Switch `proxyConfiguration` to RESIDENTIAL only if you hit persistent challenges.

**Does it cover HDB, condo and landed for both sale and rent?**
Yes. Pick `propertyType` (condo / hdb / landed / any) and `listingType` (sale / rent / room). For deep coverage across all of them, run each segment with high-volume mode on.

**How do I get Singapore property agent contact details?**
Every listing carries the agent's name, CEA registration number (`agentId`), agency and phone (`agentPhone`), so a single run doubles as a targeted Singapore property-agent leads list.

### 🔗 More real estate scrapers by logiover

Building a cross-country property dataset? Pair EdgeProp.sg with the rest of the suite and benchmark Singapore against Europe, the Gulf and beyond:

| Country | Actor |
|---------|-------|
| 🇦🇪 UAE / Dubai | [Property Finder Scraper](https://apify.com/logiover/propertyfinder-scraper) |
| 🇮🇹 Italy | [Casa.it Scraper](https://apify.com/logiover/casa-it-scraper-italy-real-estate) · [Subito.it Property Scraper](https://apify.com/logiover/subito-it-property-scraper) |
| 🇪🇸 Spain | [Habitaclia Scraper](https://apify.com/logiover/habitaclia-com-spain-scraper) · [Pisos.com Scraper](https://apify.com/logiover/pisos-com-property-scraper) |
| 🇳🇱 Netherlands | [Funda Scraper](https://apify.com/logiover/funda-scraper) |
| 🇩🇪 Germany | [ImmobilienScout24 Scraper](https://apify.com/logiover/immobilienscout24-de-scraper-germany-real-estate) |
| 🇫🇷 France | [Bien'ici Scraper](https://apify.com/logiover/bien-ici-fr-scraper-france-real-estate) |
| 🇩🇰 Denmark | [Boliga.dk Scraper](https://apify.com/logiover/boliga-scraper) |
| 🇬🇷 Greece | [Spitogatos Scraper](https://apify.com/logiover/spitogatos-gr-real-estate-scraper-greece-properties-data) · [XE.gr Scraper](https://apify.com/logiover/xe-gr-real-estate-scraper-greece-property-data) |
| 🇮🇪 Ireland | [MyHome.ie Scraper](https://apify.com/logiover/myhome-ie-scraper) |
| 🇺🇸 USA | [Realtor.com Scraper](https://apify.com/logiover/realtor-com-scraper) · [Redfin Scraper](https://apify.com/logiover/redfin-scraper) |
| 🇧🇷 Brazil | [VivaReal Scraper](https://apify.com/logiover/vivareal-scraper) |

👉 Browse all **[logiover scrapers on Apify Store](https://apify.com/logiover)** — 180+ actors across real estate, jobs, crypto, social media & B2B data.

***

### ⏰ Scheduling & integration

Put the Actor on an **Apify Schedule** and get a fresh EdgeProp listings feed every morning — straight to the Apify API, a webhook, Google Sheets, S3 or your data warehouse. Track new listings and price movements across the Singapore market on autopilot, and wire the output into **Make, n8n or Zapier** to trigger CRM syncs, price-drop alerts and BI dashboards.

### 🤖 AI Agents, MCP & RAG Integration

**EdgeProp.sg Scraper** works natively as an on-demand data tool for AI assistants and autonomous workflows.

Connect this Actor directly to **Apify AI**, **Claude Desktop**, **Cursor**, **VS Code**, **Windsurf**, **LangChain**, or **LlamaIndex** via the official **Apify MCP Server** — no custom wrapper code needed:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=logiover/edgeprop-sg-scraper"
    }
  }
}
```

- **Schema-typed inputs & outputs:** Clean JSON records with explicit `.actor/input_schema.json` and `.actor/output_schema.json` definitions so LLM agents infer parameters and parse fields accurately without HTML noise.
- **Bounded & predictable runs:** Built-in volume caps and pay-per-result budget guards prevent runaway agent tool loops.
- **RAG & automation ready:** Stream run datasets straight into vector stores, n8n, Make, Zapier, or webhook pipelines.

### 💬 Support, Issues & Reviews

- **Bug reports & target-site changes:** Hit an unexpected empty result or selector change? [Open a ticket in the Issues tab](https://apify.com/logiover/edgeprop-sg-scraper/issues) with your **Run ID** or sample input — we actively monitor issues and ship fixes fast.
- **Feature & field requests:** Need an additional data attribute or filter? [Request it in the Issues tab](https://apify.com/logiover/edgeprop-sg-scraper/issues).
- **Enjoying this Actor?** If it saved you engineering time, please consider leaving an honest [review on Apify Store](https://apify.com/logiover/edgeprop-sg-scraper/reviews) or bookmarking [logiover/edgeprop-sg-scraper](https://apify.com/logiover/edgeprop-sg-scraper) — organic developer feedback helps others discover reliable tools and keeps maintenance prioritized.

### ⚖️ Legal

This Actor collects **publicly available** real-estate listing data only — the same information any visitor can see without logging in. You are responsible for using the data in compliance with **EdgeProp.sg's terms of use**, your local regulations, and data-protection rules including Singapore's **PDPA** when handling any personal or property-agent details.

***

This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by EdgeProp.sg; EdgeProp.sg and all other trademarks mentioned here are the property of their respective owners.

### EdgeProp.sg scraping — frequently asked questions

#### Do I need a EdgeProp.sg API key, account or login?

No. This Actor reads publicly available pages and feeds, so there is nothing to register for and no credentials to manage.

#### How do I export EdgeProp.sg data to CSV, Excel, JSON or Google Sheets?

Open the **Storage** tab after a run and pick the format you want — CSV, Excel, JSON, XML or an HTML table. For Google Sheets, Airtable or a database, use the dataset URL or the Apify API so the sheet refreshes itself on every run.

#### Can I schedule this EdgeProp.sg scraper to run daily or hourly?

Yes. Use the **Schedules** tab and pick a cadence. Daily is enough for most tracking work; pick hourly only if the rows you care about really do change that fast.

#### How many rows can I get, and what does it cost?

See the volume section above for a measured figure. Billing is per result, so you pay for the rows you actually receive and a run that finds nothing costs nothing.

#### Is scraping EdgeProp.sg legal?

This Actor collects only information that EdgeProp.sg publishes publicly. It does not log in, does not defeat access controls and does not touch private data. You remain responsible for how you use the output, including under GDPR and similar rules where personal data is involved.

#### What happens if EdgeProp.sg blocks the run or changes its layout?

A refused exit IP is swapped for a fresh one within a quarter of a second and retried, and rate limiting is waited out rather than fought. If nothing gets through, the run **fails with the reason** instead of reporting success with zero rows — so an empty result always means "no matches", never "the source would not answer".

#### Can I use this with an AI agent, LangChain or an MCP client?

Yes. The Actor is callable over the Apify API and through Apify's MCP server, so an agent can run it and read the dataset back as a tool call.

### 📝 Changelog

#### 2026-11-11

- Added reliable terminal run status telemetry and structured Apify AI / MCP Server (`mcp.apify.com`) tool configuration.
- Added direct Issues & Reviews support links and refreshed live maintenance verification.

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: 1 link to retired Actors removed; independence disclaimer added.

#### 2026-10-15

- Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.
- Memory is managed within the run's own limit, which removes a rare out-of-memory crash on large pages.
- The default used when the field is left out for `maxResults` is now 5,714 (was 200).

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 38 columns returned, 91.1% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 2 column(s) came back empty in this sample (`landAreaSqft`, `landAreaSqm`); these are under review.

#### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

#### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

#### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.

#### 2026-07-06

- ✨ README overhaul: richer output sample, ready-to-run example scenarios, cross-country real-estate suite links, and clearer quick-start.

#### 2026-07-01

- Maintenance pass: re-verified end-to-end on live data and confirmed successful runs within the 5-minute quality window on the default input.
- Sharpened Store metadata (SEO title & description) and expanded the FAQ with high-intent, long-tail questions for easier discovery in Google and Apify Store search.
- Added ready-to-run example tasks that cover common real-world use cases.

#### 2026-06-15

- Reliability pass: re-verified end-to-end on live data with real-world inputs. Routine maintenance build.

***

\*Maintained: last verified 2026-11-11 — checked end-to-end against live run history (reliability, output fields and types, and time/memory budgets).

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/edgeprop-sg-scraper/changelog.md

# Actor input Schema

## `propertyType` (type: `string`):

Which Singapore property segment to scrape. Ignored when you supply your own Start URLs below.

## `listingType` (type: `string`):

For sale, for rent, or room rental. Ignored when you supply your own Start URLs below.

## `startUrls` (type: `array`):

Optional: paste EdgeProp.sg category URLs straight from the site, e.g. https://www.edgeprop.sg/condo-apartment-for-sale or https://www.edgeprop.sg/hdb-for-rent . When set, these override the Property type / Listing type selectors above. Any '/all' suffix and query string are normalized automatically.

## `maxResults` (type: `integer`):

Stop after this many listings across all categories. 0 = no limit. Singapore inventory spans tens of thousands of listings.

## `maxResultsPerSearch` (type: `integer`):

Cap listings per individual category. 0 = no per-category cap.

## `priceShardSharding` (type: `boolean`):

EdgeProp renders only the first page (20 listings) for a bare category URL. With this ON the scraper slices each category into asking-price bands so it can pull thousands of unique listings (deduplicated by listing ID). Turn OFF to grab just the top 20 recommended listings per category.

## `useProxy` (type: `boolean`):

Route requests through Apify Proxy. EdgeProp.sg works well over the default datacenter proxy.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Datacenter (the default) is sufficient for EdgeProp.sg. Switch to RESIDENTIAL only if you hit persistent challenges.

## `maxConcurrency` (type: `integer`):

How many price-band requests to fetch in parallel per category.

## Actor input object example

```json
{
  "propertyType": "condo",
  "listingType": "sale",
  "startUrls": [],
  "maxResults": 285,
  "maxResultsPerSearch": 0,
  "priceShardSharding": true,
  "useProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 4
}
```

# Actor output Schema

## `results` (type: `string`):

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [],
    "maxResults": 285
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/edgeprop-sg-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [],
    "maxResults": 285,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/edgeprop-sg-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [],
  "maxResults": 285
}' |
apify call logiover/edgeprop-sg-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/edgeprop-sg-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/po1UNdXAutoy4KNeH/builds/9dWH4wqSk8cGcDW4y/openapi.json
