• Real Estate Consulting Rooted in Real Experience

RESO IDX WordPress Plugin Case Study – TheWebStudio.ca

Portfolio Project

RESO Property Search Widget — Custom WordPress IDX Web API Integration

A custom WordPress plugin developed by TheWebStudio.ca to connect real estate websites directly to RESO-certified IDX Web API feeds — delivering live MLS listing search, flexible filtering, and fully branded property displays without relying on third-party IDX widgets or iframe-based solutions.

This project turned raw RESO API data into a structured, on-brand property search experience within WordPress — giving real estate professionals and agencies full control over how listings are retrieved, displayed, and navigated.

Project Overview

The RESO Property Search Widget was built to solve a recurring problem in real estate web development: most IDX solutions are delivered as iframes, external widgets, or subscription-gated platforms that offer little design flexibility, poor theme integration, and no control over the user experience once a visitor leaves the embedded search.

TheWebStudio.ca designed and developed a plugin that connects directly to RESO Web API-certified MLS feeds using OAuth 2.0 or static Bearer token authentication, retrieves live property data directly from the MLS feed, and renders it natively within WordPress using a fully configurable shortcode and template system.

The result is a reusable, professionally architected IDX integration system that supports branded listing displays, multi-profile search configurations, server-side rendered results for SEO, a compact homepage search widget, and a dedicated XML sitemap feed for listing pages — all managed from a structured WordPress admin panel.

Project Details

Client: Internal Product / Real Estate Agency Application
Agency: TheWebStudio.ca
Scope: WordPress Plugin Development, RESO Web API Integration, Admin UI System, Front-End UX
Platform: WordPress
Stack: PHP, JavaScript, RESO Web API (OData), OAuth 2.0, WordPress shortcode framework, transient caching, native XML sitemap API

The Challenge

Connecting a WordPress site to a live MLS feed through a RESO Web API endpoint introduces significant technical and UX complexity. The plugin needed to handle real-time data retrieval, multiple authentication types, flexible search field configuration, and a responsive front-end — while remaining practical for real estate professionals to manage without developer involvement.

  • RESO Web APIs require OAuth 2.0 or Bearer token authentication with proper token caching to avoid rate-limiting
  • OData query construction needed to support diverse field types, filter modes, and multi-value selections
  • Property metadata schemas vary by MLS provider — the plugin needed dynamic field discovery to remain adaptable
  • Most real estate sites need more than one search context (e.g. residential vs. commercial, different city profiles)
  • Live API calls on every page load would create performance and quota issues without a structured caching approach
  • Search results needed to be crawlable by search engines, not just JavaScript-rendered, to support SEO goals
  • Site owners needed a simple homepage search entry point that didn’t require the full search interface on every page

Objectives

  • Build a complete RESO Web API client supporting OAuth 2.0 and Bearer token authentication inside WordPress
  • Deliver a fully configurable property search shortcode with listing cards, photo carousels, pagination, and sorting
  • Implement a Search Profiles system so a single plugin installation can power multiple distinct search experiences
  • Add server-side rendered (SSR) results with progressive JavaScript enhancement for search engine indexability
  • Provide a compact Mini Search widget shortcode designed for homepage and landing page placement
  • Integrate a dedicated XML sitemap provider to register individual listing detail page URLs with WordPress’s native sitemap system
  • Build a practical admin panel with API credential management, field configuration, display controls, and a live API Tester
  • Design the system for reuse across multiple real estate client sites with minimal reconfiguration

Development Approach

TheWebStudio.ca approached this as a production-grade integration system rather than a basic plugin — structuring the architecture to handle authentication, metadata discovery, search configuration, and rendering as independent, maintainable components.

1. RESO API Client Architecture

The API layer was built as a dedicated class handling both OAuth 2.0 Client Credentials and static Bearer token flows. Tokens are cached using WordPress transients, eliminating redundant authentication requests. OData filter construction is handled programmatically from field configuration arrays, supporting equality matches, case-insensitive text contains, range filters, and multi-value picklist selections — producing clean, spec-compliant API queries across different MLS providers.

2. Dynamic Metadata Discovery

Rather than hardcoding MLS field schemas, the plugin includes a metadata class that fetches and parses the OData CSDL XML from the provider’s /Property/$metadata endpoint. This gives administrators a live field list from their specific API feed, making the plugin adaptable to different RESO-certified providers without code changes. Metadata results are cached for 24 hours via transients to avoid repeated parsing overhead.

3. Search Profiles System

A Search Profiles admin interface was introduced to allow a single plugin installation to power multiple independent search experiences on the same site. Each profile stores its own field configuration — including which fields are shown, their labels, filter modes, autocomplete settings, and multi-select options. Profiles are referenced by slug in the shortcode, making it straightforward to deploy different search contexts for residential, commercial, rental, or geographic segments.

4. Server-Side Rendering for SEO

Standard AJAX-driven search results are invisible to search engine crawlers. To address this, the plugin detects reso_* GET parameters on page load and performs a server-side API query, rendering a structured HTML block of matching listings before JavaScript initializes. The JS layer then progressively enhances the experience by auto-submitting the interactive form and replacing the SSR block — giving search engines a crawlable, paginated results page while users get a fast interactive experience.

5. Mini Search Widget

A dedicated

or use filters

Find Your Home

shortcode was developed for homepage and landing page placement — providing a compact, configurable search entry point that redirects to a full results page with the user’s query pre-applied. The widget supports vertical and horizontal layouts, configurable field sets, custom button labels, and a profile attribute for connecting to any configured Search Profile. Defaults are managed globally through a dedicated Mini Search admin tab.

6. XML Sitemap Integration

