HomeServicesMLS Data IntegrationRESO Web API
RESO Web API, OData

Your MLS feed, into the site you have.

Your MLS approved your Web API access and sent the docs. We turn that feed into listings, solds, agents and map search inside the site you already run, on WordPress, Laravel or custom code.

Run by
Your MLS, direct
Protocol
RESO Web API, OData
Refresh, configurable
2 to 3 h
RESO Web API handshakeIllustration, not a live connection
  1. POST /token client_credentials
    Access issued by your MLS.
  2. GET /$metadata
    This MLS's fields and lookups.
  3. GET /Property?$top=1000
    The whole feed, page by page.
  4. @odata.nextLink
    Followed until the feed runs out.
  5. $filter=ModificationTimestamp gt {last}
    Every 2 to 3 hours after that.
OAuth client credentials or a bearer token, issued by your MLS once access is approved.
The gap

Approved for the feed. Nothing on the site yet.

Credentials are the easy part. The work is the sync: paging through the whole feed, picking up only what changed, removing what went off market, and keeping photos, rosters and disclaimers right. That is what we build.

  • Active listingsPending and coming soon included, refreshed every 2 to 3 hours.
  • SoldsSynced on their own schedule, scoped to your office by default.
  • Agent and office rostersFrom the feed, or built from listings when there is no roster access.
  • Open housesSynced and attached to their listings.
  • Photos and virtual toursCarried through and served from an image CDN with resizing.
  • Map searchBox, drawn polygon, radius and neighborhood, with pin clustering.
The provider

What the RESO Web API is

The RESO Web API is the standard the real estate industry uses to move listing data. It is published by RESO, the Real Estate Standards Organization, and built on OData version 4, a common standard for REST APIs over HTTP.

It works with the RESO Data Dictionary, which names the resources, fields and lookups: Property, Member, Office, Media and more, with over 1,700 fields and 3,100 lookups. Version 2.0 is the latest ratified release, and 2.1 is in draft.

RESO certifies MLSs, brokers and vendors on Web API Core 2.0.0 and Data Dictionary 2.0, and publishes a list of certified organizations.

Getting access

How a broker gets access

When your MLS serves the Web API itself, you ask the MLS. RESO points brokers to their local MLS and its software provider for credentials.

  1. 1

    Ask your MLS

    Contact the MLS data or technology team and ask whether it serves the RESO Web API directly or through a vendor platform.

  2. 2

    Choose the licence

    Pick the use that fits your site, where your MLS offers it: IDX for public listing display, VOW for signed in visitors, or back office for internal use.

  3. 3

    Sign the data licence

    The MLS sends its data licence agreement. It sets which fields, statuses and display rules apply, and any fee.

  4. 4

    Get credentials

    The MLS or its vendor issues OAuth client credentials or a bearer token, plus the endpoint URL.

  5. 5

    Read the metadata, then go live

    The $metadata document shows the fields and lookups your licence includes. The sync is checked against it before your pages switch over.

Your MLS sets the terms, the fees and how long approval takes.
What the feed carries

What the feed exposes

Every certified feed shares the same core. What differs is the local fields and limits each MLS adds.

01

Resources

Property for listings, Member and Office for rosters, Media for photos, and often OpenHouse. Names and core fields follow the Data Dictionary.

02

Metadata

GET $metadata returns an XML description of every resource, field and lookup on the feed. It is the first thing to read, since local fields differ by MLS.

03

Queries

Standard OData options: $filter, $select, $top, $orderby and $expand. How far each one goes, such as the largest $top, is set by the MLS or its vendor.

04

Paging

Large results come back a page at a time, with @odata.nextLink pointing to the next one.

05

Incremental pulls

RESO describes replication as a full pull first, then requests for recent changes. Changes are found with a filter on ModificationTimestamp, tracking the last value seen.

06

Removals

A changes query shows what changed, not what left. A purge that compares listing keys against your copy takes care of that.

From experience

Quirks we already handle.

Things that only show up once a feed has run for a few months. We learned them on a multi MLS platform we built and ran from 2018 to 2025.

Metadata differs per board

Two certified feeds still differ in local fields, lookups and status values. Each MLS gets its own small filter class on top of the shared parser.

