Centaline HK Property Listings Scraper avatar

Centaline HK Property Listings Scraper

Pricing

$3.00 / 1,000 listings

Go to Apify Store
Centaline HK Property Listings Scraper

Centaline HK Property Listings Scraper

Rent and buy listings from Centaline Property, Hong Kong's largest estate agency: price, rent, size, unit price, district, estate, bedrooms, MTR distance, coordinates.

Pricing

$3.00 / 1,000 listings

Rating

0.0

(0)

Developer

KF P

KF P

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Scrapes residential listings from Centaline Property, Hong Kong's largest estate agency (~10k rentals, ~33k sale listings). Public pages only, no login.

No login, no API key, no proxy needed. Pay-per-event: one listing event per listing saved; list requests that return nothing cost nothing.

Output (one record per listing)

fieldexample
refNo, idGAJ917
moderent or buy
urldetail page
title, estate, phase, building, addressGrand Mayfair・Phase 1A…・Tower 5
region, district, areaNew Territories West, Yuen Long District, Kam Tin
buildingType, unitType, isHouse, bedrooms, buildingAge, directionApartment, Simplex, 2, 1, South West
sizeSqftsaleable area, 384
price, rentHKD asking price / monthly rent (either may be null)
unitPriceSqft, unitRentSqft, monthlyPayment, yieldPctderived numbers from the site
hasKey, exclusive, petFriendly, foreclosure, hosFlat, tagsflags and feature tags
mtr[{ name: "Kam Sheung Road", walkMinutes: 7 }]
lat, lng, publishDate, updateDate, thumbnail

Input

Example: rentals in Taikoo Shing between HK$15k and HK$30k a month —

{ "mode": "rent", "locations": ["Taikoo Shing"], "minPrice": 15000, "maxPrice": 30000, "maxItems": 200 }
  • moderent (default) or buy.
  • languageen (default), zh-hk or zh-cn; controls every text field.
  • locations — optional list of districts / estates / buildings / MTR stations, in any language (["Taikoo Shing", "沙田"]). Entries are OR-ed, but must all be the same kind (all districts, or all estates, or all phases / buildings / MTR stations) — the API AND-s different kinds and returns nothing, so the actor refuses such input. Each name is resolved through the site's own autocomplete (exact English/Chinese label match preferred, else the first district, then estate, building, MTR hit); raw site tokens like HMA034 (district), 3-OVDUURFSRJ (estate), 2-… (phase), 1-… (building) or mtr-58 are used as-is. An unknown name fails the run rather than silently scraping all of Hong Kong.
  • minPrice / maxPrice — HKD; monthly rent in rent mode, sale price in buy mode.
  • maxItems (default 100), startPage (default 1), maxPages per URL (default 200).
  • proxyConfiguration — optional; the site is served without bot challenges, datacenter proxies are enough for big runs.

Pricing

Pay-per-event: one listing event is charged per listing pushed to the dataset. Nothing else is charged. If a run's budget (maxTotalChargeUsd) is exhausted before maxItems, the actor stops cleanly with the listings it could pay for and reports it in the status message.

How it works

The list page is server-rendered only for the first 24 results; the site's SPA then paginates through POST hk-api.centanet.com/centanetapi/api/Post/Search (offset/size). The actor calls that endpoint directly, in the site's own ranking order, and de-duplicates by listing id (the ranking is not perfectly stable between calls). src/parse.js also contains a parser for the window.__NUXT__ SSR payload, evaluated in an empty, time-limited VM sandbox, used by the fixture tests and kept as a fallback.

Local development

npm install
npm test # parser tests against fixtures/
apify run -i '{"mode":"rent","maxItems":30}'

Refresh fixtures with a browser user-agent: curl -A "Mozilla/5.0 …" https://hk.centanet.com/findproperty/en/list/rent > fixtures/rent-page1.html.

Limitations

  • One run filters by one kind of location (districts, or estates, or buildings/phases/MTR stations); size, bedroom and school-net filters are not exposed yet.
  • Transaction history and the detail-page fields (floor plan, agent) are client-side rendered and not scraped in v1.
  • Field names on the site can change; if a run fails with "Listing array not found", the __NUXT__ layout moved.