AI Social API
Updated 2026-09-18 · Chad

Is That Hong Kong Listing Actually For Sale? How to Verify It Yourself With Real Agency Data

In one line: Centaline’s own chairman has admitted that only about 6.25% of Hong Kong’s secondhand listings carry a genuine mandate to sell, and a “for sale” post turning out to be rent-only on the agent’s own site isn’t an isolated case — pull the raw listing and transaction data straight from Centaline, 28Hse, Midland and Ricacorp and cross-check deal_type, posting date and asking price yourself, instead of trusting one social media post.

This post contains Apify affiliate links (no extra cost to you). Costs and comparisons are stated honestly, including where Apify is not the best fit.

Why you can’t take a social media listing at face value

Hong Kong’s Anti-Deception Coordination Centre (ADCC) flagged this exact pattern in a July 2025 alert: scammers post fake rental ads on social platforms, mix forged tenancy agreements and ID screenshots in with genuine material, and in one documented case cost a family roughly HK$13,000 after they signed a lease online without an in-person viewing. Police advice in the same alert is blunt — “ask the agent for their full name and licence number, then verify them by checking the Licence List on the Estate Agents Authority’s website” before paying anything.

That’s not a fringe warning; the agency side of the market says the same thing about itself. An HK01 opinion column (originally published 2018, updated February 2025) cites Centaline Property Agency chairman Shih Wing-ching admitting that of roughly 160,000 secondhand residential listings on the market, only about 10,000 carry a genuine sale mandate — a real-listing ratio of just 6.25%. Most listing ads, in other words, aren’t legally authorised to sell the unit they advertise; they exist to generate enquiries. The same column cites a 200-respondent Ricacorp survey: 73% of respondents had chased a unit that was still posted after an agent told them it had already sold, and 66% had seen the same unit reposted with near-identical photos (a “shadow listing”). The EAA itself inspected agency offices only 907 times and spot-checked 339 online property ads over the same half-year — enforcement capacity that doesn’t come close to matching listing volume. Notably, Centaline and Ricacorp — two of the sources most candid about the scale of this problem — are also two of the four agencies this guide teaches you to pull raw data from directly.

The EAA has also publicly reminded the public directly (December 5, 2025): the sheer volume of online property ads makes it hard to verify who’s actually posting, and the public shouldn’t readily trust social media messages — always verify a licence, via the EAA’s own Licence Search, before handing over money or personal data. A buyer’s Threads post illustrates why: an agent advertised “available for sale” on Threads to attract enquiries, but when the buyer asked for a business card, they were handed a supervisor’s instead — and checking the agency’s own website showed the unit was listed for rent only, not for sale. The buyer’s message showed a single tick for 9 hours — not delivered, let alone read — with no reply. Even agents themselves have started closing this trust gap on their own — one agent privately shares a monthly transaction log on Threads with a disclaimer that “all data is for reference only; the EPRC (Land Registry) record is authoritative” — a tacit admission, from inside the industry, that a single social media post isn’t enough and the official registry is what ultimately settles it.

That gap between “one social media post” and “official raw data” is exactly where these four agency actors earn their keep. You don’t need to wait for the EAA to inspect anyone — pull Centaline, 28Hse, Midland and Ricacorp’s own public listing and transaction data, cross-check deal_type, posting date and asking price, and you can already filter out a good share of the listings that obviously don’t add up.

Four agencies, four different capabilities

