AI PlatformProperty TechnologyRepresentative case study

Letting Renters Search Listings by Intent, Not Just Filters

How Keystone Properties made inconsistent listing data findable with hybrid semantic and structured search.

View project overview →

Customer context

Keystone Properties manages residential listings across multiple markets, with listing descriptions written by different property managers and varying significantly in detail and consistency.

The challenge

Keystone's filter-based search required renters to know exactly which checkboxes corresponded to what they wanted, and listings with inconsistent or incomplete structured metadata were effectively invisible to filtered search — even when the listing description itself was a strong match for what a renter was looking for.

Requirements

Discovery

Auditing a sample of Keystone's listings showed the core problem clearly: many strong matches for common search intents (“quiet, near transit, pet-friendly”) existed in the free-text listing description but weren't captured in structured fields at all, because property managers described their units differently. No amount of tuning the existing filter system would have fixed that — the information genuinely wasn't in the structured data.

Solution

We built a hybrid search system: a vector index over listing descriptions handles semantic relevance, while structured filters continue to handle hard constraints like price range and bedroom count. Renters can search with a natural description, structured filters, or both together, with results merged and ranked across both signals.

Technical architecture

Listing descriptions and metadata are embedded into a vector index that updates as listings are added or changed, kept current through an event-driven pipeline tied to Keystone's listing management system rather than a scheduled batch job. Search queries run against both the vector index and structured filter criteria, with a ranking step that blends semantic relevance and filter match strength rather than treating them as separate, sequential steps.

Implementation approach

We built the semantic search layer as an addition alongside the existing filter system, not a replacement, and ran both in parallel during evaluation — comparing which listings each approach surfaced for the same real renter queries pulled from Keystone's search logs. This made the value of the semantic layer measurable before asking Keystone to commit to it as the primary search experience.

Key features

Integrations

Challenges & decisions

We considered asking property managers to standardize their listing descriptions instead of building semantic search — cheaper technically, but unrealistic operationally across a large, distributed team of property managers with varying writing styles. Building search that tolerates real-world data inconsistency, rather than requiring the data to be cleaner, was the more durable solution.

Representative outcomes

Improved match relevance

Listings with inconsistent structured data became findable through semantic matching.

Fewer zero-result searches

Natural-language queries surface relevant listings that keyword filtering would miss.

Faster listing discovery

Renters find relevant options without needing to know the right filter combination.

No dependency on data cleanup

Search quality improved without requiring property managers to change how they write listings.

Technology stack

TypeScriptPythonPostgreSQLOpenAI

In their words

The search team ran their new semantic approach side by side with our existing filters against real search logs before recommending we switch. It wasn't a sales pitch — it was evidence, and that's how they made the case for every decision on the project.

JT

James Turner

Product Manager, Keystone Properties

Related services

Interested in a similar outcome?

We're glad to walk through how this approach would translate to your situation.