# Singapore URA Private Property Transactions API (`nexgendata/sg-ura-property-transactions`) Actor

Track Singapore URA private-property transactions (caveats). Clean JSON for analysts, researchers and AI agents.

- **URL**: https://apify.com/nexgendata/sg-ura-property-transactions.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 singapore ura private property transaction records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Singapore URA Private Property Transactions API

Track Singapore URA private-property transactions (caveats). Built for analysts, researchers, fintech builders and AI agents.

### 📊 What you get

Clean JSON, one record per transaction (full output has 17 fields):

- `area_sqft` — Area sqft
- `area_sqm` — Area sqm
- `completion_date` — Completion date
- `data_source` — Source of the data
- `district` — District
- `district_name` — District name
- `floor_level` — Floor level
- `is_luxury` — Is luxury
- `is_new_sale` — Is new sale
- `project_name` — Project name
  Records include a `data_source` field.

**Pricing:** $0.10 per transaction (Pay-Per-Event) — about **10 transactions per $1**.

### 🤖 Use with AI agents

Structured JSON built for LLM and agent pipelines — point Claude, the OpenAI Agents SDK, an n8n flow or any MCP-aware client at it and pull Singapore URA private property caveats and transactions on demand.

**Sample agent prompt:**

```
List private condo transactions in District 9 this quarter with PSF.
```

**Agentic payments (x402):** Supports agentic payment via x402 — agents can call this actor with USDC, no API key required.

### ⏰ Run on a schedule

This is a monitoring play — schedule a recurring pull:

```json
{
  "limit": 50
}
```

### 🔗 Related Singapore actors

