The MLS® IDX API allows clients to request and receive MLS® listing data for use on their websites and applications. This data must be refreshed regularly, as records are continuously added, updated, or removed.
The set of records available to each client is determined by:
- The type of destination making the request
- The owner of the destination
- The approval settings of boards, associations, brokerages, and/or salespersons (where applicable)
The MLS IDX API does not support ad-hoc queries against its data. Search filtering — such as restricting results to specific property types or price ranges — is not part of the Search transaction itself. Instead, filters are configured when a data feed is registered or edited.
Search transactions can be performed against three possible resource types: Office, Agent, and Property. The search process is the same for each resource:
- Retrieve all active records updated since a specified date/time
- Retrieve a master list of all active records (IDs and LastUpdated values)
- Compare the master list to the client’s local data store by matching IDs, identifying any records that are missing or have different LastUpdated values
- Retrieve the set of records by ID
Step 1: Retrieve All Active Records Updated Since a Specific Date/Time
It is neither necessary nor efficient to pull full property details for every active record on each request. Instead, clients should request only those records that have been updated since the last retrieval.
Including a LastUpdated query parameter in a search will return complete record details for all listings that have been updated since the specified date/time.
The following parameters are supported when using LastUpdated queries:
- Limit – Controls how many results are returned per page
- Offset – Specifies the starting point for the results, allowing pagination
- Count – Returns a count of matching records along with the results
When Count is requested, the response will include a Pagination element containing:
- TotalRecords
- Limit
- Offset
- RecordsReturned
- TotalPages
Query Syntax:
LastUpdated=RETSDateTime
Sample Result (Standard-XML):
<?xml version="1.0"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<RETS-RESPONSE xmlns="MLSIDXAPI.Search.Property">
<Pagination>
<TotalRecords>41</TotalRecords>
<Limit>10</Limit>
<Offset>21</Offset>
<TotalPages>5</TotalPages>
<RecordsReturned>10</RecordsReturned>
</Pagination>
<PropertyDetails>
<ID>10494823</ID>
<LastUpdated>Tue, 07 Jun 2011 04:20:24 GMT </LastUpdated>
<ListingID>55131841</ListingID>
<Building>
<BathroomTotal>1</BathroomTotal>
<BedroomsTotal>3</BedroomsTotal>
...
Sample Result (Compact)
<?xml version="1.0" encoding=UTF-8"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<COUNT Records="40"/>
<DELIMITER value="09"/>
<COLUMNS> ArchitecturalStyle AttachedGarageYN BathroomsHalf</COLUMNS>
<DATA> False 1 3 </DATA>
<DATA> False 1 3 </DATA>
...
Step 2. Retrieve a master list of all active records
Master Record List Search
This type of search provides clients with a complete master list of all records that should exist in their data store. Each record in the list includes two key values:
- Record ID
- LastUpdated timestamp
By comparing this master list to the client’s local data store, it becomes possible to identify which records need to be updated, deleted, or inserted.
- The master list search always returns a full set of records.
- Paging with Limit and Offset is not supported in Standard-XML, but it is supported for Compact format queries.
Query Syntax:
(ID=*)
Compact Format Option:
When requesting data in Compact format, the master list can also be retrieved by selecting only the ListingKey and ModificationTimestamp:
SELECT=(ListingKey,ModificationTimestamp)
This will return all records, regardless of any query supplied.
Sample Result (Standard-XML)
<?xml version="1.0"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<RETS-RESPONSE xmlns="MLSIDXAPI.Search.Property">
<Pagination>
<Property LastUpdated="THU,03 DEC 2026 01:55:46 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:54:42 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:53:06 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:52:12 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:51:07 GMT ID="10166883"/>
...
Sample Result (Compact)
<?xml version="1.0" encoding=UTF-8"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<COUNT Records="40"/>
<DELIMITER value="09"/>
<COLUMNS> ListingKey ModificationTimestamp>
<DATA> 799656 24/09/2026 10:05:23 AM</DATA>
<DATA> 799656 24/09/2026 10:12:17 AM</DATA>
<DATA> 799656 24/09/2026 10:25:32 AM</DATA>
<DATA> 799656 24/09/2026 10:38:23 AM</DATA>
<DATA> 799656 24/09/2026 10:44:34 AM</DATA>
...