Data-layer reference · Earnest

The RESO Web API standardized listing data across MLSs in 2018, and the standardized payload maps almost 1:1 into RealEstateListing JSON-LD.

  • RETS (1999) → RESO Web API (2018) replaced bespoke per-MLS field naming with a RESTful, standardized architecture.
  • Data Dictionary 2.0 organizes the standardization through Resources (Property, Member, Office), Fields, and Lookups.
  • Multi-MLS brokerages can now ship rich-result-eligible schema across the unified inventory without per-MLS custom mapping.
NAR-COMPLIANT · FAIR HOUSING-SAFE · MLS/IDX-FLUENT
● BOOKING NEW OPERATORS
[ WHY ] What this spoke covers

The RESO Web API patterns that govern schema scalability and rich-result eligibility across every MLS in the inventory.

Pre-2018, every MLS feed required bespoke field normalization for schema generation, which meant a multi-MLS brokerage either shipped inconsistent schema across markets or skipped the schema layer entirely. The 2018 RESO Web API migration changed the picture. The standardized JSON payloads map almost 1:1 into RealEstateListing JSON-LD, and rich-result eligibility becomes a consistent property of the inventory across markets. The four sections below cover what changed, what the Data Dictionary 2.0 actually structures, and where local-market specificity still ships safely.

DICTIONARY VERSION 2.0
STANDARD FIELDS 1,700+
SCHEMA TARGET REALESTATELISTING JSON-LD
[ 01 ]

RETS to RESO Web API: what the 2018 migration actually changed.

The Real Estate Transaction Standard (RETS), launched by NAR in 1999, replaced inefficient FTP transfers but left field naming wildly inconsistent across local MLS markets. SEO and schema work required bespoke normalization per MLS just to generate accurate structured data. The 2018 industry migration to the RESO Web API replaced RETS with a RESTful architecture and standardized the underlying field names through the Data Dictionary. The downstream effect on schema is the consequential one: standardized JSON payloads now map almost 1:1 into RealEstateListing JSON-LD across every compliant MLS, which makes scalable schema generation a property of one ingestion pipeline rather than a per-MLS bespoke build.

[ 02 ]

Data Dictionary 2.0: Resources, Fields, and Lookups.

The Data Dictionary 2.0 organizes standardized field naming through three layers. Resources are the major data categories: Property (the listings), Member (the agents and members), Office (the brokerages), Media (the photos and virtual tours), and others. Fields are the individual data points within each Resource: ListPrice, BedroomsTotal, BathroomsFull, LivingArea, PropertyType. Lookups are the enumerated value sets bound to fields with restricted vocabulary: the specific fence types, the specific roof materials, the recognized property statuses. The hierarchy is what makes the standardization legible to schema generators on the consuming side and to ranking systems on Google's side.

[ 03 ]

Property Resource fields that drive rich-result eligibility.

Google's RealEstateListing rich-result eligibility maps to a small set of high-value Property Resource fields. ListPrice for price, BedroomsTotal for beds, BathroomsFull and BathroomsHalf for baths, LivingArea for sq ft, PropertyType for residential / commercial / lease, ListingId for the listing identifier, and the Media Resource entries that ship as the listing image array. datePosted on the listing schema pulls from OriginalEntryTimestamp or ListContractDate, depending on the local MLS convention. Each field has a documented stable name across compliant feeds, which means one schema generator handles every MLS the brokerage ingests from.

[ 04 ]

Local custom fields and the additionalProperty slot.

Local MLSs extend the standardized dictionary with market-specific custom fields. A coastal MLS adds a Bulkhead boolean, a ski-market MLS adds a SkiAccess enumeration, a desert-market MLS adds a CasitaBedrooms count. The additionalProperty slot on RealEstateListing is the supported pattern for shipping these without breaking the standardized schema. The schema generator checks every field against the RESO Data Dictionary 2.0 field list, routes recognized fields into their standardized slots, and routes anything unrecognized into additionalProperty with the field name and value preserved. The pattern ships local-market specificity cleanly and avoids triggering Google's structured-data parser into validation errors on the local extensions.

[ FAQ ] Common questions

What operators ask about the RESO Web API before they evaluate a multi-MLS IDX vendor.

[ 01 ] Why does the RESO Web API matter for SEO and not just for data integration? +
Because the standardized payload maps almost 1:1 into RealEstateListing JSON-LD. Pre-RESO, each MLS feed required bespoke field mapping for schema generation, which meant a multi-MLS brokerage shipped inconsistent schema across markets or skipped the schema layer entirely. Post-RESO, one schema generator handles every MLS feed: Property Resource fields go into the standardized RealEstateListing slots, Lookups (the enumerated value sets) ship as machine-readable enumerations, local custom fields route into additionalProperty. Rich-result eligibility (price, beds, baths, sq ft, photos in SERP features) becomes consistent across the entire inventory rather than custom per market.
[ 02 ] Which RESO Property Resource fields actually drive rich results? +
The core fields Google reads for RealEstateListing rich-result eligibility map to the Property Resource: ListPrice (price), BedroomsTotal (beds), BathroomsFull and BathroomsHalf (baths), LivingArea (sq ft), PropertyType (residential, commercial, lease), ListingId (listing identifier), and the Media Resource entries that ship as the image array. datePosted (sourced from the MLS field, not the page publish date) carries the freshness signal. spatialCoverage on unique-parcel-shape listings improves geographic precision. leaseLength on rental listings communicates the term shape. Each field maps to a documented RESO Data Dictionary 2.0 field with stable naming across compliant feeds.
[ 03 ] How do we handle the local custom fields that are not in the standard dictionary? +
The additionalProperty slot on RealEstateListing is the supported pattern. A coastal MLS Bulkhead boolean ships as additionalProperty with name and value preserved. A ski-market MLS SkiAccess enumeration ships the same way. The schema generator detects non-standardized field names by checking against the RESO Data Dictionary 2.0 field list, routes recognized fields into their standardized slots, and routes anything unrecognized into additionalProperty. The pattern ships the local-market specificity without breaking the standardized schema or triggering Google's structured-data parser into validation errors.
MLS and IDX diagnostics · Q3 2026

If the IDX vendor is ingesting from the RESO Web API but stripping the schema layer on render, the rich-result ceiling is set before any retainer work begins. Book an MLS and IDX diagnostic.

We inspect the RESO Property Resource field coverage on the vendor's ingestion, the schema-output sample the vendor generates, the additionalProperty handling for the local custom fields per MLS, and the rich-result eligibility across the unified inventory. Output is the per-MLS field-coverage assessment plus the migration path when the vendor is capping the schema program above the standardized baseline. Funnels into our /mls-idx-seo/ retainer when the work runs deeper than a vendor-evaluation pass.

[ DIAGNOSTIC INTAKE ] Book a diagnostic

Four fields. We respond inside one business day with a few questions to make sure we can help, before either of us spends time on a call.

We use what you submit to qualify, then respond by email. We don't subscribe you to anything.