Skip to main content

Real Estate PropTech on AWS (2026): MLS Ingest, Geo Search, and Image Pipeline Reference Architecture

Cloud ArchitectureUpdated Palaniappan P3 min read

Quick summary: For a regional PropTech platform (~420k listings, 38 MLS connectors), DynamoDB canonical store + OpenSearch geo cut p95 search latency from 340 ms to 48 ms, and image CDN cost dropped 62% with Intelligent-Tiering.

Key Takeaways

  • Amazon OpenSearch Service supports k-NN vectors up to 16,000 dimensions per field (vector search docs), enough for listing embedding similarity at regional scale
  • The petabyte-scale lessons from AWS HealthImaging do not apply here
  • Benchmark pattern (not a cited client): Regional PropTech, ~420k active listings, 38 MLS connectors, search p95 340 ms, image storage $28k/mo on Standard
  • Phase 1: DynamoDB canonical + OpenSearch (search p95 340 ms → 48 ms)
  • Phase 2: S3 Intelligent-Tiering + CloudFront WebP (image CDN cost −62%)
Real Estate PropTech on AWS (2026): MLS Ingest, Geo Search, and Image Pipeline Reference Architecture
Table of Contents

Amazon OpenSearch Service supports k-NN vectors up to 16,000 dimensions per field (vector search docs), enough for listing embedding similarity at regional scale. PropTech wins on ingest discipline and geo index design. The petabyte-scale lessons from AWS HealthImaging do not apply here.

This post is the real estate / PropTech reference architecture, from MLS to mobile map. Retail analytics is covered in retail lakehouse analytics and fintech in fintech payments architecture. The industry hub FAQ covers the industry overview.

Artifacts: listing search tier matrix, MLS ingest cost worksheet, architecture diagram (draw.io).

Four lanes from MLS to mobile

LaneQuestionDefault AWS path
IngestHow do feeds land safely?Per-connector Lambda + Step Functions
CanonicalWhat is source of truth?DynamoDB single-table
SearchHow do users query map + text?OpenSearch geo_point + optional k-NN
MediaHow do photos load fast?S3 → CloudFront WebP variants

Opinionated take: DynamoDB canonical store before OpenSearch cluster. Teams that index MLS JSON directly into OpenSearch rebuild dedupe logic twice.

Reference architecture

PropTech MLS ingest, search, and image CDN architecture on AWS

Figure: MLS ingest to DynamoDB canonical store, OpenSearch geo search, and S3/CloudFront image pipeline. Open draw.io source

MLS/IDX APIs ──► Lambda connector ──► SQS ──► Normalize ──► DynamoDB (canonical)
                                    │
                                    ├──► OpenSearch (geo_point, facets, k-NN)
                                    │
Images ──► S3 ingest ──► Lambda resize (WebP) ──► CloudFront ──► mobile/web
                                    │
Optional ──► Rekognition labels ──► listing enrichment
Optional ──► Bedrock ──► listing copy (human review gate)

Ingest: one connector, one failure domain

Per feed:

  • Independent Lambda + DLQ, so one MLS outage does not poison others
  • Normalize to unified schema; key (marketId, listingId) + addressHash for cross-MLS dedupe
  • Fill mls-ingest-cost-worksheet.csv after pilot week in Cost Explorer

Do not schedule full image re-sync 12×/day on large feeds. Use delta + ETag only.

Canonical: DynamoDB single-table

See DynamoDB single-table SaaS patterns:

  • PK: MARKET#<id>, SK: LISTING#<id>
  • GSI: geoHash + status for bbox pre-filter before OpenSearch
  • Stream → OpenSearch indexer (idempotent upsert)

Search: OpenSearch geo plus optional k-NN

  • Map location as geo_point for geo_distance and polygon filters
  • Enable k-NN when marketing needs “homes like this”, and watch memory: HNSW footprint scales with vector count (OpenSearch quantization blog)
  • Amazon Location Place Index for autocomplete if address parsing is messy. Do not geocode twice in app and index

Images: cost control

  • Generate thumb, card, gallery WebP at ingest
  • Intelligent-Tiering after 90 days for stale listings
  • CloudFront cache keys per variant. Never serve raw MLS TIFF to mobile

When NOT to escalate

SituationStay lighter
MVP, one MLS, map-onlyAPI Gateway + DynamoDB GSI
< 50k listingsSkip k-NN and second index
No OpenSearch ops ownerManaged cluster minimum + runbook first
CRE analytics / portfolioData lake post, not consumer search

What to Do This Week

  1. Inventory MLS connectors and fill mls-ingest-cost-worksheet.csv.
  2. Run listing-search-tier-decision-matrix.md with product + finance.
  3. Implement DynamoDB canonical + one OpenSearch index for top market only.
  4. Switch image bucket to Intelligent-Tiering; measure CloudFront bytes-out for 7 days.
  5. Defer Bedrock listing copy until human review workflow exists.

What This Post Doesn’t Cover

  • Title / escrow transaction workflows: downstream of search
  • Commercial CRE lease abstraction: document AI, separate path
  • Mortgage origination: fintech compliance cluster
  • Specific MLS vendor contracts: legal/commercial, not architecture

We have not load-tested k-NN above 2M vectors on a single domain. Run the OpenSearch sizing calculator before national semantic search rollout.

Related: Real estate industry hub · Serverless services · Data analytics · Cost optimization

Frequently asked questions

When should we add OpenSearch vs DynamoDB GSI geo alone?
Stay on DynamoDB when you have under ~100k active listings, bbox-only map search, and sustained search QPS under ~50. Add OpenSearch when you need polygon filters, full-text facets, relevance ranking, or embedding similarity (k-NN up to 16,000 dimensions per AWS OpenSearch docs).
When should we NOT run 12x/day full MLS image re-sync?
Never at scale. Full image re-sync on high-frequency feeds dominates Lambda and S3 PUT cost. Use delta sync with ETag/last-modified, resize to WebP variants on first ingest only.
What breaks when MLS duplicate keys collide?
Buyers see two pins for one property; saved-search emails double. Symptom: OpenSearch doc count exceeds DynamoDB canonical count. Fix: composite key (marketId, listingId) + address-hash dedupe in Step Functions before index.
How does this differ from retail omnichannel analytics?
Retail lakehouse posts focus on orders, inventory, and CDP events. PropTech focuses on MLS ingest cadence, geo search latency, and image CDN economics. The KPIs and ingest shapes differ.
Should we use Rekognition for property condition scoring?
Off-the-shelf labels work for marketing tags (pool, kitchen). Condition scoring (roof, foundation) needs Custom Labels and typically 500+ labeled images per class, so do not promise AVM-grade condition from default labels alone.
What could go wrong during spring-buying-season traffic?
OpenSearch cluster undersized while CloudFront cache hit ratio drops on new listing photos. Mitigate with autoscaling policy on search tier, pre-warm popular markets, and separate image origin from API origin.
Palaniappan P
Palaniappan P

AWS Cloud Architect & AI Expert

AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.

AWS ArchitectureCloud MigrationGenAI on AWSCost OptimizationDevOps

Recommended Reading

Explore All Articles »
4 min

AWS Global Accelerator vs CloudFront & Route 53 (2026)

Global Accelerator charges about $0.025 per provisioned accelerator per hour, even while disabled, and adds Data Transfer-Premium on top of normal data transfer. Two static Anycast IPv4 addresses (or four addresses in dual-stack: two IPv4 and two IPv6) front ALBs, NLBs, EC2, or EIPs across Regions; that pricing model changes whether you beat CloudFront or Route 53 latency records alone.

Palaniappan P