Search Transactions and Data Synchronization

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:

  1. Retrieve all active records updated since a specified date/time
  2. Retrieve a master list of all active records (IDs and LastUpdated values)
  3. 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
  4. 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>
  ...

SHARE POST:

Facebook
Reddit
LinkedIn

AgentDetails Payload

Parent Cardinality Name Type Description Lookup AgentDetails 1 Name String The name of the Agent AgentDetails 1 ID Integer (Attribute) Unique ID assigned to the

Read More »

Agent Payload

Parent Cardinality Name Type Description Lookup Agent 1 ID Integer (Attribute) Unique ID assigned to the Agent Agent 1 LastUpdated DateTime (Attribute) The date agent

Read More »

OfficeDetails Payload

Parent Cardinality Name Type Description Lookup OfficeDetails 1 Name String The name of the Office OfficeDetails 1 ID Integer Unique ID assigned to the Office

Read More »

Office Payload

Parent Cardinality Name Type Description Lookup Office 1 ID Integer Unique ID assigned to the office Office 1 Last Updated DateTime The date the office

Read More »