Every release.
Fully documented.
MLS Genie™ ships updates weekly. This is the public record of every feature, fix, and improvement — version by version. Built from real agent feedback.
Release history
- Fixed scans finding candidates but never creating leads. Each run started
- reading the match list from the top, which is right the first time and wrong
- every time after: the same records came back, every one was already in the
- ledger, and the scan reported candidates found and nothing created —
- A scan that finds nothing now says why. "0 found" was ambiguous — it can
- mean there is genuinely nothing out there, or that one of the scan's own
- filters is excluding everything, and those need opposite responses. From
- outside they looked identical, which is how several scans returned nothing
- Prospects with no property valuation are now retired and blocked from
- returning. If neither valuation source recognises the parcel, an agent
- cannot price it or judge whether it is worth a call — and in practice it is
- usually unimproved land the property category missed.
- GenieProspect now skips records whose address has no street number.
- Such a record cannot be mailed, cannot be door-knocked, and cannot be told
- apart from its neighbours, so it is not a lead however good the equity
- looks. In practice most are unimproved land the provider's property
- Fixed the Cron Manager reporting scheduled jobs as never scheduled. It read
- WordPress's own scheduler directly, but jobs registered through MLS Genie's
- scheduler go to Action Scheduler wherever that is available — and those are
- invisible to the WordPress call. A job that was scheduled and running looked
- Restored the status colours on the Reputation stat cards, and on the
- expired-lead banner and portal status notes, which the colour sweep had
- flattened to neutral greys.
- The sweep matched each literal to the closest token by colour distance,
- GenieProspect's two scheduled jobs now appear in the Cron Manager. They ran
- through the scheduler but were never listed, so a pool that had quietly
- stopped filling looked exactly like a pool that was full — which is how one
- sat at the same number for several days without anything reporting it.
- Confirmed the caller-identification endpoint against the provider's own
- release documentation and corrected what 2.1.0 had inferred.
- Four things were wrong. The service is on their V3 line, not V1, and the
- path differs from the one the older skip-trace endpoint uses. Phone numbers
- Added caller identification to GenieProspect. Given a lead's phone number or
- email address, it returns who they are and what property they own.
- The point is what it does to inbound flow: a buyer enquiry from someone who
- already owns a home is also a listing opportunity, and the agent calling back
- Changed the GenieProspect "Senior & Long-Term Owners" scan so it no longer
- selects people by age.
- The scan called the data provider's senior-owner list, which matches on a
- senior tax exemption or an open reverse mortgage as well as on long
- Fixed logging out landing on WordPress's bare "Do you really want to log
- out?" screen. That page appears whenever the logout link's signature has
- expired — which happens routinely, because a link rendered into a cached
- page keeps a signature that ages while the page sits in cache, and a
- Fixed contrast across both themes, measured rather than judged by eye. Every
- rule that sets a text colour and a background was resolved through the theme
- tokens and scored against WCAG 2.1 AA. Dark mode had 218 failing rules and
- light mode — never checked before — had 217.
- Dark mode is now enforced rather than repaired. The previous passes each
- fixed what had been looked at, and the next screenshot found another panel —
- because nothing prevented the next raw colour being written. This release
- closes the last surfaces and adds the check that keeps them closed.
- Dark mode completed across the whole plugin. Rather than chasing panels one
- screenshot at a time, every colour declaration was audited by role — a hex
- mapped to the token that carries the right value in each theme.
- 2,021 declarations converted: 981 in stylesheets and 1,030 inside the inline
- Fixed the locked Refresh Interval field being unreadable in dark mode. It
- used an inset surface that sits a shade away from the card behind it, so the
- field all but disappeared. It now uses the page background, which reads as
- inset in both themes, and states its own text colour rather than inheriting.
- Fixed the GenieScout auto-import banner painting its own background. It
- carried a gradient and a border colour of its own, so it never matched the
- cards around it. Those rules are gone — the banner takes its surface and
- border from the standard settings card like everything else on the page.
- Completed dark mode properly. The earlier pass only converted flat white
- backgrounds, which left every tinted panel behind — the GenieScout intro
- banner painted a pale blue gradient, the health badges, warning strips and
- success confirmations all kept their own light hexes, so they stayed bright
- Fixed the Cron Manager panel rendering white in dark mode on the CRM
- Settings route. GenieScout settings existed twice — a standalone page and a
- tab inside CRM Settings — and the two had drifted: the standalone one was
- rebuilt on design tokens, the tab kept its original inline styles, so the
- MLS Genie leaves beta.
- Removed the Beta badge from the CRM sidebar, along with the developer
- switch that showed it, and dropped the Beta pill from GeniePortal.
- Security audit of the AJAX surface ahead of launch: all 372 registered
- Fixed cards sitting in two slightly different colours in dark mode. The
- shell's surface token was written as a literal in the dark theme rather than
- aliasing the base token as it does in light mode, so the two drifted a shade
- apart — and the surface pass in 1.9.774 made the difference visible by
- Completed the dark-mode surface pass across GenieCRM and the client portal.
- Fifty-nine card, panel, popup, input and skeleton backgrounds were painting
- a hardcoded white instead of the surface token, so in dark mode they stayed
- bright regardless of the theme — Property Intelligence, comps, pipeline,
- Fixed the Next 7 days card staying white in dark mode. Two causes: the card
- painted its own background with a hardcoded white rather than the surface
- token, and the text token it used for headings and copy was never declared
- in either theme — every rule referencing it silently fell back to the dark
- Fixed Transaction Coordinator not saving from Team Manager. The role change
- was rejected server-side by a hardcoded list of valid roles kept separately
- from the plugin's own role list — a fourth copy of the same thing, so a role
- that appeared correctly in the dropdown was refused on save with no visible
- Transaction Coordinators can open Commission again. Excluding it in 1.9.770
- was wrong for most teams: coordinators commonly prepare the disbursement
- authorisation and cannot do that paperwork without the figures. Access is
- on by default, with a switch in CRM Settings for teams that keep splits and
- Added the Transaction Coordinator role. A TC takes deals from accepted
- offer to close and works every agent's files, so the role has cross-agent
- visibility by design rather than being scoped to leads of their own.
- They get: Tasks in full, Pipeline in full across all agents, lead records
- Added a single place that decides which roles reach which parts of the CRM.
- Role gating was previously written wherever it was needed — an inline check
- in the navigation builder, a guard in a template — which holds up until a
- second role needs the same treatment and the two drift. Hiding a navigation
- Fixed the portal dashboard reporting fewer saved searches than the client
- actually has. A client can end up with two kinds of saved search stored
- separately — alerts the agent builds for them, and searches they save
- themselves on the site — and the dashboard counted only the second while
- Client Portal settings expanded from one card into the portal's control
- surface, under CRM Settings → Client Portal.
- Added Listings Page. Every "Browse Listings" link in the portal pointed
- at the site's home page, so a client following one landed on the front page
- Fixed a line of template code printing on the client portal dashboard. A
- close tag one statement too early ended PHP before the shared listing-row
- renderer was assigned, so the assignment rendered as visible text and the
- variable was undefined at both places that used it — meaning the "New for
- Added Hide on every review. For reviews that are real but not this
- team's to answer — another brokerage's agent still attached upstream, or a
- review about a different business. Hiding removes it from the inbox and
- from every counter and response-rate figure, so it stops counting against
- Added an open-on-source link to every review card, next to the date.
- Opens the review where it actually lives, in a new tab, so a review and a
- posted reply can be confirmed on the site itself. Uses the review's own
- link when the feed gives one and falls back to the team's own profile on
- Fixed removed reviews surviving the reconciliation added in 1.9.762. That
- sweep worked per office, which cannot reach two kinds of row: reviews still
- filed under an office the platform no longer lists, and reviews written by
- the new-review poll before their office was known — that path has no office
- Fixed reviews that have been removed at the source continuing to show in
- Reputation Manager forever. The review cache was upsert-only: every sync
- wrote what the feed returned and nothing ever deleted a row, so a review
- removed upstream — an unlinked agent's reviews, a deleted or corrected
- Fixed Auto-draft after (days) silently refusing 0 in the MLS rule drawer.
- The field's own hint says 0 means indefinite display, but the save used a
- on the way out. Indefinite display could not be saved at all, and the drawer
- reopened showing 1095 as though the entry had never been made.
- Fixed the warning icon sitting flush against the text in the job builder's
- anonymous flex item — the bare text node beside the icon — does not take
- reliably; an explicit margin does.
- Renamed the job builder's Auto-Delete Statuses card to **Skip These
- Statuses** and rewrote its description. The old wording said listings in
- those statuses would be "automatically deleted from the site," which was
- never true — the setting has only ever excluded them from the import. No
- a guard, so every render on a request with no post in scope — a 404, or an
- archive that returned nothing — logs an entry. A crawler working through
- stale URLs can produce thousands a day, which buries real faults.
- for the duration of those widgets' render and restores it immediately after.
- Off-market listings now serve only their primary photo on public property
- pages, enforced at the data layer. CRMLS Rule 19.2.4, revised February 2026,
- prohibits displaying any photo other than the primary one for records in a
- Closed/Leased, Expired, or Cancelled status.
- Client portal dashboard: replaced the My Alerts stat card with **New
- Matches**. Once alerts and saved searches merged onto My Agent, the two cards
- showed the same number and led to the same page — two cards for one thing.
- New Matches counts listings that matched a saved search in the last week and
- Fixed: the Saved Searches and My Alerts cards on the client portal dashboard
- linked to views that were retired when their content moved onto My Agent.
- Both routes still resolve, so clients were silently dropped at the top of My
- Agent with no indication of why they had landed there.
- New on-page listing content — a compliant, factual market paragraph (median price, days on market, months of supply) for the listing's city, plus dynamic links to the community page and housing-market report.
- Adds unique, indexable content to every listing page without touching the MLS remarks.
- Drop-in shortcodes with theme-native markup and class hooks, documented in the Listing Tools tab.
- Listings now render a complete social preview card (OpenGraph + Twitter image) when shared on Facebook or X.
- A new Default Social Sharing Image covers pages without their own photo, like city and area pages — listings still use their own photo first.
- Duplicate social tags emitted by the theme are removed, leaving one clean set per page.
- Intelligent Meta — SEO titles and descriptions adapt to each listing: optional bracketed sections appear only when the data exists, and zero values (0 beds/baths/sqft) are hidden.
- Listing price renders as formatted currency, and Terms Manager renames (e.g. House) flow through to titles and descriptions while schema stays standards-valid.
- One template now reads correctly across houses, land, boat slips, and everything else.
- Listing structured data now carries the full photo gallery (up to 12 images) instead of a single image.
- Corrected price specification, Google-valid availability status, and a brand added — richer, standards-valid listing markup.
- Active listing updates (price, status, days on market, photos) now appear within about 15 minutes of reaching the MLS feed instead of potentially taking hours.
- The nightly full sync remains as a safety net, and property-history timelines refresh on the next view rather than waiting out the cache.
- Your brokerage now publishes a connected business graph — organization data with the cities you serve, per-office map links, geo coordinates, and hours of operation.
- Your team members appear as agent structured data on the homepage, and when one of your agents is the listing agent on a property they are credited in that listing's structured data.
- A Featured Service Areas control publishes your cities automatically or by selection; third-party listings are unaffected.
- Unified lead attribution across every intake path — Form Bridge, native Genie forms, and AI Chat now resolve through one canonical engine.
- Source shows the real channel (Google, Social, Direct…) while Lead Action carries the form type (Valuation Request, Buyer Inquiry).
- AI Chat leads attribute through the same path and read "AI Assistant" as the lead action.
- New Communication Manager sends branded lead and inquiry confirmation emails automatically on every intake path.
- Settings → Notifications tab inside GenieCRM™ — control the confirmation copy and per-event notifications without leaving the CRM.
- Default confirmation copy is a single source of truth, shown as the live placeholder so you see exactly what sends.
- Listings that arrive without photos now show a clean map image instead of a blank placeholder.
- Applies everywhere — the property hero, listing cards, theme widgets, and GenieCMA™ comp cards.
- Handled entirely in the import layer, with no theme edits required.
- Mobile pull-to-refresh — pull down at the top of any CRM page to refresh, with a spinning refresh indicator.
- Closed and sold transactions can now surface as a dated event on the property history timeline.
- Performance hardening — faster public property pages and search via postmeta indexing, batched backfills, and removal of slow per-request queries.
- Resolves the elevated-CPU regression some sites experienced, and a GeoGenie™ quarantine check that was slowing property search.
- Global CINC on/off toggle — pause CINC lead forwarding site-wide with one switch, without losing the configured forwarding address.
- Houzez 4.3 form-hook compatibility so lead capture keeps flowing into GenieCRM™.
- Team management moved into the CRM — Team Members, Team Chat settings, and the Settings navigation are now all inside GenieCRM™, no wp-admin trips.
- Manage Teams stays gated to the Brokerage tier.
- Market Data Library — a precomputed store so market-data KPI shortcodes render inline and instantly.
- Smooth dim-then-brighten seeding for every market-data shortcode.
- Address-correction engine — parcel-verified displayed addresses, corrected and title-cased from authoritative parcel data.
- Drives the correct city taxonomy and listing slug, applied theme-agnostically through the Scout writer, with a per-AOR toggle.
- GenieScout Engine Live Search draw tools rebuilt — polygon and circle draw-to-search on the map.
- Draggable shapes, a reliable finish anchor, and re-search by dragging a completed shape.
- Persistent, sortable Lead Score engine with a learning scaffold and priority-framed labels.
- Ask Genie upgraded — web research, a broader help mandate, and real usage metering.
- Property Lookup by APN as well as address, and Search MLS auto-routing by county.
- Search Intent on lead profile — paid keyword (utm_term), organic referrer query (DuckDuckGo, Bing, Yahoo, Brave, Ecosia + 7 more), or inferred from landing-page slug.
- Assigned-agent pill becomes an inline dropdown — reassign a lead in one tap without leaving the profile.
- Auto-log every reassignment to Notes & Activity with the previous and new agent names.
- Server-side first-touch capture — reads HTTP referrer, Sec-Fetch-Site, and User-Agent directly from the request. Invisible to ad blockers, Brave/Safari/Firefox privacy modes, and visitors with JavaScript disabled.
- Honest source labels for "Direct" traffic — "Facebook App", "Instagram App", "TikTok App", "Gmail App", "Direct (typed or bookmark)", "Cross-site (referrer hidden)" — no more vague fallback.
- Hover tooltip on every Source value explaining exactly how the label was derived and how much to trust it.
- Hero row refinements on Lead Detail — assigned agent surfaced as a pill alongside the type badge, no scrolling required.
- Pipeline stage pill now colored to match the stage (New = slate, Contacted = blue, Nurturing = amber, Hot = red, Under Contract = violet, Closed = green).
- Tighter visual rhythm — consistent padding across stage, type, and agent pills.
- Inline pipeline-stage dropdown on the Lead Detail page — change a stage in one tap without navigating to the board.
- Auto-logged stage transitions in Notes & Activity — *"Stage changed: New Lead → Contacted"* with timestamp + agent name on every move.
- Same code path as drag-drop on the Pipeline board — identical permissions, history-table writes, and notification hooks.
- Tracked Pages — pick non-property pages (Free Home Valuation, Schedule Tour, Contact, etc.) to surface on lead profiles.
- Two tiers: Conversion (gold-star highlight + optional real-time email alerts to the assigned agent) and Engagement (subtle eye icon, contextual logging only).
- Works for visitors who block Google Analytics — first-party tracker runs on your own domain, not subject to ad-blocker lists.
- Conversion hits add a new "Conversions" stat to the Site Activity card and appear in the chronological Visitor Journey timeline.
- Privacy-Conscious Visitor indicator — surfaced when a visitor's browser blocked Google Analytics (≈30–40% of real traffic today).
- Framed as a known, normal scenario rather than a data gap — hover tooltip educates the agent that contact details were still captured normally.
- Honest framing of attribution depth, not a "data missing" warning.
- Verified phone numbers now show a green checkmark next to the number on the Lead Detail page.
- Visual confirmation that the carrier check cleared the number — no more hovering to read the tooltip.
- VoIP and unverified numbers keep their existing amber and red indicators.
- Form name now displays correctly on Forminator-sourced leads instead of the generic "Contact Form" placeholder.
- Switched to the documented Forminator_API for form lookup with a CPT-title fallback for resilience.
- GenieScout MLS Rules registry — self-healing install + backfill so the registry populates automatically on first load.
- Detection of multiple feeds (CRMLS + BBAOR + future additions) now correctly tags each listing's originating MLS.
- Improved MLS detection for multi-feed brokerages so each listing is correctly tagged with its originating MLS.
- First-touch attribution beacon now fires for every visitor on first landing, not just visitors arriving with UTM parameters.
- Captures the referrer header server-side so anyone who later submits a form has full attribution context, even days later.
- GA4 async enrichment pipeline — automatically queries Google Analytics for source, medium, campaign, device, and session count on every new lead.
- Retry schedule handles GA4's 24–48 hour processing delay; verified leads earn a green "Verified via GA" pill in their profile.
- GA4 Client ID captured at form-submit time from the `_ga` cookie — stored alongside every lead for cross-referencing GA sessions and audience export.
- Lead Action field — captures the form name (Forminator title, Houzez "Property Inquiry" / "Contact Agent" / "Schedule Tour", CF7 / WPForms / Elementor form name) on every submission.
- Campaign field — pulls first-touch utm_campaign for every lead and resolves it through your campaign mappings.
- Guaranteed-non-empty Source contract — every lead now lands with a human-readable source, no exceptions.
- Five-tier resolution: explicit upstream value → derived from UTM / cookie / referrer → form-name fallback → default-source floor → audit token stamped on the row.
- Sitewide visitor cookie and UTM capture — visitor identity persists across the entire site, not just property pages.
- A visitor who arrives via a Google Ads UTM, browses /about/, leaves, and returns days later still has full attribution when they submit a form on any page.
- Dual-column timestamps (local + GMT) across the activity table — eliminates a whole class of DST and timezone bugs.
- Role-based access system — `mlsg_agent`, `mlsg_manager`, `mlsg_team_admin`, `mlsg_team_lead` roles with the custom `mlsg_manage` capability gating every admin page.
- WordPress administrators automatically inherit `mlsg_manage` — no double-permission setup.
- GenieScout cron architecture hardened — MLSG_Cron_Manager always-loaded, schedules registered at every page load.
- Nightly imports trigger at 1am local time; refresh runs cursor-paginated batches of 50; jobs page run every 30 seconds with a 2-minute stagger to keep the host happy.
- Genie CRM — full standalone shell at /genie-crm/, no WordPress chrome, hardcoded asset injection so no theme dependency.
- Commission Manager, Lead Tags, CINC integration, and the Form Bridge module all ship inside the shell.
- GeoGenie™: Extracted all quarantine logic into new shared MLSG_GeoGenie class — single source of truth across all entry points.
- GeoGenie™: Phase 2 area string now built from listing's own MLSAreaMajor → City → PostalCode — works for every property regardless of import origin.
- GeoGenie™ batch: Added geocoded area centroid as third check; area_major and state now collected per listing.
- GeoGenie™ single: run_geogenie_single() now delegates to MLSG_GeoGenie::evaluate_single().
- GeoGenie™: Reimport from MLS now re-evaluates single-listing geo-validation.
- Phase 1: median centroid of sibling listings from same import job (50km threshold).
- Phase 2: Google-geocoded job area centroid (25km threshold, cached 30 days).
- Self-healing: listings that pass after coordinate correction are automatically un-quarantined.
- ListingGenie™ v1.0 — 6-step pre-listing package wizard.
- CMA packet with Include/Exclude toggles on comp cards.
- Pricing fields with Conservative/Recommended/Optimistic auto-compute (25th/50th/75th percentile $/sqft).
- Net Proceeds table and Comparable Sales Analysis on share page.
- DB schema v1.1: subject_address, subject_data_json, agent_notes, pricing_json columns added.
- Fixed Python string splice boundary error in content parser (content[end+4:] → content[end:]).
- Node.js PHP syntax scanner now runs on every modified file before zip assembly.
- Property data lookup caching improved to 24h transient.
- GenieLayers™ boundary packs (.mlsgpack format) — domain-locked HMAC-SHA256 license keys.
- Settings UI upload/remove for boundary packs.
- Big Bear AOR pack v1.0.2 — Moonridge, Sugarloaf, Big Bear City.
- BoundaryLabel now uses google.maps.OverlayView (no close buttons or tails).
- Google OAuth migration to the MLS Genie™ project.
- Root cause fix: nonce mismatch on Analytics connection.
- Houzez CRM reactivation confirmed non-conflicting with GenieCRM.
- Genie Social: migrated to new social publishing backend.
- All user-facing surfaces continue to display "Genie Social" — vendor never exposed.
- Fixed CSS/JS loading in genie-crm-shell.php (direct link/script tags, no wp_head dependency).
- Version 1.0 released and the platform built out fast — GenieCRM, automated MLS import, area pages, and the schema engine — across rapid daily iteration from v1.0.0 through the v1.6 series.
- Early development and architecture groundwork.
- MLS Genie project created — the first working build.