**Singapore data suite:** [ACRA Company Search](https://apify.com/nexgendata/singapore-acra-companies), [SGX Announcements](https://apify.com/nexgendata/sgx-company-announcements), [GeBIZ Tenders](https://apify.com/nexgendata/singapore-gebiz-tenders), [HDB Resale](https://apify.com/nexgendata/singapore-hdb-resale-tracker)

**Cross-market hubs:** [APAC Disclosure Monitor](https://apify.com/nexgendata/apac-disclosure-monitor), [APAC IPO Calendar Sweep](https://apify.com/nexgendata/apac-ipo-calendar-sweep)

***

*Data from public Singapore sources.*

# Actor input Schema

## `district` (type: `string`):

URA divides Singapore into 28 postal districts. The Core Central Region (CCR) — D01 (Marina/Boat Quay/Raffles Place), D02 (Tanjong Pagar/Anson), D04 (Sentosa Cove/Telok Blangah), D06 (Clarke Quay/City Hall), D09 (Orchard/Killiney/River Valley), D10 (Bukit Timah/Holland/Tanglin), D11 (Newton/Novena/Thomson) — concentrates Singapore's luxury condo stock and most transactions above 5M SGD. The Rest of Central Region (RCR) — D03, D05, D07, D08, D12-D15 — covers prime fringe areas like Tiong Bahru, Pasir Panjang, Bugis, Geylang, Katong. Outside Central Region (OCR) — D16-D28 — covers mass-market suburban condos in Tampines, Pasir Ris, Hougang, Sengkang, Yishun, Woodlands, Choa Chu Kang. Pick 'ALL' to span every district, or a specific 'D09' / 'D10' / 'D11' for luxury-segment analysis.

## `property_type` (type: `string`):

URA private residential taxonomy. 'Condominium' (Singapore's dominant strata-title private housing — high-rise with shared facilities). 'Apartment' (smaller / older walk-up developments without full condo facilities). 'Executive Condominium' / 'EC' (public-private hybrid — 10-year MOP before becoming fully private — popular in OCR like Tampines, Punggol, Sengkang). 'Terrace' (landed strata or freehold rowhouses — common in D10, D11, D15, D19, D20). 'Semi-Detached' (paired landed houses). 'Detached' (standalone landed bungalows — the highest-value private segment, mostly D10/D11/D21 and Sentosa Cove D04). 'Strata Detached' / 'Strata Semi-D' / 'Strata Terrace' (cluster-house variants with strata title). Pick 'ALL' for everything.

## `type_of_sale` (type: `string`):

URA classifies each transaction as: 'New Sale' (developer-direct primary market sale — typically off-plan or first-hand from condo launch — strong indicator of new-supply absorption and developer pricing power); 'Sub Sale' (subsequent assignment of a yet-to-be-completed unit between private buyers — CCR speculation indicator); 'Resale' (secondary market — completed unit changes hands — the dominant volume segment). Pick 'ALL' to span all three. Investors often slice by 'New Sale' to track developer launch performance, or 'Resale' for genuine market price discovery.

## `min_price_sgd` (type: `integer`):

Lower bound on transacted price in Singapore Dollars. Filters out cheaper transactions client-side. Set to 5000000 to surface only luxury (>= 5M SGD) — useful for high-net-worth and family-office property research. Set to 10000000 for the ultra-prime segment (10M+) which concentrates in Sentosa Cove (D04), Nassim Road (D10), Cluny Park (D10), and Good Class Bungalow areas. Leave 0 for no lower bound.

## `max_price_sgd` (type: `integer`):

Upper bound on transacted price in Singapore Dollars. Filters out expensive transactions client-side. Useful for first-time-private-buyer affordability research (set to 1500000 to bound TDSR-eligible mid-market condos in OCR) or for excluding outliers from a portfolio sample. Leave 0 for no upper bound.

## `sale_date_from` (type: `string`):

Lower bound on sale date in 'YYYY-MM' format (e.g. '2024-01'). URA publishes private property transactions weekly with about a 2-3 week lag. Use together with 'sale\_date\_to' to bound a window — for example '2025-01' to '2025-12' for full-year-2025 transactions across the private market. Leave empty for no lower bound.

## `sale_date_to` (type: `string`):

Upper bound on sale date in 'YYYY-MM' format (e.g. '2026-04'). Pair with 'sale\_date\_from' to bound the window. URA's full transaction dataset goes back about 5 years (older data archived). Leave empty for no upper bound (returns up to the most recent published week).

## `luxury_only` (type: `boolean`):

Quick filter for Singapore's luxury private property market: any transaction with transacted\_price >= 5M SGD, OR any transaction in District 09 (Orchard / Killiney / River Valley), District 10 (Bukit Timah / Holland / Tanglin / Nassim), or District 11 (Newton / Novena / Thomson). These three districts plus D04 Sentosa Cove form the bulk of Singapore's high-net-worth private property activity tracked by Knight Frank, Savills, Cushman & Wakefield, and JLL in their quarterly luxury-residential indices.

## `ura_access_key` (type: `string`):

Optional URA Data Service AccessKey for live (real-time) transaction data. Free to obtain — register at https://www.ura.gov.sg/maps/api/reg.html and URA emails the AccessKey within 1-2 business days. With a valid AccessKey, this actor calls URA's PMI\_Resi\_Transaction service and returns the most recent live transactions matching your filters. Without an AccessKey (default) the actor returns from a packaged URA-format reference dataset covering all 28 districts and major property types — useful for schema validation, smoke testing, and small recurring sample pulls. Leave empty to use the packaged dataset.

## `limit` (type: `integer`):

Hard cap on total transactions returned in this run (1-2000). Each transaction is one URA private-property record. Premium pricing applies per row ($0.10/transaction — institutional-real-estate tier). Most recent transactions are returned first (sorted by sale\_date descending).

## Actor input object example

```json
{
  "district": "ALL",
  "property_type": "ALL",
  "type_of_sale": "ALL",
  "min_price_sgd": 0,
  "max_price_sgd": 0,
  "luxury_only": false,
  "limit": 10
}
```

# 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 = {
    "district": "ALL",
    "property_type": "ALL",
    "type_of_sale": "ALL",
    "min_price_sgd": 0,
    "max_price_sgd": 0,
    "sale_date_from": "",
    "sale_date_to": "",
    "luxury_only": false,
    "ura_access_key": "",
    "limit": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/sg-ura-property-transactions").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 = {
    "district": "ALL",
    "property_type": "ALL",
    "type_of_sale": "ALL",
    "min_price_sgd": 0,
    "max_price_sgd": 0,
    "sale_date_from": "",
    "sale_date_to": "",
    "luxury_only": False,
    "ura_access_key": "",
    "limit": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/sg-ura-property-transactions").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "district": "ALL",
  "property_type": "ALL",
  "type_of_sale": "ALL",
  "min_price_sgd": 0,
  "max_price_sgd": 0,
  "sale_date_from": "",
  "sale_date_to": "",
  "luxury_only": false,
  "ura_access_key": "",
  "limit": 10
}' |
apify call nexgendata/sg-ura-property-transactions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/sg-ura-property-transactions",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/h5oFZufoT1SxeI081/builds/ZcwuTCze9HRGaff9f/openapi.json
