[youtube
https://www.youtube.com/watch?v=S3nlRmpKcNQ]
MLSImport is an IDX plugin for WordPress. It puts homes for sale from your MLS on your real estate website. Every hour, it checks your MLS for new homes and changes. Each day, it removes homes that are no longer for sale.
It works with more than 800 MLS in the US and Canada. You need an account at
MLSImport.com. You also need access from your MLS.
Try the IDX plugin before your MLS says yes
Your MLS can take days or weeks to give you access. You do not have to wait. The first time you sign in, MLSImport connects a Test MLS full of sample homes. Import them and see how your site looks. When your own MLS is ready, remove the Test MLS.
IDX for any WordPress theme
You do not need a real estate theme. MLSImport has its own pages for the search, the listings, the map, each home and your agents, and they work on any theme. Add them with Gutenberg blocks, Elementor widgets or shortcodes. You can translate the menus and block settings, for example with Loco Translate.
MLSImport also works with
WPResidence,
WpEstate, Houzez and Real Homes. With these themes, the homes look just like homes you added by hand.
More than one MLS on one IDX site
If you sell homes in more than one MLS area, connect them all on one site. Each MLS keeps its own settings. If one MLS stops working, the others keep going. If two MLS send the same home, your site shows it once.
IDX property search for buyers
MLSImport's own pages come with these tools:
- Search by city, price, beds, baths and more. Pick "Studio" to find homes with no bedroom.
- Search by MLS number, like the one on a yard sign.
- Saved searches. A buyer types a name and an email to save a search. Each day, they get an email with new homes that match. They do not need an account.
- Featured homes. Pick the homes you want people to see first. They get a "Featured" badge.
- Saved homes. Visitors tap the heart on a home to keep it for later.
Daily email when a listing changes
The Alerts page shows what changed on your listings: new homes, lower prices, sold homes and more. You can also get one email a day with these changes. The email lists the buyers whose saved search matches a new home, so you know who to call.
IDX blocks for Gutenberg and Elementor
MLSImport comes with 14 ready blocks to build your pages. Each one is a Gutenberg block, an Elementor widget and a shortcode, so you can use the page builder you like.
- Search Form. A search box for your home page. It sends people to your results page.
- Search Results. The homes that match a search, with a filter bar and a "Save this search" button.
- Half Map. Homes on one side, a map on the other. The map groups homes that sit close together.
- Map with Listings. A map with the homes on it.
- Property List. A list of homes. Pick the city, the type, the status, the order and how many to show.
- Property Slider. Homes that slide by, one after another.
- List Properties by ID. Only the homes you pick.
- Featured Property. One home, shown big.
- Saved Properties. The homes a visitor saved with the heart.
- Category Slider and Display Categories. Tiles for cities, home types and more, each with its own photo.
- Team Directory. Your agents, with their photo, job title and office.
- Contact Form. A form people use to write to you.
- Blog Posts. Your newest blog posts as cards.
You can show only the homes you want. For example, show only the homes in one building. You can also give categories your own names, like "For Sale" and "For Rent".
A full listing page for each home
Each home gets its own page. You pick which parts to show and in what order:
- Photos, in a gallery or a slider, with many styles to pick from.
- The price, beds, baths and all the facts the MLS sends.
- A map.
- A video and a virtual tour.
- A "Schedule a Tour" form and a form to write to the agent.
- A mortgage calculator.
- Similar homes.
- Share and print buttons.
Each part is also a Gutenberg block, an Elementor widget and a shortcode. Use them to make your own layout for the home pages.
A page for each agent
Each agent gets a page with their photo, their story, their homes and a way to reach them, by phone, email or WhatsApp.
Make it look like your brand
Pick your colors, the look of the home cards and more. Change them in Design Settings or in the WordPress Customizer, where you see each change right away. The badge on the photo can show the status, like "Active", or your own words, like "For Sale".
Use an AI assistant
Connect an AI assistant like Claude to your site. Then tell it what you want in plain words, the way you would tell a helper. It asks you first before it changes anything, and you can turn that off.
Here is what you can ask it to do:
- Set up. Sign in to your MLSImport account, pick your MLS, add your MLS login, test it and choose which MLS fields to bring in.
- Import homes. Make an import task, for example "homes for sale in Tampa under $500,000". Start it, stop it, see how many homes it will bring in and check how it went.
- Fix a listing. Find a home by city or MLS number, change its text, remove a photo, mark it as featured or delete it.
- See what changed. Ask which homes are new, which dropped in price and which sold, or look at the history of one home.
- Build pages. Make a new page, add home sliders, maps, search forms and other blocks, change them and set your home page. It also works with Elementor pages.
- Change your menus. Make a menu, add or remove links and put the menu in your site's header.
- Change the look. Change colors, add your own CSS, and set your logo, site title and site icon.
- Write blog posts. Make and change posts and blog categories.
- Manage agents. Add, change or remove your agents.
- Handle buyers. See saved searches, send an alert email now, or turn a search off.
- Fix problems. Read the import log, clear the cache and try a stuck import again.
An SEO friendly IDX plugin
Many IDX plugins show homes in a frame that comes from another site. Google gives the credit for those pages to the other site. MLSImport saves each home as a real page on your own site, so Google can find it and your pages load fast. Each home page also tells Google the price, the beds and the baths in a way Google understands. The photos come from the MLS, so your server does not fill up with pictures.
More videos
[youtube
https://www.youtube.com/watch?v=3WSb8BDA07c]
How MLS data works (the RESO standard)
If you own a real estate theme and want it to work with MLSImport, contact us.
7.2.6
- REALTOR.ca (CREA DDF) import tasks import again. REALTOR.ca does not accept a status filter and lists Active listings only, so the task no longer sends one; a sold listing leaves the feed and the daily reconciliation removes it from your site. The Protected Statuses control is gone from REALTOR.ca tasks because it could only keep sold listings on the site.
- An import task saved with no status selected now imports Active listings, matching what the task editor shows. Before, such a task reported the import as completed while importing nothing.
7.2.5
- Test MLS for new sites: on your first sign-in with an MLSImport account, the plugin connects "Test MLS (sample listings)" and creates a first import task, so you can see listings import before your own MLS approves your data access. It needs no MLS credentials and does not use one of your account's MLS slots. Remove it from the Connections tab when your own MLS is connected.
- Test MLS listings now come with property photos.
7.2.4
- Your own category names (standalone mode). Rename a Listing Type, Property Type or Status category under MLS Properties, name and slug, for example Residential to "For Sale" and Residential Lease to "For Rent". The hourly sync keeps filing listings under your renamed category instead of creating a second one with the MLS name, and the search form, the category page, the page blocks with a preset filter and the saved searches all find the listings by your name. Categories imported before this update are picked up automatically.
- New "Badge over the photo" setting under Design Settings, Property Card: show the MLS status (Active, Pending) as before, or the listing's Listing Type category with the name you gave it, so cards and the property page can say FOR SALE or FOR RENT.
- Half Map page block now applies the search sent by a Search Form on another page, so a half-map page can be the results page: the listing list and the map both narrow to the search, and the block's own preset filters stay for anything the search does not mention.
- The "Text for terms link" setting of the lead forms now says where the Privacy Policy link goes, and shows a warning with a link to Settings, Privacy when no privacy page is set or it is not published.
- AI assistant: the city, property type and other category pickers of the Categories page blocks accept category names or slugs, not only ids, and the tools answer with the names they resolved.
- AI assistant: works side by side with the WpResidence theme's own AI assistant on the same site. Each product keeps its own sign-in addresses, and the theme's copy of the MCP adapter is recognised instead of reported as a version mismatch.
- New "Custom parameters" filter on the Property List, Property Slider and Map with Listings blocks (standalone mode), in Gutenberg and Elementor. Add rows of MLS field, comparison (equals, not equals, greater than, less than, contains) and value to show only the listings that match, for example BuildingName equals Kahala Beach for one building. Works with any imported MLS field, and keeps applying when visitors filter, change page or move the map.
- Translations: the MLS Properties and Real Estate Agents menus, their lists (Property Types, Cities, ZIP Codes and the rest) and the block editor settings of the MLSImport blocks (sort choices, panel titles, image and reorder buttons) can now be translated with translation files or plugins like Loco Translate.
7.2.3
- New "Alerts" page under MLS Import Settings lists what changed on your listings: new listings, price drops and increases, status changes, listings under contract, sold, off market, back on market, and agent or office changes. Search by MLS number and filter by event or import task.
- New daily email alerts, set up in the "Notifications" section of the Alerts page. Tick the kinds of change you want, add one or more email addresses, and switch each MLS on or off. Each MLS has its own filter (city, neighborhood, zip, price range, property type, status), prefilled from that MLS's import tasks. You get one email per MLS per day, and none on a day with nothing to report. "Sold" is reported only when the MLS sends a closed record.
- The daily email also has a "Buyers to contact" section: buyers whose saved search matches a listing that is new or was just changed, with their contact email, the matching listings and a link to their search. Works with saved searches from MLSImport standalone, WpResidence, Houzez and Real Homes.
- New "Blog Posts" page block (standalone mode) - shows your blog posts as cards with the featured image, date, title, excerpt and a read-more link, in a responsive grid with an optional pager. Use the [mlsimport_blog_posts] shortcode, the "Blog Posts" Gutenberg block or the Elementor widget; the card background and radius, title color and size and image height can be styled on both builders.
- New "Studio" tile on the Beds row of the search form (standalone mode) - a studio has 0 bedrooms and could only be found with no bed filter at all. Studio now finds exactly 0 bedrooms; every other tile still means "at least". The beds and baths popup is wider so all the tiles fit on one line.
- New "Country" filter on the Import Task for multi-country MLS feeds (Omni MLS South America) - pick one or more countries, with a Select all. Feeds that cover a single country do not show the control.
- Import Task editor for MLS Grid feeds now offers only the filters MLS Grid accepts (status, property type, MLS number and listing office). The price range is no longer shown for these feeds because MLS Grid rejects it and the import would stop with an error. Values saved on a task before this change for a filter the editor no longer shows (for example "Internet Entire Listing Display") are no longer sent either, so such a task imports instead of stopping with an error about an option you cannot see.
- Clearer message when an MLS does not support the Internet display filters - setting "Internet Entire Listing Display" or "Internet Address Display" to "yes" on a feed without those fields used to show the MLS's raw error text. The Import Task screen, the hourly import count and the Import Run log now tell you which Import Task option to set back to "no", with a link that scrolls to it.
- Fixed the Import Task screen showing "connection NOT successful" on every task when the current MLS on the Connections tab was a failed or never-registered connection - each task is now judged by its own MLS connection. Adding an MLS from the "+ Add MLS" drawer also makes it the current MLS when the saved one is not a registered connection.
- Fixed the daily alert emails never listing a change on WpResidence, Houzez, Real Homes and WpEstate sites when the notification filter had a price range - the price and zip are now read from the theme's own fields.
- Fixed saving the Tools tab (or any settings form that does not include the theme select) clearing the saved theme, after which price, bedrooms, size and coordinates stayed empty on newly imported listings. The saved theme now survives such a save.
- Delete Properties now removes 5 listings per request instead of 20. Removing a listing also deletes all its photos and thumbnails from disk, and on slower hosting a batch of 20 ran long enough for the host to cut the request off: the listings were gone but the page reported "Error during deletion. Deleted 0 so far." and stopped.
- Fixed the Property List block (Gutenberg and Elementor) showing an empty search box with a lone Search button when every search field was switched off. The search box and button are now hidden in that case.
7.2.2
- New "MLS #" search field (standalone mode) - visitors can type the MLS number from a yard sign or flyer (for example TB8541851) and land on that exact listing. The field is available in the search form shortcode, the Gutenberg block and the Elementor widget, and in the filter bar above the results. Upper or lower case both work.
- Listings imported before this update are picked up automatically when they have an MLS number stored. If a listing was imported without the ListingId field selected, select that field and re-import so its number can be found.
- The search form shortcode can now set a width per field - add it after a colon, for example fields="location:half,property_type:half,price:third,beds_baths:third,mls_number:third". Accepted widths are two_thirds, half, third and quarter; a field without a width stays full width.
- New featured listings (standalone mode) - tick "Featured listing" on a property, or use the new "Mark featured" / "Remove featured" bulk actions on the Properties list, and those listings show first in every list with a "Featured" badge on the card. A new Featured column shows which listings are marked.
- New setting "Show featured listings first" (Design Settings - General, on by default). Featured listings lead a list only when the visitor has not picked a sort - if they sort by price, price wins.
- New Saved Search with daily email alerts (standalone mode) - a "Save this search" button next to the Sort control on the Search Results block lets a visitor save the filters they picked with just a name and an email. No WordPress account is needed, and an agent can save a search on behalf of a client the same way.
- Double opt-in - the visitor gets a confirmation email first, and nothing is sent until they click the link in it. The link brings them back to the results page they saved from, with their filters applied. Every alert email carries a one-click unsubscribe link, and a search left unconfirmed for 7 days is removed.
- One email a day, only when there is something to show - each confirmed search receives the matching listings that were added or updated by your imports since the previous day, with a link to see all of them on your site. A day with no matching changes sends no email.
- New "Saved Searches" list under MLS Import Settings shows who saved what, the status and when the last email went out, with Deactivate and Delete actions. You are notified by email when a visitor confirms a search. Saved searches are included in the WordPress personal data export and erase tools.
- New Design Settings section "Saved Search" - switch the feature on or off, set the maximum listings per email, and edit the email subject, intro line and disclaimer.
- Fixed the Featured Property Elementor widget that could not be deleted from a page once its Property ID had been edited or the page had been saved and reopened. Featured Property widgets already on your pages keep their chosen property and can be deleted normally after the update.
7.2.1
- The "Data last updated" date on a property page now shows the hour and minute too (for example "March 4, 2026 1:03 am"), converted to your site's timezone. The "Updated" date in the property title bar and overview shows the same time.
- Fixed the Connections tab still showing your old MLS limit after a plan change - the number of MLS connections your plan allows is now re-checked with your MLSImport account every time you open the tab, so an upgrade on mlsimport.com unlocks "+ Add MLS" right away without signing in again.
7.2
- Multiple MLS connections on one site - you are no longer limited to a single MLS. A new Connections tab lists every MLS you have connected with its live status, when it was last tested, and how many listings it brought in; you can add another MLS from the same screen, test or disconnect one at a time, and drag the rows to set which MLS takes precedence. How many connections you can add is set by your MLSImport plan.
- Adding a second MLS does not disturb the first - each connection keeps its own credentials, its own field mapping and its own sync settings, and your existing MLS is carried over automatically on update as your first connection, with its current mapping and settings intact. Nothing needs to be re-entered or re-imported.
- Each import task belongs to one MLS - when you create an import task you pick which connection it pulls from, and its search filters come from that MLS's own values. Existing tasks keep working exactly as before.
- One broken MLS no longer stops the others - if a connection's credentials expire or its provider goes down, only that connection's tasks pause (with the reason recorded); tasks on your other MLSs keep importing on the same hourly run. Daily reconciliation is likewise done per connection, so a feed that cannot be read is skipped instead of putting your listings at risk.
- The same property from two MLSs is shown once - when overlapping feeds carry the same address twice, the copy from your higher-priority connection is displayed and the other is hidden from search, sliders, maps and feeds. Hidden never means deleted: if the shown copy is removed or unpublished, the other one is brought back automatically.
7.1.2
- Fixed feature links on a listing all pointing to one empty page - when an MLS sends a multi-value field (lot features, appliances, views...) as one comma-glued text instead of a list, each value now becomes its own term with its own working archive page. A one-time automatic repair also splits the glued terms that earlier imports already created, so existing sites are fixed without re-importing.
- Updated the bundled Action Scheduler library to 3.9.3 - removes the PHP 8.4 deprecation notices it produced on every admin page (which could quickly fill debug.log on sites with logging enabled) and slims the plugin package.
7.1.1
- Fixed featured properties losing their images - saving a property in wp-admin could blank its internal ListingKey (WordPress treats the meta keys ListingKey and the theme custom field listingkey as the same database row), so the next import could not find the listing and imported it again as a duplicate; the new post got the photos while the original featured post kept dead image references. The listing identity is now stored in protected meta (_mlsimport_listing_key) that theme edit screens cannot touch, theme field projection no longer writes the identity as an editable custom field, the importer refuses to create a listing without an identity, and a one-time automatic migration copies the identity for all existing listings so they keep updating in place.
- Fixed listing deletion removing a property's images before the property itself - when the final post deletion failed, the site was left with a published listing whose gallery pointed at deleted images. Deletion now removes the property post first and deletes its photos only after that succeeds, on both the reconciliation path and the admin delete tool; a failed deletion now leaves the listing completely untouched (and the delete tool no longer records a deletion that did not happen).
7.1
- Import task health at a glance - new status column in the Import Tasks list showing each task's live state (synced, importing, sync overdue, stuck, failed, auto-sync off, never imported).
- Sturdier imports - manual imports are now resumable, chunked runs with a watchdog; the hourly sync picks tasks in starvation order so no task is left behind; a completed manual import now seeds the sync watermark so new tasks start hourly-syncing right away.
- Automatic incident alerts and import-health heartbeats to the MLSImport service, plus automatic token / activation recovery - so a stopped cron or failing import can be detected before it affects your site.
- Import fields are gathered automatically - as soon as your MLSImport account and MLS connection are both confirmed, the plugin fetches your MLS's field metadata silently in the background instead of making you wait on the "Stand By" page.
- Setup wizard fixes - an unrecognised theme no longer fails the system-requirements check (standalone mode works with any theme), the theme selector now pre-selects the site's own detected theme instead of defaulting to the first option, and the PHP memory requirement label was corrected to 256M.
- Redesigned admin - the whole plugin admin was restyled to match the mlsimport.com portal design: unified field sizing and focus states, one active-state colour, and a cleaned-up Tools tab.
- Provider adapters - dedicated Bright MLS and Centris (Quebec) adapter classes, and provider credential fields now only appear for the selected MLS's provider family.
- Internal rebuild of the import engine - import task execution, daily reconciliation, stored-listing writing and field-mapping persistence were consolidated into dedicated, unit- and integration-tested modules.
7.0.7
- Fixed the "search your MLS" field in the setup wizard not offering any suggestions — the wizard's scripts were not being loaded on the page, so the MLS autocomplete never started.
7.0.6
- Fixed a fatal error on plugin activation ("Failed opening required ... myclabs/deep-copy") caused by a development autoloader being included in the release package.
7.0.4
- Standalone (theme-agnostic) mode — the plugin can now render its own real-estate front-end on ANY WordPress theme, not only WpResidence, WpEstate, Houzez and Real Homes. It ships its own property search, listing cards, half-map search, single-property page, saved-properties view and agent / team profiles.
- Page-building blocks — Property List, Property Slider, Featured Property, Map with Listings, Half Map, List Properties by ID, Team Directory, Category Slider and Display Categories, each available as a shortcode, a Gutenberg block and an Elementor widget, all sharing the same rendering, filters and card-style controls.
- Category & taxonomy widgets — display any listing taxonomy (city, type, status, …) as image tiles, using a new per-term featured image and per-term HTML description.
- Developer hooks — a WooCommerce-style layer of action / filter hooks lets themes and add-ons extend, reorder and restyle every standalone surface without editing plugin core; templates can be overridden by copying them into a theme's
mlsimport/ folder. See the standalone hooks guide under docs/.
- PropTx / AMPRE (TRREB) MLS provider support.
- Reconciliation & sync hardening — fixed cases where reconciliation could delete live or standalone listings when a status taxonomy was remapped, and stopped the add / delete / add cycling of in-filter listings during sync.
- Import fidelity — fixed the gallery being wiped on update when the media was unchanged, routed hidden-from-public fields to the correct metabox and corrected the RealEstateListing JSON-LD (provider and datePosted).
- Numerous front-end polish fixes across the property page, maps, mortgage calculator, search form, contact forms and accent-colour theming.
6.3.8
- PropTx / AMPRE (TRREB) MLS provider wiring; featured-image / gallery fix.
- Activity banner now counts unique properties.
6.3.7
6.3.6
- Trestle / Cotality readable enum labels — status and category values from Trestle can now come through as human-readable text ("Active Under Contract" instead of "ActiveUnderContract", "Commercial Lease" instead of "CommercialLease"). Status matching, status protection and the daily reconciliation now treat the spaced and non-spaced forms as equal, so existing import tasks keep working and live listings are not wrongly skipped or deleted during the switch. Requires the matching MLSImport backend update to take effect.
6.3.1
- Import History: added search by Listing ID or ListingKey.
- Activity banner: now always visible to administrators (not only when there was activity in the last 24 hours); clearer "property/properties" wording and a "Task Name:" label in the per-task breakdown.
- Bright MLS support — added Bright MLS as a dedicated provider with its own Client ID / Client Secret credential fields, correct credential gating in the admin and onboarding "Account" step, and a per-MLS field-correlation map that aliases RESO field names to Bright's own names (e.g. CountyOrParish to County) when building the request URL.
- Multi-select location filters — new searchable, type-to-filter dropdown component; City, County and Postal Code (ZIP) can now take multiple values (sent to the backend as RESO "or" groups), including multi-ZIP support in import tasks.
- Daily telemetry / diagnostic heartbeat — connected installs send one structured health heartbeat per UTC day to the SaaS user-activity endpoint. Payload covers an anonymous install ID, account/site, plugin/PHP/WordPress versions and active theme, 7-day import/update/delete counts, sync and feed health, active-listing count and data-completeness %, task settings, recent admin activity dates, and onboarding progress. No visitor data is collected, and nothing is sent if the site is not connected to an MLSImport account. Privacy disclosure added to the 3rd-party services section.
- Activity log & History view — new wp_mlsimport_activity database table (with a versioned dbDelta upgrade path) logging every listing import / update / delete with listing ID, key, title, URL and source import task; new History admin page with a list-table view of recent activity.
- Dashboard top banner — new banner on the admin pages surfacing import counts / status at a glance.
- Deactivation survey — on plugin deactivation, a survey modal collects feedback on why the user is leaving.
- Fixes & maintenance — ThemeImport image/gallery handling fix for WPResidence 5.0 (#532, later partly reverted); Composer autoload / installed.json regeneration cleanup; Tested up to WordPress 7.0.
6.1.4
Fix for ABOR on stale delete
6.1.2
Fix for
Realtor.ca on property room parsing
6.1.1
- Added BuyerAgentMlsId import option
- Updated labels from MLSimport item to Import task
- Improved formatting for MLS fields using comma separation
- Enhanced messaging for starting/stopping imports
- Improved error handling
5.8.6
- Fix on importing into Houzez theme
- fix with keep true if mlsImportItemStatusDelete meta is empty
- fixed caps vs non caps on custom post meta
5.7
- Release on Wordpress plugin directory