docs
    re-site-kit: IDX compliance
    v0.6.0.md

    IDX compliance

    When your site shows listings from other brokerages, the MLS attaches display rules. This page covers what those rules usually ask for, what the kit already does about them, and IdxAttribution, the component that puts the courtesy line and data timestamp on a listing page.

    import { IdxAttribution } from '@sonordev/re-site-kit'

    What is IDX compliance?

    IDX (Internet Data Exchange) is how a brokerage gets to show other brokerages' MLS listings on its own website. Each MLS writes its own display rules, and they vary, but most ask for the same few things wherever another broker's listing appears:

    • Credit the listing brokerage (and often the listing agent): "Listing courtesy of Example Realty."
    • Show how fresh the data is: when the listing information was last updated.
    • Carry the MLS's disclaimer, in the MLS's own words.
    • Show only the statuses the MLS allows. Sold data in particular is often restricted.

    The kit gives you the pieces. It isn't legal advice, and it can't know your MLS's exact wording, so confirm the specific rules with each MLS you display.

    What the kit already does

    WhereWhat you get
    Listing pagesIdxAttribution shows the courtesy line and the "MLS data last updated" timestamp. ListingDetail also ends with "Listed by …" and a link to the original listing.
    Search results and gridsListingCard names the listing brokerage ("Courtesy of …") by default, and ListingGrid always does. See Cards and grids.
    schema.org markupListingSchema names the listing office as the listing's provider.
    AI assistantsThe MCP tools return the listing brokerage with every listing, pass your disclaimers along, and tell the assistant to include both. Search is limited to active and pending listings unless you allow more.
    PhotosPhotos are hotlinked from the MLS's image host, never copied.
    Agent contact detailsThe MCP tools never return the listing agent's email or phone.

    What you still add yourself: your MLS's disclaimer text on listing pages (most sites put it at the foot of every page that shows listings), and any logo or icon your MLS requires.

    IdxAttribution

    <IdxAttribution listing={listing} />

    Renders, for example:

    Listing courtesy of Example Realty, Pat Agent
    MLS data last updated Oct 3, 2026, 10:15 AM EDT
    PropTypeDefaultWhat it does
    listingRealEstateListingThe listing. Required.
    prefixstring"Listing courtesy of"The words before the brokerage and agent.
    showTimestampbooleantrueShow the "MLS data last updated" line.
    dataUpdatedAtstring | nullthe listing's updated_atThe timestamp to show, when you have a better one (for example, your feed's last sync time).
    timeZonestring"America/New_York"The IANA time zone the timestamp is shown in, e.g. America/Chicago.
    classNamestringAdded next to re-idx-attribution.

    How it decides what to show:

    • The courtesy line lists the listing office, then the listing agent, whichever the listing has, separated by a comma.
    • The timestamp is formatted like "Oct 3, 2026, 10:15 AM EDT", in US Eastern time unless you pass timeZone. A zone the server's runtime doesn't recognize falls back to US Eastern, and an invalid date is skipped.
    • When there's nothing to show, it renders nothing: no brokerage or agent, and either no valid timestamp or showTimestamp={false}.

    Keep it visible on every listing page, near the listing details. It's small by default (a smaller font and some transparency); restyle it with the re-idx-attribution, re-idx-attribution__courtesy and re-idx-attribution__updated classes, but don't hide it.

    To match your MLS's wording, change the prefix:

    <IdxAttribution listing={listing} prefix="Listing provided courtesy of" />

    To show the time where your office is, pass its zone:

    <IdxAttribution listing={listing} timeZone="America/Denver" />

    Sold listings

    Leave status out of searchListings and you get active listings. Showing sold listings is a choice you make on purpose, and only where your MLS allows sold data in IDX displays or the listings really are your brokerage's own. A copy of another brokerage's feed that was imported by hand doesn't count as your own, even if it's stored as a manual listing. The same rule applies to the statuses option of the MCP tools.