MLS integrations, RESO Web API where modern, RETS where the MLS hasn't caught up.
MLS access is the foundation of every real estate product, and every MLS implements the standard slightly differently. We build the integration layer that handles the per-MLS quirks, normalises listings into a clean internal model, and keeps the photo pipeline running so listings render fast.
What we build
RESO Web API as the default
Modern MLSes expose RESO Web API endpoints with OAuth 2.0. We onboard new MLSes through a structured config, token endpoint, OData endpoints, photo URL pattern, and the rest of the platform reads from the same normalised model.
RETS where the MLS hasn't migrated
Plenty of MLSes still serve RETS only. The integration layer abstracts the protocol; the consuming code doesn't know whether the source was RETS or RESO. Migrations happen in the integration layer, not throughout the codebase.
Listings normalised against a typed model
Each MLS sends different field names, code values, and units. The boundary maps them to a typed internal Listing with consistent fields. New MLSes plug in by writing the per-MLS mapping; the rest of the product doesn't need to know.
Photo pipeline that doesn't hammer the MLS
Photos cache to our CDN on first request, refresh on the MLS's change webhook (or polling cadence where webhooks don't exist). Resized variants generated on upload, not on every request. MLS rate limits stay healthy.
Off-market + status transitions handled
Listings going off-market, status changes (active → pending → sold), price adjustments, all propagate within minutes. Stale listings get flagged in the operator dashboard before agents notice.
Compliance with MLS rules
Each MLS has its own display rules (attribution requirements, brokerage logos, sold-data restrictions). The display layer enforces them per MLS so the brokerage doesn't get sanctioned for non-compliant listings.
Where this fits
You're launching a proptech product and the first MLS integration has consumed a quarter without shipping.
Your existing MLS layer was a hand-rolled scraper that breaks every time the source MLS updates their data format.
You're expanding to a new region and the local MLS is still RETS-only with no migration timeline.
Tech stack
- TypeScript
- RETS
- RESO Web API
- Postgres
- BullMQ
Want this for your team?
30 minutes with a founder or senior engineer. We'll scope what you need and tell you straight whether Stacklane fits.
Book a Free Call