Listing detail pages needed to be discoverable by search engines independently of the main search interface. A custom sitemap provider class was registered with WordPress’s native sitemap system, generating paginated XML sitemap entries for each listing detail URL. This gave real estate sites a structured pathway for search engines to index individual property pages without any third-party sitemap plugin dependency.

Version History

The plugin was developed iteratively across 17 build snapshots, progressing through four major version milestones from a focused initial release to a fully featured IDX integration system.

v2.0.0 — Foundation

Core RESO API client with OAuth 2.0 and Bearer token authentication. Main

or use filters

Location

Price

–

Details

–
–

Type

Results

shortcode with listing cards, photo carousel, modal detail view, pagination, and sorting. Admin tabs for API credentials, search fields, display fields, and display settings.

v2.3.4 — Profiles & Tooling

Search Profiles system replacing single field config. Field-level autocomplete, multi-select picklists, and filter mode control (eq / contains_ci). Expanded search form with range filters for price, bedrooms, bathrooms, square footage, and year built. Live API Tester admin tab for connection and query debugging.

v2.4.0 — SEO Layer

Server-side rendered search results template for crawlable listing pages. XML Sitemap provider class registered with WordPress’s native sitemap system, generating paginated sitemap entries for all listing detail page URLs.

v2.5.0 – v2.6.0 — Multi-Shortcode System

or use filters

Find Your Home

compact widget shortcode with layout and field controls.
or use filters

Use the filters above to search for properties.

dedicated results page shortcode with modal filter overlay. Separated search-filter-form template. Mini Search admin tab for global widget defaults. Final refinements to template architecture and admin UI.

Key Features Delivered

The finished plugin combines a professional API integration layer with a practical, site-owner-friendly management system — making live MLS data a native part of the WordPress experience rather than an embedded external service.

Three-Shortcode System

or use filters

Location

Price

–

Details

–
–

Type

Results

for full embedded search,
or use filters

Use the filters above to search for properties.

for dedicated landing pages with modal filters, and
or use filters

Find Your Home

for compact homepage widgets — each configurable independently and connectable to any Search Profile.

Photo Carousels & Detail Views

Listing cards include touch-enabled photo carousels, Quick View lightbox modals, and optional Detail View page links — giving visitors a complete property browsing experience without leaving the site or triggering external iframes.

Admin API Tester

A built-in API Tester tab allows administrators to send live test queries to the RESO feed, inspect raw OData responses, and verify field mappings and authentication configuration without requiring external tools or developer access.

Challenges Solved

Making Live API Data SEO-Friendly

Real estate search results driven purely by JavaScript are invisible to search engines — a significant problem for sites that want to rank for location-specific property searches. The SSR layer solved this by rendering a full, paginated results block server-side whenever search parameters are detected in the URL, giving crawlers a structured HTML page to index while the interactive JS experience still loads normally for human visitors.

Provider Flexibility Without Code Changes

Different RESO-certified MLS feeds expose different field schemas, naming conventions, and authentication flows. The dynamic metadata discovery system and configurable field-mapping layer meant the plugin could be connected to a new provider by updating credentials and field settings in the admin — without touching PHP or JavaScript.

Managing Complexity at the Admin Level

RESO API integrations involve enough configuration options that a poorly designed admin UI becomes an obstacle. The plugin’s tabbed settings panel was organized around the actual workflow — credentials first, then search field configuration by profile, then display options, then the mini search widget, then the API tester — so that setup felt logical rather than overwhelming, and ongoing management could be handled without developer involvement.

Results

The RESO Property Search Widget delivers a production-ready IDX integration for WordPress that gives real estate sites full ownership of their search experience — no subscription dependency, no iframe limitations, and no visual disconnect from the rest of the site’s design.

From a development asset perspective, the plugin’s profile-based architecture and clean class separation make it straightforward to deploy across multiple client sites and extend with new features as MLS feed requirements evolve.

Why the Project Worked

  • The architecture was designed for real deployment conditions — multiple providers, multiple search contexts, multiple pages — not just a single demo use case
  • SEO considerations were built into the rendering system from the start, not bolted on after the fact
  • The admin experience was designed to match how a real estate site owner actually sets up and manages listings, not how a developer thinks about the API
  • The shortcode system grew incrementally across versions without breaking backward compatibility
  • Every major feature — authentication, metadata, display, sitemap, mini search — was isolated in its own class, keeping the codebase maintainable as complexity increased

Key Takeaways

Most IDX solutions treat MLS data as something to embed. This project treated it as a structured content layer that belongs inside the website. That distinction drove every architectural decision — from how the API client caches tokens to how search results are rendered for crawlers — and produced a system that performs like a purpose-built product rather than a plugin afterthought.

Need a Similar Build?

TheWebStudio.ca builds custom WordPress integrations, API-connected tools, and content systems designed around how your site actually works — not around what an off-the-shelf plugin happens to support.

Call to action idea: Add a button here linking to your contact page, consultation page, or portfolio archive.

Optional Add-On: Client Outcome

Add client testimonial, agency feedback, or deployment result here.

Optional Add-On: Project Gallery

Add admin screenshots, front-end search examples, listing card layouts, shortcode output comparisons, or the API Tester interface here.

Technology Stack

WordPress, PHP, JavaScript, RESO Web API (OData), OAuth 2.0 Client Credentials, WordPress transient caching, shortcode framework, native XML sitemap API

This stack was chosen to maximize compatibility with standard WordPress hosting environments while supporting secure live API authentication, dynamic OData query construction, efficient server-side caching, and a native integration with WordPress’s own sitemap and permalink systems — avoiding any external library dependencies that could introduce version conflicts or maintenance overhead.