What You’re Setting Up
A connection to your MLS’s RETS (Real Estate Transaction Standard) server to pull listing data, photos, agent info, and office details.
Important note: RETS is being phased out industry-wide in favor of the RESO Web API. Many MLS boards still use RETS, and some will for years to come, but if your MLS offers RESO Web API access, that’s the better long-term choice. Check with your MLS board about which protocol they support.
Prerequisites
- RETS credentials from your MLS board (request credentials first)
- Your RETS server URL, username, password, and user agent string (provided by the MLS)
Connection Details You’ll Need
Your MLS will provide some or all of the following:
- RETS Server URL: Something like
https://rets.mlsboard.com/rets/login - Username: Your assigned login
- Password: Your assigned password
- User Agent: A string that identifies your client (some MLS boards require a specific value)
- User Agent Password: Some boards require this as additional authentication
- RETS Version: Usually 1.7.2 or 1.8 — the MLS will specify
Step-by-Step Setup
1. Test the Connection
Before building anything, verify you can connect. We use a RETS client library to log into the server and confirm the credentials work.
What we’re looking for:
- Successful login response
- No “unauthorized” or “invalid credentials” errors
- The server returns a capabilities list (URLs for search, metadata, objects, etc.)
If you want to test on your own, open-source RETS clients and browser-based tools exist. We can recommend one if you’d like to verify independently.
2. Explore the Metadata
RETS servers organize data into resources, classes, and fields. Exploring the metadata tells us what data is available and how to query it.
- Resources: Top-level categories like Property, Agent, Office, OpenHouse
- Classes: Subtypes within a resource. For Property, you might see Residential, Commercial, Land, etc.
- Fields: Individual data points within a class — address, price, bedrooms, square footage, listing date, status, etc.
Every MLS structures their metadata differently. Field names, available classes, and data types vary. We map these to your system’s fields during the integration.
3. Common Data Pulls
For most integrations, we pull:
- Listings (Property resource): Active, pending, sold, and expired listings. This is the core data.
- Photos (Object resource): Listing photos, retrieved separately by listing ID. Photos are binary data accessed through the GetObject request.
- Agents (Agent resource): Agent name, contact info, office affiliation.
- Offices (Office resource): Brokerage office details.
4. DMQL2 Query Basics
RETS uses DMQL2 (Data Mining Query Language) to search for records. A few examples:
- All active residential listings:
(Status=A),(Class=RES) - Listings modified since a date:
(ModificationTimestamp=2026-01-01+) - Listings in a price range:
(ListPrice=200000-500000)
The exact field names depend on your MLS’s metadata. Status=A on one MLS might be StandardStatus=Active on another. We figure out the correct field names during the metadata exploration step.
5. Set Up Incremental Pulls
For ongoing sync, we don’t re-download everything each time. We query for records modified since our last pull, using a timestamp field like ModificationTimestamp. This keeps the sync efficient and avoids hitting rate limits.
Common Issues
Connection Refused
If the RETS server rejects the connection, check: the server URL is exactly right (including path), the user agent string matches what the MLS requires, and your IP isn’t blocked. Some MLS boards require IP whitelisting.
Metadata Differences Between MLSs
If you work with multiple MLS boards, expect different field names, different data structures, and different photo access methods. Our integration handles the normalization, but it means each MLS connection requires its own mapping configuration.
Photo Retrieval Failures
Photos are retrieved separately from listing data and can be slow on some RETS servers. Timeouts and partial downloads are common. Our middleware retries failed photo downloads and handles multi-image objects.
Rate Limiting
MLS boards limit how many queries you can run per minute or per day. If you’re pulling a large initial dataset, we throttle requests to stay within limits. The initial sync may take hours for large boards.
Next Steps
- If you haven’t requested credentials yet: MLS Credential Request
- If your MLS supports RESO Web API: RESO Web API Setup
- Learn more about our MLS Integration Services
Need help with the full integration?
This guide covers the setup. If you want us to handle the integration end to end, we can do that.
See Integration Services