Centaline + 28Hse (centaline-scraper)28Hse (28hse-scraper)Midland (midland-scraper)Ricacorp (ricacorp-scraper)
Search by estate name directlykeywords takes the estate name, covers both sites in one call❌ Only dealType + propertyType category browsing; a single listing needs propertyUrls/propertyIds❌ Only regions/bedrooms/bathrooms/schoolNetthe official API silently ignores an estate name or keyword parameter❌ Only regions/rooms
Buy vs. rent fielddeal_typedeal_typedeal_typedeal_type
Unique dataWeekly CCL index series (back to 1994)is_owner FSBO (for-sale-by-owner) flagEstate directory mode (stats for ~18,000 estates)price_changes asking-price change history (~35% of listings carry a recorded cut)
Deal/transaction historytransactions mode (by estate)🚧 Not yet available (planned v1.1)transactions mode (by district, not estate)❌ Not offered
Default proxyApify datacenter (both sites tolerate it)Apify datacenterApify residential (Midland returns 403 to datacenter IPs)Apify datacenter
English place namesChinese onlyChinese onlylanguage: "en" returns district/estate/building names in Englishlanguage: "en-hk" returns estate/district names in English

All four agencies output deal_type to flag buy vs. rent using the same field name — unusual, given these are four independently built actors with no coordination on field naming. Their primary keys differ, though: centaline-scraper/28hse-scraper use property_id, midland-scraper uses serial_no, ricacorp-scraper uses post_no — cross-referencing between sources means aligning those yourself.

How to actually verify a listing you saw on social media

Step 1 — Check whether you have a full listing link, or just an estate name

If the agent’s post includes a full listing URL (say, a 28Hse link), run that site’s own actor in detail mode and pull that exact listing’s deal_type:

{ "mode": "detail", "propertyUrls": ["https://www.28hse.com/buy/apartment/property-3948689"] }

This is the most reliable check, because you’re matching against the exact same listing ID — there’s no ambiguity about whether you found “the same unit” within an estate.

If the post just says “great unit available at [estate]” with no link, run centaline-scraper to cover both Centaline and 28Hse in one call:

{ "mode": "search", "source": "both", "dealType": "buy", "keywords": ["Taikoo Shing"], "maxItems": 50 }

Check whether any result with deal_type: "buy" matches what the agent actually told you.

Step 2 — Midland and Ricacorp don’t have an estate-name field, so filter after the fact

Neither official API accepts an estate name or keyword parameter (Midland’s own README says so, and so does Ricacorp’s input schema), so pull the whole district first via regions, then filter the output’s own estate field down to the estate you actually care about (both actors return this field). This doesn’t reduce how many rows you pay for, but at least the underlying data is still directly comparable. If you’re working in English, add language: "en" (Midland) or language: "en-hk" (Ricacorp) so estate/district come back in English instead of Chinese.

Step 3 — Cross-check posting date and asking price against a recent transaction

28hse-scraper’s posted_at already converts the raw relative timestamp (“36 seconds ago”, “N days ago”) into an absolute one — if the same property_id has been sitting there a while but the agent is pitching it as “just listed” on social media, that’s worth a second look. To go one level deeper, pull that estate’s most recent transaction unit price with centaline-scraper’s transactions mode:

{ "mode": "transactions", "keywords": ["Taikoo Shing"], "dealType": "buy", "dateFrom": "30d", "maxItems": 30 }

Note that transactions mode only pulls Centaline’s own deal data — it silently ignores source, since Centaline is the only transaction data source (28Hse doesn’t have one). keywords still requires the estate name, and one estate per keyword works best. dealType filters buy vs. rent. dateFrom accepts a relative window (e.g. 30d for the last 30 days) or an absolute date — run this on a schedule and each pass only returns new deals, so a dataset built this way accumulates into that estate’s own price timeline instead of you re-pulling everything from scratch each time. midland-scraper has its own transactions mode too, though it operates at the district level rather than per-estate. Each transaction record comes back with transaction_date, price and net_unit_price (net_unit_price_hkd on midland-scraper) — compare that against the asking price from Step 1 (price_per_sqft / unit_price, depending on the actor); a large gap between the two lines up with the “lowball price to generate enquiries, then steer you to a different unit” pattern the HK01 report above describes, and is worth treating with extra skepticism.

