Last updated: August 19, 2026
You create an MLS website by lining up three things: a WordPress install, a listing feed your brokerage is approved to receive over the RESO Web API, and a plugin that turns that feed into property records. On this site the plugin is MLS Import, and it checks the feed hourly, updating price, status, photos and text on anything that changed. The listings live in your own database on your own domain, each one a real WordPress page with its own URL, feeding search and filter pages you control. Here’s the part that surprises most first-time builders: none of this starts in WordPress. It starts with an application to your MLS, filed by a participating broker, and the feed gets issued in that broker’s name. Until the approval lands, the technical work has nothing to connect to. So get the paperwork moving first, then build.
Broker-owner checklist before your MLS listings go live
Before listings go live on a new brokerage site, check three things on top of the MLS approval and sync steps in the build checklist below. Your feed settings match your board’s rules. Every listing card shows the credits your board asks for. Your state’s ad rules show on every page. Do it all on a test copy first, then once more on the real domain. Keep the listings private until each check passes, and name one person to watch the updates after launch.
| Check | What done looks like | Who does it |
|---|---|---|
| 1. Seller opt-outs honored | On every import task, the setting that only pulls listings sellers allow online is turned on. A task you build by hand starts with it off. | You, in MLS Import |
| 2. Private fields left out | Agent-only remarks, showing instructions and lockbox details are not picked on the field screen. Hiding them in the theme is not enough. | You, in MLS Import |
| 3. Only allowed statuses | You picked only the statuses your board lets you show, like Active or Pending. You checked the Protected Statuses list too. | You, in MLS Import |
| 4. Credits on every card | Listing office name, the board’s exact disclaimer and a last-updated line show on search cards, not just detail pages. | You, in your theme |
| 5. Brokerage ad rules | Brokerage name as licensed, license number and office address where your state asks, plus the Equal Housing Opportunity logo. | You |
| 6. Lead forms ready | A privacy policy and a clear consent box for calls and texts. | You |
| 7. Board review | You sent the site link to your MLS for a look, if they offer one. | Your MLS |
| 8. Site basics | Backups run and admin accounts are secured. | Your web person |
MLS Import covers the feed side: it pulls your listings onto your own domain, checks for changes every hour, and, if you turn it on, removes listings that left the MLS in a daily check. The display side (credits, logos, state rules) is set up in your theme or Standalone mode, and that part is yours.
Turning the opt-out setting on later does not remove listings already pulled while it was off. Set it before your first real import. The details are in MLS display rules: attribution, internet flags and protected data.
Does MLS Import make my brokerage site compliant?
No. MLS Import gives you the settings and fields your board’s rules need. Your MLS sets the rules, and you, the broker, are responsible for following them. See IDX compliance for who does what, and MLS/IDX compliance rules for WordPress sites for the display items. Check your server first with requirements before you buy. Are you putting your own office’s listings on the site? Filter the import task by your office MLS ID. MLSimport for brokerages shows the setup.
How do I add homes if AI already built my website?
Check whether your AI-built site runs on WordPress. MLS Import can add listing pages and search there through Standalone mode. If your site uses another system, plan the WordPress listing section with your web person. Follow the steps for adding homes to an AI-built website.
The Build Checklist, on One Page
Nine steps, in the order they have to happen. Steps one and two are paperwork, and they gate everything below them.
| Step | What done looks like | |
|---|---|---|
| 1 | MLS approval | A participating broker has filed the MLS and IDX application, and the board has acted on it. NAR gives the MLS five business days to act on the request. The approval is issued in the broker’s name, not the agent’s, and the real domain is on the form, not a test address. |
| 2 | Feed credentials | The board or its gateway has issued the RESO Web API credentials, and the licensee holds them. Nothing technical can start before this. |
| 3 | WordPress | A WordPress install on hosting sized for the listing and image volume you expect, not for a brochure site. |
| 4 | Plugin | The import plugin installed, credentials entered, and the connection test passing before a single listing is imported. |
| 5 | Mapping | MLS fields matched to the fields your theme uses, then a small test import checked for prices, photos and status. |
| 6 | Search templates | Search form, filters and results pages built from your theme, with result pages that have their own URLs. |
| 7 | Sync | A real server cron (a timer on your host) running the update on a schedule. NAR, ARMLS and Stellar MLS all set a 12 hour refresh floor for IDX displays; an hourly cycle sits well inside it. |
| 8 | Compliance | Attribution, permitted statuses, sold data and any registration rule matched to your board’s written rules. Compensation may be published for your own brokerage’s listings on your own IDX site, but not on a shared multi broker platform. |
| 9 | Launch QA | A listing page opened on a phone with price, status and photos checked, the office name and disclaimer found on a search results card, a filtered search URL shared and reopened in a new browser, a test enquiry submitted and received, a listing your board says you can’t show confirmed absent from the site, and a listing with no coordinates confirmed still visible in list results. |
My realtor client wants every home for sale in the area. Where do I start?
Start with your client’s broker and MLS, not with WordPress or the theme. Ask which MLS boards cover the area, and have the broker apply to each one for a website feed in the brokerage’s name, with the real domain on the form. Build the site while the board reviews it. When the credentials arrive, connect them in MLS Import, map the fields, and make import tasks for the target area and the active statuses. Run a five-home test first, then import the wider set and check search, credits, updates and sold-home removal.
Builders often ask whether the client needs a separate IDX plugin or whether the theme comes with one. These are three separate parts. The MLS approves the feed. The theme shows the listings. MLS Import moves the listings from the feed into WordPress and keeps them updated every hour.
Who does what when you build for a client
Your client handles the MLS paperwork and you handle the build. The feed belongs to the MLS member, so MLS Import can’t apply, sign or hold the credentials for either of you. Ask your client to forward the approval email itself, not a summary. It names the feed type, the platform and the approved domain.
The paperwork is covered in who needs to hold the MLS credentials. For custom work, MLS Import has hooks, template overrides and blocks, listed in MLSimport for developers.
Can the site show every home for sale in the area, not just the client’s own listings?
Yes, within what the feed allows. An IDX feed carries listings from the brokers in that MLS. Listings whose sellers opted out of internet display, and private fields like showing instructions, stay off the site. Homes from another MLS, or held back from public display, will not appear just because they are nearby. Tell your client that up front.
A big metro takes more than one task. One import task brings in at most 10,000 listings in a run, so split the area by city or county, one task each. See what an import task is. If the area spans two boards, your client needs a feed from each board.
Before you quote the job, send us your client’s MLS name and their role (agent or broker) through a support ticket. We will tell you which server the board runs and which values your client should ask for.
What an MLS-powered site actually does once it is live
Strip away the design talk and an MLS website is a database of property posts that keeps itself current. Every imported listing is a real WordPress post: your permalink, your domain, your templates. No iframe, no vendor subdomain sitting between you and your own content.
The values arrive with RESO Data Dictionary names attached, so a listing carries StandardStatus, PropertyType, PropertySubType and ListPrice whether the feed came out of Phoenix or Orlando. That is what makes filters behave the same way from one board to the next. RESO publishes the query patterns the API uses: its own examples ask for records where PropertyType equals Residential and the bedroom count sits inside a range. Your visitor-facing search does that same job against the imported posts.
The upkeep is not yours. When a price drops or a listing goes pending, the next sync pass writes the change into the post. Nobody re-publishes anything by hand.
What you need before any of this works
Assume you have nothing yet. Here is the checklist, in the order it bites.
A participating broker. NAR’s participation policy is specific: participants must be REALTORS who are “a principal, partner, corporate officer, or branch office manager acting on behalf of a principal,” holding a current, valid real estate broker’s license. If you are an agent, the application goes through your broker.
The feed, issued to the brokerage. RESO Web API access is granted to a real estate business, not to a plugin or an MLS website. Whatever software you point at it, you are using your broker’s credential.
WordPress and the plugin. MLS Import is our own plugin, and it is the tool this walkthrough connects, so take that as the disclosure. It works with any WordPress theme, and our page on requirements before you buy covers the server side.
If your market spans two boards, one site can hold both. Since version 7.2, MLS Import connects up to seven MLS boards to one site on a multi-MLS plan. Each board still needs its own approval. See connecting two MLS boards to one website.
Hosting sized for the job. Property search leans on postmeta, and every meta condition you filter on adds another JOIN. Imports need a real system cron: WordPress’s own Plugin Handbook says WP-Cron fires only when a page loads, which is not a schedule.
How do you connect an MLS feed to a WordPress site, step by step?
Eight steps, in this order. The first two happen outside WordPress, and jumping ahead to the fun part is how builds stall.
- Get MLS approval. Your broker applies to the MLS for feed access.
- Collect the credentials. Endpoint, client ID, client secret.
- Connect the plugin. Authenticate WordPress against the feed.
- Map the fields. Match feed fields to your property records.
- Run a test import. Pull one small filtered slice first.
- Schedule the sync. Set the update cycle and let it run.
- Build the search pages. Filter on the standardized fields.
- Check compliance. Refresh cadence, attribution, removals.
Step 1: Get MLS approval
Assume nothing exists yet, because this step runs before any WordPress work. The application goes to your MLS, filed by a participating broker. NAR’s IDX policy puts a clock on the MLS: requests for IDX feeds “must be acted on by the MLS within five (5) business days from receipt,” unless it needs to review your qualification or how the data will be used, in which case it issues an estimated approval date instead. That is a ceiling on the MLS’s response time, not a promise you will be pulling data by Friday. If your board takes longer than that, see MLS approval processes that take time for where applications usually stall and what to ask your board.
Step 2: Collect the credentials
Approval came through, and your brokerage now holds an authorization to a feed. What arrives is an endpoint, a client ID and a client secret. The RESO Web API uses the OAuth2 client credentials flow: your client posts those values to the authorization server with the grant type set to client_credentials, gets back a time-limited Bearer token, and sends it on every request afterwards. NorthstarMLS documents that exchange publicly in its RESO Web API documentation, including the part first-timers miss: the token expires, and something has to fetch a new one.
Step 3: Connect the plugin
You have the endpoint, client ID and client secret in hand. In MLS Import you select your MLS, paste the credentials, and the plugin authenticates against the RESO Web API feed.
One structural decision is baked in: you are importing listings into your own database as real posts, not embedding a hosted IDX widget that renders someone else’s page inside yours. Templates, search and SEO all follow from that. For the mechanics underneath, we go deeper on MLS and IDX integration in WordPress.
Step 4: Map the fields
Once the plugin is authenticating and pulling field data, the RESO Data Dictionary standardizes names and values, so StandardStatus is limited to a defined set (Active, Pending, Closed, Withdrawn and the rest) that, as Constellation Data Labs puts it, means the same thing in every RESO-certified system. But MLSs keep their own local MlsStatus values alongside it. “RESO certified” means the surprises are bounded, not gone. Ask which tier your MLS holds: RESO’s certification page separates Certified Current, Passed Current and Certified Legacy. Map the attribution fields here too: CRMLS Rule 19.2 separates the Listing Broker who entered the listing from the Advertising Broker displaying it.
Step 5: Run a test import
With fields mapped, do not pull the whole board first. Scope it: request only records where StandardStatus equals Active, add a top parameter to cap how many come back, and look hard at what lands. The checks are dull and they matter: are prices in the price field, do photos resolve, did the status values map as expected. Fix the mapping now, not after a full run.
Step 6: Schedule the sync
The test import proved your mapping. Now set the cadence. NAR’s IDX policy, ARMLS Rule 23.2.5 and Stellar MLS Article 19.11 land on the same floor: refresh downloads and IDX displays at least once every 12 hours.
That is the minimum you are permitted, not a number to advertise. MLS Import runs hourly synchronization by default, so price, status, description and photo changes land within the hour and the floor stops being something you think about.
Step 7: Build the search pages
With listings importing on a schedule, your MLS site needs a way in. Because listings are ordinary WordPress posts carrying standardized fields, search and filter pages get built like any archive: status, price band, property type, bedrooms, location. Map pins work when the feed carries latitude and longitude, and the maps are OpenStreetMap. Build the two or three pages your agents will actually link to before you build twenty that nobody visits.
Step 8: Check compliance
Listings are live and publicly searchable now, so MLS display rules apply to you, not a vendor. Three checks, in launch week: confirm the refresh cycle is genuinely running, confirm every listing shows its listing broker attribution in the required size and color, and confirm that listings pulled from the MLS disappear from your MLS website instead of lingering as orphan pages. The numbers behind those checks are in the next section.
Where the listings render: a real estate theme or Standalone
People shop for an MLS WordPress theme as though the theme is what pulls the data. It isn’t. MLS Import runs in Standalone mode with any WordPress theme, building the property templates and search itself. You do not have to buy a real estate theme to build an MLS website with WordPress.
What a real estate theme buys you is depth, not permission. WP Residence is one of four themes with deeper integration, and its Theme Options screen turns the single property page into a settings choice: the screenshot below shows seven ready-made layouts, plus a hero media header control for what sits at the top.
The same themes ship page builder widgets. In Elementor you drop a properties list widget onto a page, set the top bar filters, and the grid renders your MLS website’s listings with the theme’s styling already applied.
Should I pick the IDX or the WordPress theme first?
Pick the IDX side first. Get the MLS paperwork moving before you buy a theme, then pick the theme while you wait. Your MLS decides which feed you can get and when. The theme is the part you can still choose freely, because MLS Import works with four real estate themes or with any WordPress theme in Standalone mode.
| Your situation | What to pick |
|---|---|
| You want ready-made real estate designs | WpResidence, Houzez, Real Homes or WpEstate. Imported listings become the theme’s own properties, so its search, maps and agent pages just work. See compatible themes. |
| You already have a theme you like | Keep it and use Standalone mode. MLS Import brings its own property pages, search, maps and agent pages. |
| You are starting from nothing and want fewer moving parts | A light theme such as Astra, Kadence or GeneratePress, plus Standalone mode. |
Why does the choice matter before the first import? Each mode stores listings in its own place. If you switch later, the listings you already imported are not moved over. The new mode starts empty and you import again. Changing your mind after five test listings costs nothing. Changing it after 5,000 means importing them all again. See choosing your theme mode.
Want to see a theme with real listings first? Look at live MLS Import sites by MLS and theme.
What the finished MLS website gives a visitor
Someone lands on the homepage and gets a search bar, not a redirect to a portal. Category, location, bedrooms: the choices they make run against the standardized fields your feed delivered, and the results are the listings your broker is licensed to show, rendered by your theme, on your domain.
Every property has its own page and its own URL. An agent can text that link, Google can index it, and you can point a neighborhood post at it. A hosted widget page cannot do any of the three, which is the reason to create a real estate website with MLS listings imported rather than embedded.
Sold listings can stay on your MLS website where your MLS’s display rules allow it, which gives a market report page something real to work with. What a visitor never sees is the private side of the feed: fields you flag as private stay off the front end entirely.
What buyers expect, and where each piece comes from
A site looks like a real real estate site when it has real homes from your MLS and the search tools buyers know from Zillow. In Standalone mode, each piece below is a block you place on your own pages. On a supported real estate theme, the theme’s own search, maps and listing pages do the same jobs.
| What buyers expect | Where you get it with MLS Import |
|---|---|
| A big search bar on the home page | The Search Form block. One Location box takes a city, area, county, ZIP code or full street address. |
| Filters for price, beds, baths and home type | The Property List block and the Search Results block. |
| Map search, with draw an area | The Half Map block. Listings sit beside the map, with a List and Map switch on phones. |
| Listing pages with big photos, a map, a mortgage calculator and a tour request | Property page building blocks. |
| Saved homes and saved searches | Favourites and saved properties, and saved searches with alerts. |
| Contact and showing forms that reach you | The Contact Form block, and where property leads are sent. |
What MLS Import does not do: it can’t get your MLS approval for you, and it is not a CRM. Leads come to you by email, and you can send them to your CRM as a separate step.
Can my site look like a real estate site if I am not a licensed agent?
Yes, but only with homes you add yourself. MLS listings need an MLS member and an approved feed. Homes you add by hand sit in the same property type as imported homes, so they use the same pages and search. If you team up with a licensed broker later, their approved feed can add MLS homes next to yours.
Display rules you have to honor
Publishing a feed makes you subject to your MLS’s display rules, which are written down. Three bite first.
- Refresh frequency. NAR’s IDX policy requires participants to refresh downloads and the displays fed by them “not less frequently than every 12 hours.” ARMLS Rule 23.2.5 says the same in its own words (armls.com/docs/armls-rules-regulations.pdf.pdf), as does Stellar MLS Article 19.11.
- Attribution formatting. Under CRMLS Rule 19.2.5, attribution font must be no smaller and no lighter in color than the property description, and it has to clearly label the Listing Broker, Listing Office or Listing Agent. “Courtesy of” is named as unacceptable (kb.crmls.org/knowledgebase/idx-and-listing-credit-faqs/).
- Compensation. NAR’s settlement FAQs permit a broker to augment their feed with offers of compensation for listings of their own brokerage (Q53), and prohibit using MLS data to build a platform of compensation offers from multiple brokers (Q54).
Rule numbers differ by board, so read your own MLS’s display section before launch, not after a compliance email.
Frequently Asked Questions
Who can apply for MLS access for a website?
The participating broker applies, not the individual agent. NAR limits participation to REALTORS who are a principal, partner, corporate officer, or branch office manager acting on behalf of a principal, with a valid broker’s license. MLS Import connects your MLS website to that access.
How long does MLS approval take?
NAR’s IDX policy gives the MLS five business days to act on a feed request. That is a ceiling on the MLS’s response, not a promise you are feed-ready that week. File the application before you install MLS Import.
How often do MLS listings need to refresh on a website?
At least once every 12 hours. NAR’s IDX policy, ARMLS Rule 23.2.5 and Stellar MLS Article 19.11 each set that floor for IDX displays. MLS Import checks the feed hourly, so changes land well inside the requirement.
Can compensation information appear on an IDX website?
Yes, narrowly. NAR Settlement FAQ Q53 lets a broker publish offers of compensation for listings of their own brokerage on their own IDX or VOW site. Q54 bars a multi-broker compensation platform built from MLS data. MLS Import imports what your feed provides; display follows your MLS’s rules.
What is the RESO Web API?
It is the standardized way an MLS hands listing data to outside software: an OData interface over HTTPS, secured with OAuth2, with field names set by the RESO Data Dictionary. Version 2.0 is current for certification, and WAV Group’s Victor Lund reported that every MLS had to certify against it by April 2025. MLS Import connects to that feed.
How much does MLS access cost?
That depends on your MLS or board, which sets its own data and IDX fees, so there is no single national figure.
Get started today: email your MLS and ask for two things, the IDX application and the current fee schedule. Everything else waits on that one email. Leave a comment if this page missed something and we will fix it.