Paging with nextLink

Large pulls come back a page at a time. We follow @odata.nextLink to the end and record where the run stopped.

Off market listings

A daily purge removes what left the feed. If the feed returns too few IDs, the purge is skipped and we get an alert.

Display rules

IDX opt out flags and per listing address hiding are honoured, and each board's disclaimer shows the last updated time.

Your stack

Into WordPress, Laravel or your own stack

WordPress

The credentials and token live in server config, not in plugin settings that editors can see. The sync runs from a server cron job and fills its own tables, so the theme reads listings without calling the MLS on each page view. Local fields are mapped once, in the sync.

Laravel

Each MLS gets a config entry and a small filter class on top of a shared parser. Scheduled queued jobs run the changes pull, the weekly full re-sync and the daily purge. Models read the listing tables, and map search runs on a search index.

Custom

Any stack that can call an OAuth endpoint and run a schedule will do. Because the fields follow the Data Dictionary, adding a second MLS later reuses most of the mapping, and only the local fields and display rules need new code.

How the switch happens

Old feed stays up until the new one agrees.

Your listings never go blank. The new sync runs beside whatever feeds the site today, and we only switch when the two match.

  1. Audit

    We check your MLS access, your platform and what the site needs to show.

  2. Run the sync beside the site

    The new sync fills its own tables while your current pages carry on.

  3. Compare

    Counts, statuses, photos and rosters checked against the MLS.

  4. Switch and retire

    Pages read from the new sync. Whatever fed them before is switched off.

Choosing a feed

Direct feed or an aggregator?

Some MLSs serve the Web API themselves, others through a platform like Trestle, Bridge, MLS Grid or Spark, and many offer more than one route. A direct feed has fewer layers and one relationship. A platform adds its own fees, but gives you one account across several MLSs.

For one MLS, a direct feed keeps things simple. For several, a platform can cut the work on contracts and credentials. Either way the data follows the same standard, so the sync code changes little.

TrestleOne account for many MLSs, with licensing and billing handled in its dashboard.
Bridge InteractiveMLS datasets plus Zillow Group data, with photos served from a CDN.
MLS GridOne standard licence across its participating MLSs, replication only.
Spark APIFor MLSs on Flexmls, with plans bought through the Spark Datamart.
Start here

MLS feed audit

$499credited to the integration
  • Your MLS access and feed type checked: RESO Web API, RETS, Trestle, Bridge, MLS Grid
  • Your platform, data model and hosting checked
  • Written sync plan: what syncs, how often, what shows where
  • Fixed quote for the integration
Request this package
What happens next
  1. You send the basics.

    Your site's address, what it runs on, and which MLS or feed you have access to.

  2. We check the feed and the site.

    Access, fields, photos, rosters, and how your platform stores listings.

  3. You get a written plan.

    What syncs, how often, what shows where, and a fixed price for the build.

  4. You decide.

    If you go ahead, the $499 comes off the integration.

We are an independent developer. We are not affiliated with, or certified by, any MLS or data provider named on this page.

Other feeds

On a different feed?

FAQ

Before the audit.

Certification covers the standard fields and the API behaviour. Local fields, lookups and display rules still differ, and those are handled per MLS.
Active listings every 2 to 3 hours, configurable, with a full re-sync each week and a daily purge of off market listings.
Yes. The data license is between you and your MLS. We work under the access you are granted.
It is the industry standard for sending MLS data over the web, built on OData and published by RESO. It replaced RETS.
The shared list of resources, fields and lookup values, such as ListPrice and StandardStatus, that certified feeds use. It is why two MLS feeds can land in one schema.
No. IDX is a licence that says where and how listings may be shown. The Web API is how the data is delivered. An IDX feed is often served over the Web API.
RESO publishes a list of certified organizations and live certification reports on its site. Your MLS can also tell you which versions it is certified on.
You can, the first version. Many RETS era feeds were built quickly and broke over the next few years: token changes, board rule changes, photos moving hosts, purges that wiped sites. The audit tells you what you would be signing up for either way.
The feed audit is $499 and credited to the integration. The integration is quoted as a fixed price after the audit.

Find out what your feed needs.

Send the site's address and the feed you have access to. The audit gives you a written plan and a fixed quote.