What this method can’t do — it only cross-checks whether the objective data is consistent (deal_type, transaction price, posting date). It can’t verify an agent’s intent, and it can’t tell you whether a specific post is deliberately misleading versus simply stale (see the FAQ above).

What this actually costs

All four actors run on pay-per-event (PPE) billing — you’re only charged for what you actually get back:

EventPriceApplies to
search-listing (per search result)$0.002centaline-scraper, 28hse-scraper, midland-scraper, ricacorp-scraper
product-detail (per full record)$0.008centaline-scraper, 28hse-scraper — Midland and Ricacorp don’t offer detail mode yet

Verifying one estate across all four agencies at 30-50 search results each runs roughly $0.2-$0.4 total — a lot cheaper than a wasted viewing trip after trusting the wrong post.

Three ways to start

FAQ

Are Hong Kong secondhand property listings really that unreliable? According to an HK01 opinion column (originally published 2018, updated February 2025) citing Centaline Property Agency chairman Shih Wing-ching, roughly 160,000 secondhand residential listings exist in the market but only about 10,000 carry a genuine mandate to sell — a real-listing ratio of just 6.25%. The same column cites a 200-respondent Ricacorp survey in which 73% of respondents had encountered a unit still advertised after being told it had already sold, and 66% had seen the same unit reposted with near-identical photos. These figures carry some age and describe a long-standing market gap, not today’s exact ratio.

Which of the four agency actors lets you search by estate name directly? Only centaline-scraper (a combined Centaline + 28Hse search) takes a keywords parameter for an estate name. 28hse-scraper on its own only offers dealType + propertyType category browsing — pinning down one specific listing requires propertyUrls or propertyIds. Midland (midland-scraper) and Ricacorp (ricacorp-scraper) both only expose regions/bedrooms/bathrooms/schoolNet-style area-level filters; their official APIs don’t accept an estate name or keyword parameter at all, and silently ignore one if you send it — both actors’ input schemas and READMEs say so explicitly (see the table above). To narrow either one down to a specific estate, pull the regional data first, then filter the output’s own estate field yourself.

Can I get estate and district names back in English instead of Chinese? For two of the four: midland-scraper has a language parameter (zh-hk / en) and ricacorp-scraper has one too (zh-hk / en-hk) — set either to English and district, estate and building names come back in English. centaline-scraper and 28hse-scraper don’t have this parameter; their place names are Chinese only, since both sites are Chinese-language originals. All four actors’ field names themselves are already English snake_case regardless of this setting.

Can this method prove a social media post is a scam? No. It can only cross-check whether the objective data is consistent — for example whether deal_type says buy or rent, how long ago posted_at shows the listing went up, and how far the asking price sits from the most recent transaction price. It can’t verify an agent’s intent, and it can’t tell you whether a post is deliberately misleading versus simply out of date. Hong Kong’s Estate Agents Authority (EAA) has publicly warned that it’s hard to verify who is actually behind an online property ad, and that the public should not readily trust messages sent over social media — before handing over money or personal data, verify the person’s licence first through the EAA’s own Licence Search.

What does 28hse-scraper’s is_owner field mean? It flags for-sale-by-owner (FSBO) listings — true when the page is explicitly labelled as an owner listing, false for agent listings or unlabelled ones. This field is specific to 28hse-scraper; the other three agency actors (Centaline, Midland, Ricacorp) don’t output it.

How are these four actors priced? All four bill under the search-listing event at $0.002 per property record returned in search mode. centaline-scraper and 28hse-scraper also offer a detail mode at $0.008 per full record. Midland (midland-scraper) and Ricacorp (ricacorp-scraper) don’t offer a detail mode yet — search is currently their only billing path.


Chad runs 40+ published Apify actors, including the centaline-scraper, 28hse-scraper, midland-scraper and ricacorp-scraper used here. Every pricing figure above is cross-checked against each actor’s own Store page and Apify’s official PPE documentation; the market figures’ sources and dates are stated inline. Claims that couldn’t be sourced aren’t in this article.