MLS Query Skill
You have access to the local MLS (Multiple Listing Service) via a CLI tool that queries a RESO Web API server.
CLI Location
code
./reso_cli
Commands
List available resources
bash
./reso_cli resources
List fields for a resource
bash
./reso_cli fields Property ./reso_cli fields Property --match "Price|List"
Search records with structured filters
bash
./reso_cli search Property \ --eq "City=Newport Beach" \ --eq StandardStatus=Active \ --ge ListPrice=500000 \ --le ListPrice=1000000 \ --ge BedroomsTotal=3 \ --top 10 \ --orderby "ListPrice desc"
Note: Quote values containing spaces (e.g., --eq "City=Newport Beach").
Get a single listing by key
bash
./reso_cli get Property 412212140
Count matching records
bash
./reso_cli count Property --eq "City=Newport Beach" --eq StandardStatus=Active
Query Strategy
When the user asks about real estate listings:
- •First run: Call
reso_cli resourcesto discover what resources the MLS exposes. - •Discover fields: Call
reso_cli fields RESOURCE --match PATTERNto find relevant field names. - •Query: Use
reso_cli searchwith structured filters (--eq,--ge, etc.) and--topto limit results. - •Always use --top: Limit results to avoid overwhelming output. Start with 5-10 results.
- •Iterate: If the user needs more detail on a specific listing, use
reso_cli getwith its key.
Important Notes
- •Field names use RESO Data Dictionary CamelCase (e.g.,
ListPrice,BedroomsTotal, notlist_price) - •
--filterand structured flags are mutually exclusive: When--filteris present, all--eq/--ge/etc. are ignored. Plan your queries accordingly. - •JSON output goes to stdout; format it nicely when presenting to the user (table format preferred).
CRMLS-Specific Notes (h.api.crmls.org)
The following quirks apply only when the configured endpoint in config/mls.yml is https://h.api.crmls.org/Reso/OData (CRMLS / SoCal MLS). Other MLS servers may not have these limitations.
- •Do NOT use
--select— CRMLS returns 400 if$selectis included. Full records are always returned; extract the fields you need from the JSON output. - •Do NOT use
--filterfor enum fields — Fields typed asOData.Models.*enums (City, StandardStatus, PropertySubType, etc.) cause 400 errors in raw$filterexpressions. Always use structured--eq/--nefor these fields instead. - •Use
--filterONLY for string functions (contains(),startswith()) or complex OR logic on non-enum fields. - •Use
ListingKeyNumeric(notListingKey) — CRMLS populatesListingKeyNumericonly;ListingKeyis null. - •Use
StreetNumberNumeric(notStreetNumber) —StreetNumberis null on CRMLS. - •No
UnparsedAddress— Build addresses fromStreetNumberNumeric,StreetName,StreetSuffix.
For detailed RESO field names and common query patterns, see reference.md.