Every property listing is a number with a story attached. "Renovated." "Huge." "Near the MRT." "Priced to sell." The one thing the story never tells you is whether the number is fair, because the only honest answer to that lives somewhere the seller has no incentive to show you: the record of what flats exactly like this one have actually changed hands for.
So I ran an experiment. I gave Claude two live data sources through the official Apify MCP server, pointed it at a real HDB flat on the market in Singapore, and asked it to do the one thing a buyer never has time to do properly at a viewing: compare the asking price against genuine recent transactions for the same segment, and tell me the truth. Not a mortgage calculator. Not a vibe. A verdict backed by numbers.
Everything below is real. A live listing pulled from the market, six hundred real resale transactions, actual run IDs. No mocked screens, no invented comps. I picked the flat, wired the tools, and let the agent make the call.
The setup
Here is the problem with buying a resale flat. You stand in someone's living room for fifteen minutes. The agent is friendly, the place smells like fresh paint, and there is a number on the table. Is it fair? You genuinely do not know. You have a gut feeling shaped by whatever three listings you half-remember from scrolling last night, and the agent has every transacted comparable in the district memorised. It is not a fair fight.
The data to level it exists and is public. Singapore's HDB publishes every resale transaction: town, flat type, block, floor area, lease year, storey, and the exact price it sold for. The problem was never access. The problem is that nobody, in the pressure of a viewing, opens a spreadsheet of six hundred sales, filters it down to the flats that genuinely match the one in front of them, and works out a median. So I wired that work into Claude and let it do the fetching and the maths.
The two tools I connected, both through one official Apify MCP endpoint:
- The Singapore HDB Resale Flat Prices Scraper returns real transacted resale prices for any town and flat type: block, street, storey, floor area, remaining lease, resale price, and price per square foot.
- The Singapore PropertyGuru Listings Scraper returns live asking listings: title, asking price, floor area, price per square foot, property type, and location.
One is the market's asking. The other is the market's reality. The whole experiment is putting them side by side.
Step one: pull the live listing
I did not want to argue with a screenshot, so the first thing I asked Claude to do was fetch the flat's real, current listing figures straight from the market rather than trust my typing.
Two seconds of tool call, and the flat was on the table with its numbers locked: a 4-room HDB in Tampines, near Tampines East MRT, asking S$620,000 for 1,087 sqft, a headline S$570.38 per square foot. That last figure is the one that matters, because price alone tells you nothing when floor areas differ. Price per square foot is how you compare a 1,087 sqft flat to one that is 1,000 or 1,200.
And here is where the trap opens. S$570 psf, for Tampines, sounds cheap. If your mental benchmark is "4-room flats in mature towns go for six-something a foot," this looks like a flat priced under the market, the kind of listing you rush to view before someone else grabs it. Claude flagged exactly that instinct and refused to trust it: "cheap only means something against what flats like this one actually sold for." Then it offered to go and find out.
Step two: compare it to what actually sold
This is the part I could never do at a viewing, and the part the agent does in one tool call. I told it to pull the recent transacted resale prices for the same segment and give me a straight answer: fair, or overpaying?
It pulled 600 real Tampines 4-room transactions spanning January 2025 to July 2026, and then it did the thing that separates an analyst from a calculator: it noticed the naive comparison was a trap and controlled for it.
Against every 4-room flat in Tampines, the median was S$608.63 psf. Measured that way, the listing's S$570 looked like a 6% discount, confirmation that this was a steal. But most of those 600 sales are newer flats with 90-plus years left on the lease, and lease age is the single biggest lever on an HDB flat's price per foot. The flat I was looking at is a 1980s-vintage, ~1,087 sqft unit, an older, larger Model A. Comparing it to a decade-newer flat is not a comparison at all.
So Claude filtered to the genuine like-for-like set: same size band, same lease era. 218 real sales of 1,000 to 1,200 sqft, 1980s-lease 4-room flats in Tampines. The median for that group (the flats that actually resemble the one on offer) is S$566.36 psf.
And the whole picture flips:
- Against all 4-room flats: −6.3%, a bargain.
- Against its true comparables: +0.7%, dead-on market.
The "discount" was never a discount. It was the older-lease haircut that every flat of this vintage carries. Priced against its actual peers, S$570 psf is the market clearing price, not a gift.
Claude backed the verdict with the receipts, three near-identical flats in the same cluster of blocks that sold in July 2026:
- 886 Tampines St 83 (1988 lease, 1,119 sqft) → S$635,888 at S$568 psf
- 852 Tampines St 82 (1985 lease, 1,119 sqft) → S$650,000 at S$581 psf
- 418 Tampines St 41 (1985 lease, 1,130 sqft) → S$620,000 at S$549 psf
Same size, same era, same town, sold within the last month. The asking flat sits right in that band, near the top of it. At the median psf of its true comps, the flat is worth about S$615,600, so the S$620k ask is roughly S$4,000 over fair value, sitting at the top of the recent range rather than the middle.
The verdict, and what it's worth
The honest answer was not the exciting one. The flat is not the underpriced steal the headline psf implies, and it is not overpriced either. It is priced about right, arguably S$4k rich, sitting at the ceiling of what its true comparables have fetched. That is genuinely useful, because it changes how you walk into the room. You are not chasing a bargain that will vanish, and you are not being fleeced. You have a specific, defensible number (around S$610,000) and three real recent sales to point at if you want to negotiate toward it.
That is the whole shift. A viewing usually runs on the seller's information and your gut. Here the buyer walks in with the same transacted data the agent has, distilled to a one-line verdict and a table of comps, in the time it takes to read a chat reply.
I want to be precise about what this is and is not. It is a data-driven estimate from live transactions, not a formal valuation. Price per square foot captures size and lease and town, but it cannot see the things that move the last few thousand dollars: which storey the unit is on, which way it faces, whether the renovation is genuinely done or lipstick, how motivated the seller is. A bank valuer weighs those. What the agent gives you is the evidence base those judgments should sit on top of, the difference between "I think it feels a bit high" and "it's 0.7% above the median of 218 real comparable sales, here are the closest three." One of those sentences wins a negotiation.
Build the same agent
Everything above is reproducible today with a free Apify account and any MCP-capable client (Claude Desktop, Cursor, or your own agent).
- Get your Apify API token from the Apify Console under Settings → Integrations.
- Add the official Apify MCP server to your client and list both Actors in the
toolsparameter:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=scrapers_lat/singapore-hdb-resale-prices-scraper,scrapers_lat/singapore-propertyguru-scraper",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}
- Restart the client, then hand it a listing in plain English: paste the asking price, floor area, town and flat type, and ask whether it is fair against recent transactions. The agent picks the listing tool to confirm the asking figures, then the resale tool to fetch the comps, and does the maths.
📌 The key instruction is "compare like for like." The single most valuable thing the agent did was refuse the all-flats median and filter to the same size and lease era. Tell it explicitly to match floor area and lease year, or it may hand you the flattering 6% "discount" instead of the real 0.7%. The data is only as honest as the segment you compare against.
🏹 Extend it. The same pattern scales to any town or flat type: query town: "BEDOK" and flatType: "5 ROOM", or point it at a whole shortlist and ask for the one priced furthest below its comps. Add the Singapore Property Guru rental angle to check rental yield, or the broader Singapore data set of registry and market Actors to layer in more context. Every extra tool is one more line in the tools list and zero new code.
The Actors used in this experiment: Singapore HDB Resale Flat Prices Scraper and Singapore PropertyGuru Listings Scraper.




Top comments (0)