Skip to Content
GraphQLRESO listings

RESO listings (resoProperties)

The resoProperties query returns MLS listing rows modeled as RESO-style groups (listing, location, structure, tax, financial, etc.). Filters are translated to OData against the RESO listings endpoint; results expose rich nested objects on each RESOProperty.

Connection result

FieldTypeDescription
totalCountInt!Matching listing count when returned by the backing API.
nodes[RESOProperty]Listings for the current page.

Endpoint

POST /graphql

Root query (example)

query ResoListings( $filter: RESOPropertyFilter! $limit: Int $offset: Int $orderBy: RESOPropertySort ) { resoProperties(filter: $filter, limit: $limit, offset: $offset, orderBy: $orderBy) { totalCount nodes { cid listingKey propertyType propertySubType listing { standardStatus listPrice closePrice } location { address { unparsedAddress city stateOrProvince postalCode } } baseProperty { countyFipsCode parcelNumber } } } }

Variables (example)

{ "filter": { "listing": { "standardStatus": { "eq": "Active" } }, "location": { "address": { "stateOrProvince": { "eq": "CA" } } } }, "limit": 10, "offset": 0, "orderBy": { "price": { "listPrice": "DESC" }, "dates": { "modificationTimestamp": "DESC" } } }

How filtering works

  • Input type: RESOPropertyFilter with top-level cid, listingKey, propertyType, location, listing.
  • Listing subtree: listing.originatingSystemName, listing.standardStatus, listing.price (close/list/previous prices), listing.dates (status/modification/close/on-market/off-market timestamps, days on market), listing.agentOffice (buyer/list/co agents & offices), listing.structure, listing.equipment, listing.leaseAmount, listing.rawMlsPropertySubType.
  • Location subtree: location.address.* for street, city, state, postal, county, etc. - each uses RESO StringFilter with eq, ne, contains, startsWith as defined on that schema.
  • Operators: Strings use comparison filters as noted above; numeric fields use FloatFilter and IntFilter; dates use DateTimeFilter with eq, gt, ge, lt, le.
  • Combining: Same as base properties: omit top-level and or or for an implicit AND bundle, or supply explicit logical objects when your client passes structured filters.
  • Backend: Built server-side into OData for the Property/listings service (not the same entity set as BaseProperties).
RESOPropertyFilter branchRole
cid, listingKeyPin or scan specific listings / linked public CID.
propertyTypeRESO string filter on listing property type.
locationAddress-centric geographic filters.
listingMLS workflow, pricing, dates, agents, equipment, lease, structure hints.

How sorting works

orderBy: RESOPropertySort supports nested groups:

GroupFields
priceclosePrice, listPrice, listPriceLow, originalListPrice, previousListPrice
datesmodificationTimestamp (and other date sorts if enabled in schema)

Use ASC or DESC per field. Only mapped fields are sent to the listings OData layer.

How expansion works

  • Select any subset of RESOProperty groups: business, characteristics, equipment, farming, financial, hoa, listing, location, occupantOwner, structure, tax, unitTypes, utilities, identifiers (universalPropertyId, etc.).
  • baseProperty: Joins to Insights Base Property by CID - include only when you need assessor/public-record fields to avoid an extra Insights fetch per listing.

RESOProperty - root groups (schema)

FieldGraphQL typeSummary
cid, listingKey, propertyType, propertySubTypeScalars / stringsIdentification and classification.
listingRESOListingGroupStatus, pricing, dates, agents, remarks, media hooks.
locationRESOLocationGroupAddress, schools, GIS, parcel context.
structure, tax, financial, …RESO groupsBuilding details, tax roll, finance, HOA, equipment, utilities, etc.
basePropertyBasePropertyLinked assessor/public-record profile.

See the GraphQL schema / introspection for the full list of leaf fields inside each group.

Pagination

ArgumentRole
limitPage size (maps to backend top/skip semantics).
offsetRows to skip.