Singapore HDB Resale Flat Prices Scraper
Pricing
from $6.15 / 1,000 results
Singapore HDB Resale Flat Prices Scraper
Scrape Singapore HDB resale flat prices and transactions from data.gov.sg, no API key. Filter by town, flat type, price, floor area and month (1990 to now). Get resale price, price per sqm and sqft, storey, lease and geocoded address. Export JSON, CSV, Excel.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Singapore HDB Resale Flat Prices Scraper
Scrape Singapore HDB resale flat prices and transactions straight from the official government open data (data.gov.sg), with no API key and no account on the source. Get every field HDB publishes for each resale, from 1990 to the present, plus derived analytics (price per sqm and sqft, lease age, remaining lease in months) and a geocoded address (postal code, latitude, longitude). This is the most complete HDB resale price scraper and Singapore property prices data feed on Apify.
Here is one real result, with every field the actor returns:
{"month": "2026-09","transactionYear": 2026,"transactionQuarter": "2026-Q3","town": "TAMPINES","flatType": "4 ROOM","block": "859A","streetName": "TAMPINES AVE 5","storeyRange": "07 TO 09","storeyRangeMid": 8,"storeyMin": 7,"storeyMax": 9,"floorAreaSqm": 104,"floorAreaSqft": 1119.45,"flatModel": "Model A","leaseCommenceDate": "1988","leaseCommenceYear": 1988,"leaseAgeYears": 38,"remainingLease": "60 years 07 months","remainingLeaseMonths": 727,"remainingLeaseYears": 60.58,"resalePrice": 675000,"priceCurrency": "SGD","pricePerSqm": 6490.38,"pricePerSqft": 602.97,"fullAddress": "859A TAMPINES AVE 5","postalCode": "521859","latitude": 1.355063074078523,"longitude": 103.9380571628706,"formattedAddress": "859A TAMPINES AVENUE 5 TAMPINES PARKVIEW SINGAPORE 521859","datasetPeriod": "2017-present","contentHash": "6d5e429f4270b29c","source": "Singapore HDB resale flat transactions (data.gov.sg)","observedAt": "2026-09-06T09:42:31.106Z"}
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Why this scraper
- Quickstart
- Input reference
- Output reference
- Comparison with other actors
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
This is a data.gov.sg HDB scraper for the official resale flat transactions published by the Housing & Development Board. It applies the filters you pass, paginates through matching transactions across five official datasets that together span 1990 to the present (about 986,000 records), and writes one clean record per resale. On top of the raw feed it computes floor area in square feet, price per sqm and per sqft, storey band low, mid and high, lease age at sale, and remaining lease in months and years. It also geocodes each address through Singapore's official OneMap service to add postal code, latitude, longitude and a standardized address. Prices are in Singapore dollars. No API key is required.
Why this scraper
- Full history. Reads all five official HDB resale datasets, 1990 to present, not just the recent one.
- More filters. Town, flat type, flat model, block, price range, floor area range, month range and free-text search, all combinable.
- Richer output. Price per sqm and sqft, storey low/mid/high, lease age, remaining lease in months and years, and a geocoded address that most alternatives do not provide.
- Ready for analysis. A stable
contentHashper transaction for deduping, plus an optional market-stats add-on for benchmarking. - No API key, no browser, no account. Pure HTTP against the official open data portal.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 most recent HDB resale transactions.
{"maxTransactions": 10,"sortByNewest": true}
Every input field is optional. Leave the filters empty to pull the full transaction history newest first, up to maxTransactions.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxTransactions | integer | no | 10 | Maximum number of resale transactions to collect. Large pulls are paced automatically because the source rate-limits anonymous access. |
town | string | no | (all) | One HDB town, case-insensitive exact match, for example ANG MO KIO, TAMPINES, BEDOK, WOODLANDS. |
flatType | string | no | (all) | One flat type, exact match, for example 3 ROOM, 4 ROOM, 5 ROOM, EXECUTIVE, MULTI-GENERATION. |
flatModel | string | no | (all) | One flat model, exact match, for example Improved, New Generation, Maisonette, Model A, Premium Apartment. |
block | string | no | (all) | One block number, exact match, for example 406, 605. |
searchQuery | string | no | (empty) | Free-text search across the transaction, for example a street name or block (ANG MO KIO AVE 10, 406). |
minPrice | integer | no | (none) | Keep only transactions with a resale price of at least this amount in SGD. |
maxPrice | integer | no | (none) | Keep only transactions with a resale price of at most this amount in SGD. |
minFloorAreaSqm | integer | no | (none) | Keep only transactions with a floor area of at least this many square metres. |
maxFloorAreaSqm | integer | no | (none) | Keep only transactions with a floor area of at most this many square metres. |
fromMonth | string | no | (none) | Keep only transactions in or after this month, format YYYY-MM. |
toMonth | string | no | (none) | Keep only transactions in or before this month, format YYYY-MM. |
datasetPeriod | string | no | all | Which official dataset(s) to read: all (1990 to present), 2017-present, 2015-2016, 2012-2014, 2000-2012, 1990-1999. |
sortByNewest | boolean | no | true | Return the most recent months first. Turn off for source (oldest-first) order. |
includeMarketStats | boolean | no | false | Paid add-on (paid plans only). Adds town + flat-type segment market context to each transaction. See Billing. |
Filters combine with logical AND. Note: transactions before 2015 do not carry a remaining-lease value at source, so remainingLease fields are null for that period.
Output reference
One dataset item per resale transaction. Values are null when the source value is absent.
| Field | Type | Description |
|---|---|---|
month | string | Transaction month in YYYY-MM format. |
transactionYear | integer | Transaction year (derived). |
transactionQuarter | string | Transaction quarter, for example 2026-Q3 (derived). |
town | string | HDB town, for example TAMPINES. |
flatType | string | Flat type, for example 4 ROOM, EXECUTIVE, MULTI-GENERATION. |
block | string | Block number. |
streetName | string | Street name. |
storeyRange | string | Storey band, for example 07 TO 09. |
storeyRangeMid | integer | Midpoint of the storey band (derived). |
storeyMin | integer | Low storey of the band (derived). |
storeyMax | integer | High storey of the band (derived). |
floorAreaSqm | number | Floor area in square metres. |
floorAreaSqft | number | Floor area in square feet (derived). |
flatModel | string | HDB flat model, for example Model A. |
leaseCommenceDate | string | Year the lease commenced, as published. |
leaseCommenceYear | integer | Lease commencement year as a number. |
leaseAgeYears | integer | Flat age at time of sale, transactionYear minus leaseCommenceYear (derived). |
remainingLease | string | Remaining lease as published, for example 60 years 07 months. |
remainingLeaseMonths | integer | Remaining lease in whole months (derived). |
remainingLeaseYears | number | Remaining lease in years (derived). |
resalePrice | integer | Resale price in Singapore dollars. |
priceCurrency | string | Always SGD. |
pricePerSqm | number | resalePrice / floorAreaSqm (derived). |
pricePerSqft | number | resalePrice / floorAreaSqft (derived). |
fullAddress | string | Block and street joined into one address. |
postalCode | string | 6-digit postal code from OneMap geocoding, or null. |
latitude | number | Latitude from OneMap geocoding, or null. |
longitude | number | Longitude from OneMap geocoding, or null. |
formattedAddress | string | Standardized address from OneMap, or null. |
datasetPeriod | string | Which official dataset the record came from, for example 2017-present. |
contentHash | string | Stable 16-char hash of the transaction, handy for deduping across runs. |
priceVsSegmentMedianPct | number | Only with the market-stats add-on: percent above or below the segment median price. |
segmentStats | object | Only with the market-stats add-on: median, average, min, max price and price per sqm for the town + flat-type segment. |
source | string | Data source label. |
observedAt | string | ISO 8601 timestamp when the record was collected. |
error | string | Present only on a failed run: a single item with a populated error field is written instead of results. |
Comparison with other actors
| Feature | This actor (scrapers.lat) | unfenced-group/hdb-resale-scraper | singaporedata/singapore-hdb-resale-transactions |
|---|---|---|---|
| Source | Official data.gov.sg, no API key | Official data.gov.sg | Official data.gov.sg |
| History coverage | 1990 to present (all 5 datasets) | 1990 to present | 1990 to present |
| Town filter | Yes | Yes | Yes |
| Flat type filter | Yes | Yes | Yes |
| Flat model filter | Yes | No | No |
| Block filter | Yes | No | No |
| Price range filter | Yes | No | No |
| Floor area range filter | Yes | No | No |
| Month range filter | Yes | Yes | No |
| Free-text search | Yes | No | Yes |
| Price per sqm and sqft | Yes | Yes | No |
| Storey low / mid / high | Yes | min and max only | No |
| Lease age and remaining lease in months | Yes | lease age only | No |
| Geocoding (postal, lat, lng) | Yes | No | No |
| Stable content hash | Yes | Yes | No |
| Market-stats add-on | Yes (optional) | No | No |
This actor accepts every input and returns every field the alternatives do, and adds flat-model and block filters, price and floor-area range filters, geocoding, storey low/mid/high, and an optional market-stats add-on.
Run via API and CLI
Start a run and read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-hdb-resale-prices-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"town":"TAMPINES","flatType":"4 ROOM","fromMonth":"2024-01","maxTransactions":50}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-hdb-resale-prices-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"minPrice":1000000,"maxTransactions":500}'
Apify CLI:
apify call scrapers_lat/singapore-hdb-resale-prices-scraper \--input '{"town":"YISHUN"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object.
Billing and limits
- Pay per result. You are charged per record returned (
resultevent). See the pricing tab. - Market-stats add-on. Optional, paid plans only. When
includeMarketStatsis on, each transaction is enriched with its town + flat-type segment context (median, average, min, max price and price per sqm) and apriceVsSegmentMedianPct, billed as one Detail record event per enriched transaction, only when stats are produced. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxTransactions. - Source rate limit. The data.gov.sg portal throttles anonymous access, so large pulls are paced automatically.
FAQ and troubleshooting
Do I need an HDB or data.gov.sg API key? No. The actor reads the public open data with no API key and no account on the source.
How far back does the data go?
1990 to the present, across five official datasets. Set datasetPeriod to target one period. Transactions before 2015 do not carry a remaining-lease value at source.
A run returned 0 records. Why?
The filter matched nothing. Check the exact town, flatType or flatModel spelling, widen the price or area range, or clear the filters. Zero-result runs are not charged.
Why is latitude or postalCode null?
The OneMap geocoder could not resolve that block and street. Missing values are returned as null, never invented.
Are the per-area prices official?
No. pricePerSqm, pricePerSqft, floorAreaSqft and the market-stats fields are computed from the official resalePrice and floorAreaSqm.
Is this an official HDB tool? No. It is independent and unaffiliated with the Housing & Development Board. It reads only publicly available data from data.gov.sg and OneMap.
Scraper de Precios de Reventa de Pisos HDB de Singapur
Extrae precios y transacciones de reventa de pisos HDB de Singapur directamente de los datos abiertos oficiales del gobierno (data.gov.sg), sin clave API y sin cuenta en la fuente. Obtén todos los campos que HDB publica para cada reventa, desde 1990 hasta hoy, mas campos analiticos derivados (precio por m2 y por pie cuadrado, antiguedad del arrendamiento, arrendamiento restante en meses) y una direccion geocodificada (codigo postal, latitud, longitud). Este es el scraper de precios de reventa HDB y el feed de datos de precios de propiedades de Singapur mas completo de Apify.
Aqui tienes un resultado real, con todos los campos que devuelve el actor:
{"month": "2026-09","transactionYear": 2026,"transactionQuarter": "2026-Q3","town": "TAMPINES","flatType": "4 ROOM","block": "859A","streetName": "TAMPINES AVE 5","storeyRange": "07 TO 09","storeyRangeMid": 8,"storeyMin": 7,"storeyMax": 9,"floorAreaSqm": 104,"floorAreaSqft": 1119.45,"flatModel": "Model A","leaseCommenceDate": "1988","leaseCommenceYear": 1988,"leaseAgeYears": 38,"remainingLease": "60 years 07 months","remainingLeaseMonths": 727,"remainingLeaseYears": 60.58,"resalePrice": 675000,"priceCurrency": "SGD","pricePerSqm": 6490.38,"pricePerSqft": 602.97,"fullAddress": "859A TAMPINES AVE 5","postalCode": "521859","latitude": 1.355063074078523,"longitude": 103.9380571628706,"formattedAddress": "859A TAMPINES AVENUE 5 TAMPINES PARKVIEW SINGAPORE 521859","datasetPeriod": "2017-present","contentHash": "6d5e429f4270b29c","source": "Singapore HDB resale flat transactions (data.gov.sg)","observedAt": "2026-09-06T09:42:31.106Z"}
📥 Entrada · 📤 Salida · 💰 Precios · ▶️ Ejemplos
Tabla de contenido
- Que hace
- Por que este scraper
- Inicio rapido
- Referencia de entrada
- Referencia de salida
- Comparacion con otros actores
- Ejecutar via API y CLI
- Obtener resultados
- Facturacion y limites
- Preguntas frecuentes
Que hace
Es un scraper de data.gov.sg HDB para las transacciones de reventa oficiales publicadas por la Junta de Vivienda y Desarrollo (HDB). Aplica los filtros que pasas, pagina las transacciones que coinciden en cinco conjuntos de datos oficiales que juntos cubren de 1990 a hoy (unos 986.000 registros) y escribe un registro limpio por reventa. Sobre el feed original calcula la superficie en pies cuadrados, el precio por m2 y por pie cuadrado, el piso bajo, medio y alto de la banda, la antiguedad del arrendamiento en la venta y el arrendamiento restante en meses y anos. Tambien geocodifica cada direccion con el servicio oficial OneMap de Singapur para anadir codigo postal, latitud, longitud y una direccion normalizada. Los precios estan en dolares de Singapur. No se necesita clave API.
Por que este scraper
- Historial completo. Lee los cinco conjuntos de datos oficiales de reventa HDB, de 1990 a hoy, no solo el reciente.
- Mas filtros. Ciudad, tipo de piso, modelo de piso, bloque, rango de precio, rango de superficie, rango de meses y busqueda de texto libre, todos combinables.
- Salida mas rica. Precio por m2 y por pie cuadrado, piso bajo/medio/alto, antiguedad del arrendamiento, arrendamiento restante en meses y anos, y una direccion geocodificada que la mayoria de alternativas no ofrece.
- Listo para analisis. Un
contentHashestable por transaccion para deduplicar, mas un complemento opcional de estadisticas de mercado para comparar. - Sin clave API, sin navegador, sin cuenta. HTTP puro contra el portal oficial de datos abiertos.
Inicio rapido
Abre el actor, pega esto en la entrada y presiona Run. Devuelve las 10 transacciones de reventa HDB mas recientes.
{"maxTransactions": 10,"sortByNewest": true}
Todos los campos de entrada son opcionales. Deja los filtros vacios para extraer todo el historial de transacciones, lo mas reciente primero, hasta maxTransactions.
Referencia de entrada
| Campo | Tipo | Requerido | Predeterminado | Descripcion |
|---|---|---|---|---|
maxTransactions | entero | no | 10 | Numero maximo de transacciones a recopilar. Las extracciones grandes se pausan automaticamente porque la fuente limita el acceso anonimo. |
town | texto | no | (todas) | Una ciudad HDB, coincidencia exacta sin distincion de mayusculas, por ejemplo ANG MO KIO, TAMPINES, BEDOK, WOODLANDS. |
flatType | texto | no | (todos) | Un tipo de piso, coincidencia exacta, por ejemplo 3 ROOM, 4 ROOM, 5 ROOM, EXECUTIVE, MULTI-GENERATION. |
flatModel | texto | no | (todos) | Un modelo de piso, coincidencia exacta, por ejemplo Improved, New Generation, Maisonette, Model A, Premium Apartment. |
block | texto | no | (todos) | Un numero de bloque, coincidencia exacta, por ejemplo 406, 605. |
searchQuery | texto | no | (vacio) | Busqueda de texto libre en la transaccion, por ejemplo una calle o bloque (ANG MO KIO AVE 10, 406). |
minPrice | entero | no | (ninguno) | Conserva solo transacciones con un precio de reventa de al menos este monto en SGD. |
maxPrice | entero | no | (ninguno) | Conserva solo transacciones con un precio de reventa de como maximo este monto en SGD. |
minFloorAreaSqm | entero | no | (ninguno) | Conserva solo transacciones con una superficie de al menos estos metros cuadrados. |
maxFloorAreaSqm | entero | no | (ninguno) | Conserva solo transacciones con una superficie de como maximo estos metros cuadrados. |
fromMonth | texto | no | (ninguno) | Conserva solo transacciones en o despues de este mes, formato YYYY-MM. |
toMonth | texto | no | (ninguno) | Conserva solo transacciones en o antes de este mes, formato YYYY-MM. |
datasetPeriod | texto | no | all | Que conjunto(s) de datos leer: all (1990 a hoy), 2017-present, 2015-2016, 2012-2014, 2000-2012, 1990-1999. |
sortByNewest | booleano | no | true | Devuelve los meses mas recientes primero. Desactiva para el orden de origen (mas antiguo primero). |
includeMarketStats | booleano | no | false | Complemento de pago (solo planes de pago). Anade contexto de mercado por ciudad y tipo de piso a cada transaccion. Ver Facturacion. |
Los filtros se combinan con AND logico. Nota: las transacciones anteriores a 2015 no traen un valor de arrendamiento restante en la fuente, por lo que los campos remainingLease son null en ese periodo.
Referencia de salida
Un elemento del dataset por transaccion de reventa. Los valores son null cuando el valor de origen no existe.
| Campo | Tipo | Descripcion |
|---|---|---|
month | texto | Mes de la transaccion en formato YYYY-MM. |
transactionYear | entero | Ano de la transaccion (derivado). |
transactionQuarter | texto | Trimestre de la transaccion, por ejemplo 2026-Q3 (derivado). |
town | texto | Ciudad HDB, por ejemplo TAMPINES. |
flatType | texto | Tipo de piso, por ejemplo 4 ROOM, EXECUTIVE, MULTI-GENERATION. |
block | texto | Numero de bloque. |
streetName | texto | Nombre de la calle. |
storeyRange | texto | Banda de piso, por ejemplo 07 TO 09. |
storeyRangeMid | entero | Punto medio de la banda de piso (derivado). |
storeyMin | entero | Piso bajo de la banda (derivado). |
storeyMax | entero | Piso alto de la banda (derivado). |
floorAreaSqm | numero | Superficie en metros cuadrados. |
floorAreaSqft | numero | Superficie en pies cuadrados (derivado). |
flatModel | texto | Modelo de piso HDB, por ejemplo Model A. |
leaseCommenceDate | texto | Ano de inicio del arrendamiento, tal como se publica. |
leaseCommenceYear | entero | Ano de inicio del arrendamiento como numero. |
leaseAgeYears | entero | Antiguedad del piso en la venta, transactionYear menos leaseCommenceYear (derivado). |
remainingLease | texto | Arrendamiento restante tal como se publica, por ejemplo 60 years 07 months. |
remainingLeaseMonths | entero | Arrendamiento restante en meses enteros (derivado). |
remainingLeaseYears | numero | Arrendamiento restante en anos (derivado). |
resalePrice | entero | Precio de reventa en dolares de Singapur. |
priceCurrency | texto | Siempre SGD. |
pricePerSqm | numero | resalePrice / floorAreaSqm (derivado). |
pricePerSqft | numero | resalePrice / floorAreaSqft (derivado). |
fullAddress | texto | Bloque y calle unidos en una direccion. |
postalCode | texto | Codigo postal de 6 digitos de OneMap, o null. |
latitude | numero | Latitud de OneMap, o null. |
longitude | numero | Longitud de OneMap, o null. |
formattedAddress | texto | Direccion normalizada de OneMap, o null. |
datasetPeriod | texto | De que conjunto oficial proviene el registro, por ejemplo 2017-present. |
contentHash | texto | Hash estable de 16 caracteres de la transaccion, util para deduplicar entre ejecuciones. |
priceVsSegmentMedianPct | numero | Solo con el complemento de estadisticas: porcentaje por encima o debajo de la mediana del segmento. |
segmentStats | objeto | Solo con el complemento: mediana, promedio, minimo, maximo de precio y precio por m2 del segmento ciudad + tipo de piso. |
source | texto | Etiqueta de la fuente de datos. |
observedAt | texto | Marca de tiempo ISO 8601 de cuando se recopilo el registro. |
error | texto | Presente solo en una ejecucion fallida: se escribe un unico elemento con error en lugar de resultados. |
Comparacion con otros actores
| Funcion | Este actor (scrapers.lat) | unfenced-group/hdb-resale-scraper | singaporedata/singapore-hdb-resale-transactions |
|---|---|---|---|
| Fuente | data.gov.sg oficial, sin clave API | data.gov.sg oficial | data.gov.sg oficial |
| Cobertura historica | 1990 a hoy (5 conjuntos) | 1990 a hoy | 1990 a hoy |
| Filtro de ciudad | Si | Si | Si |
| Filtro de tipo de piso | Si | Si | Si |
| Filtro de modelo de piso | Si | No | No |
| Filtro de bloque | Si | No | No |
| Filtro de rango de precio | Si | No | No |
| Filtro de rango de superficie | Si | No | No |
| Filtro de rango de meses | Si | Si | No |
| Busqueda de texto libre | Si | No | Si |
| Precio por m2 y pie cuadrado | Si | Si | No |
| Piso bajo / medio / alto | Si | solo min y max | No |
| Antiguedad y arrendamiento en meses | Si | solo antiguedad | No |
| Geocodificacion (postal, lat, lng) | Si | No | No |
| Hash de contenido estable | Si | Si | No |
| Complemento de estadisticas de mercado | Si (opcional) | No | No |
Este actor acepta cada entrada y devuelve cada campo de las alternativas, y anade filtros de modelo de piso y de bloque, filtros de rango de precio y superficie, geocodificacion, piso bajo/medio/alto y un complemento opcional de estadisticas de mercado.
Ejecutar via API y CLI
Inicia una ejecucion y lee el dataset. Reemplaza <TOKEN> con tu token de API de Apify.
Ejecutar de forma sincrona y obtener los elementos del dataset en una llamada:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-hdb-resale-prices-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"town":"TAMPINES","flatType":"4 ROOM","fromMonth":"2024-01","maxTransactions":50}'
Iniciar una ejecucion de forma asincrona:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-hdb-resale-prices-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"minPrice":1000000,"maxTransactions":500}'
Apify CLI:
apify call scrapers_lat/singapore-hdb-resale-prices-scraper \--input '{"town":"YISHUN"}'
Obtener resultados
Cada ejecucion escribe en un dataset. Obten los elementos como JSON, CSV o Excel cambiando format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginar datasets grandescurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> se devuelve como defaultDatasetId en el objeto de la ejecucion.
Facturacion y limites
- Pago por resultado. Se cobra por registro devuelto (evento
result). Consulta la pestana de precios. - Complemento de estadisticas de mercado. Opcional, solo planes de pago. Con
includeMarketStatsactivo, cada transaccion se enriquece con el contexto de su segmento ciudad + tipo de piso (mediana, promedio, minimo, maximo de precio y precio por m2) y unpriceVsSegmentMedianPct, facturado como un evento Detail record por transaccion enriquecida, solo cuando se producen estadisticas. - Sin cargo por fallo. Si una ejecucion falla, el actor escribe un unico elemento con
errory no cobra por el. Las ejecuciones vacias no cuestan nada. - Limite de gasto respetado. Configura
maxTotalChargeUsden la ejecucion; al alcanzarlo, el actor deja de emitir y cobrar. - Los planes gratuitos de Apify estan limitados a 10 registros por ejecucion. Mejora tu plan para un
maxTransactionsmayor. - Limite de la fuente. El portal data.gov.sg limita el acceso anonimo, por lo que las extracciones grandes se pausan automaticamente.
Preguntas frecuentes
Necesito una clave API de HDB o de data.gov.sg? No. El actor lee los datos abiertos publicos sin clave API y sin cuenta en la fuente.
Hasta que ano llegan los datos?
De 1990 a hoy, en cinco conjuntos oficiales. Usa datasetPeriod para elegir un periodo. Las transacciones anteriores a 2015 no traen valor de arrendamiento restante en la fuente.
Una ejecucion devolvio 0 registros. Por que?
El filtro no coincidio con nada. Revisa la ortografia exacta de town, flatType o flatModel, amplia el rango de precio o superficie, o quita los filtros. Las ejecuciones sin resultados no se cobran.
Por que latitude o postalCode son null?
El geocodificador OneMap no pudo resolver ese bloque y calle. Los valores faltantes se devuelven como null, nunca se inventan.
Los precios por superficie son oficiales?
No. pricePerSqm, pricePerSqft, floorAreaSqft y los campos de estadisticas se calculan a partir del resalePrice y floorAreaSqm oficiales.
Es una herramienta oficial de HDB? No. Es independiente y sin afiliacion con la Junta de Vivienda y Desarrollo (HDB). Lee solo datos disponibles publicamente en data.gov.sg y OneMap.
Related scrapers
- Singapore HDB Rental Scraper: HDB approved rental transactions.
- Singapore URA Property Scraper: private property transactions and rentals.
- Singapore PropertyGuru Scraper: property listings with agent contacts.
- Singapore CEA Estate Agents Scraper: licensed estate agents and salespersons.
- Singapore COE Prices & Bidding Results Scraper: COE bidding results and premiums.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the Housing & Development Board (HDB). Accesses only publicly available data from the official government open-data portal (data.gov.sg) and OneMap.
