Ram.Franco LogoRam.Franco
Why Real Estate Search is Secretly the Hardest Problem in Tech
Next.js

Why Real Estate Search is Secretly the Hardest Problem in Tech

6 min read

I've built two real estate platforms. listd.ph (Philippine marketplace) and All American Warehouse (industrial properties in the US).

They should have been simple. They were not.

The "Simple" Requirements

Every real estate client starts with the same pitch:

"We just need a search page. You know, like Zillow. Easy, right?"

Narrator: It was not easy.

Here's what "simple" real estate search actually means:

  • Price range filters (with currency formatting that changes per locale)
  • Location search (with geocoding, boundaries, and "near me")
  • Property type filters (that change based on country/region)
  • Bedroom/bathroom counts (studios count as 0 or 1? Depends who you ask.)
  • Square footage (but also square meters, because Philippines)
  • Map view with clustering (try rendering 10,000 pins without crashing Chrome)
  • List view with sorting
  • URL state persistence (so users can share searches)
  • Mobile-friendly everything

The URL State Problem

This one almost broke me.

When a user filters properties, the URL should update. So they can:

  1. Bookmark their search
  2. Share it with their spouse
  3. Hit back and not lose everything

Sounds simple. But consider this URL:

/properties?city=manila&min_price=5000000&max_price=10000000&beds=3&type=condo&sort=newest

Now the user changes the page:

/properties?city=manila&min_price=5000000&max_price=10000000&beds=3&type=condo&sort=newest&page=2

Now they change the sort:

/properties?city=manila&min_price=5000000&max_price=10000000&beds=3&type=condo&sort=price_asc&page=1

Wait, did we reset the page to 1 when sort changed? We should. Did we? Let me check the bug tracker.

Did You Know?

Trivia: The average user applies 4.7 filters before viewing a property. But they only consciously remember applying 2. This is why "Clear All Filters" buttons get clicked more than you'd expect.

The Map Clustering Rabbit Hole

Showing properties on a map seems straightforward until you have 50,000 listings.

Option 1: Load all 50,000 markers

  • Result: Browser dies. User angry.

Option 2: Cluster markers

  • Result: User clicks cluster, gets confused. "Where are the actual properties?"

Option 3: Load markers within viewport

  • Result: User zooms out. Sees nothing. "Your site is broken."

The solution? All three. With logic that switches between them based on zoom level and density.

// This function has 47 edge cases. I've documented 12.
function getVisibleMarkers(bounds: LatLngBounds, zoom: number) {
  if (zoom < 10) return getClusters(bounds);
  if (zoom < 14) return getSampledMarkers(bounds, 100);
  return getAllMarkers(bounds);
}

The Hero Image Debacle

Every listing needs a hero image. But not every seller uploads good photos.

I've seen:

  • A photo of the seller's finger (extreme close-up)
  • A screenshot of a Google Maps street view (why)
  • A completely black image (the flash didn't fire)
  • A photo of a different property entirely (legal nightmare)

My solution: A quality scoring algorithm that promotes well-lit, properly-composed images.

My real solution: A very patient moderation team.

Lessons Learned

  1. Real estate is data chaos. Every country has different conventions. Square feet vs. meters. Condos vs. flats. Price per month vs. total price. Normalize early.

  2. Search is a conversation. Users don't know what they want until they see what they don't want. Make refinement effortless.

  3. The map is not the territory. But users expect it to be. Make sure your geocoding is accurate within 50 meters or prepare for angry calls.

Building listd.ph and All American Warehouse taught me that the best UX is the one that gets out of the way. Users don't want to "use a platform." They want to find a home.

Now if you'll excuse me, I need to go fix a bug where "3+ bedrooms" was returning studios.

Next.js
PostgreSQL
Real Estate
UX

More from the Blog

Limited Availability

Ready to Build Something Extraordinary?

Whether you have a fully-defined project scope or just a high-level vision, let's discuss how we can bring it to life with production-grade engineering.

Available for new projects