---
title: "Structured data for real estate listings: property markup"
description: "Separate the listing page, property, offer, and publishing business. Brief your developer on schema, status updates, validation, and inquiry checks."
canonical: "https://scalewithsearch.com/articles/structured-data-real-estate-property-listings"
---
## Site navigation

- [Scale With Search](https://scalewithsearch.com/)
- Services
  - Services
    - [AI systems](https://scalewithsearch.com/ai-systems)
    - [Site build](https://scalewithsearch.com/work#site-build)
    - [Whole website fix](https://scalewithsearch.com/work#whole-website-fix)
    - [Content library with SEO](https://scalewithsearch.com/work#content-library)
    - [Working session](https://scalewithsearch.com/audit)
  - Start here
    - [Send your brief](https://scalewithsearch.com/work#send-your-brief)
    - [Example scope](https://scalewithsearch.com/work#review-the-example-scope)
  - [Prices and terms](https://scalewithsearch.com/work#prices-and-terms)
- Industries
  - Real estate
    - [Real estate agents and teams](https://scalewithsearch.com/for/real-estate)
    - [Platforms, ownership, and IDX](https://scalewithsearch.com/for/real-estate/real-estate-website-platforms-ownership-idx)
    - [Search, content, and AI](https://scalewithsearch.com/for/real-estate/real-estate-search-content-ai)
    - [Inquiries, campaigns, and handoffs](https://scalewithsearch.com/for/real-estate/real-estate-website-inquiries-campaigns-handoffs)
    - [Buyer, seller, and local pages](https://scalewithsearch.com/for/real-estate/real-estate-buyer-seller-local-resources)
    - [Rules, privacy, and trust](https://scalewithsearch.com/for/real-estate/real-estate-website-rules-privacy-trust)
  - Browse by business
    - [Trades and home services](https://scalewithsearch.com/for/#group-trades)
    - [Health, wellness, and animal care](https://scalewithsearch.com/for/#group-practices)
    - [Law, finance, and IT](https://scalewithsearch.com/for/#group-professional)
    - [Marketing and SEO agencies](https://scalewithsearch.com/for/#group-agencies)
    - [Shops and manufacturers](https://scalewithsearch.com/for/#group-manufacturing)
    - [Restaurants, shops, studios, and nonprofits](https://scalewithsearch.com/for/#group-local-services)
  - Chiropractic practices
    - [Chiropractic and wellness practices](https://scalewithsearch.com/for/chiropractic-and-wellness-practices)
    - [Chiropractic and physical therapy clinics](https://scalewithsearch.com/for/chiropractic-and-physical-therapy-clinics)
  - [All industries](https://scalewithsearch.com/for/)
- Resources
  - Free tools
    - [AI readiness check](https://scalewithsearch.com/check)
    - [Free tools](https://scalewithsearch.com/tools/)
    - [Free Starter Kit](https://scalewithsearch.com/kit/business-memory-starter-kit.zip)
  - Guides
    - [AI-native library](https://scalewithsearch.com/ai-native)
    - [Industry intelligence](https://scalewithsearch.com/intelligence)
    - [Office job guides](https://scalewithsearch.com/guides/)
    - [Business memory](https://scalewithsearch.com/articles/business-memory-for-ai-agents-guide)
    - [Agent governance](https://scalewithsearch.com/articles/ai-agent-governance-guide-small-business)
    - [Migration and ownership](https://scalewithsearch.com/articles/leaving-vendor-ai-memory-guide)
  - Articles
    - [All articles](https://scalewithsearch.com/articles/)
    - [What changed](https://scalewithsearch.com/changes/)
- About
  - Evidence
    - [Proof](https://scalewithsearch.com/proof)
  - Scale With Search
    - [About](https://scalewithsearch.com/about)
    - [How it works](https://scalewithsearch.com/how-it-works)

# Structured data for real estate listings: what to put on your website

Use structured data to describe the listing page, the property, and the offer separately. Schema.org's `RealEstateListing` represents the web listing, while `Offer` describes the proposed transaction. Give your developer that distinction before requesting property markup. [Schema.org's listing definition](https://schema.org/RealEstateListing), [Offer definition](https://schema.org/Offer).

For your own website, request accurate listing information and a working inquiry path alongside the markup. Treat the checks below as a proposed acceptance brief. Record buyer questions and seller representation requests separately when assessing the finished page.

## Set the search expectation before paying for schema

Structured data gives Google explicit information about a page's meaning. Google recommends JSON-LD as a supported markup format. That format does not establish which search feature your page qualifies for. [Google's structured-data introduction](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data), [format guidance](https://developers.google.com/search/docs/appearance/structured-data/sd-policies).

Google's current search-feature gallery does not list a dedicated `RealEstateListing` rich result for ordinary property sales. That is a finding from the documented gallery, rather than a claim that Google cannot understand property information. [Google's supported search features](https://developers.google.com/search/docs/appearance/structured-data/search-gallery).

Google also says AI Overviews and AI Mode require no special Schema.org markup. Supporting pages must be indexed and eligible for a search snippet. Eligibility does not guarantee inclusion. [Google's AI-features guidance](https://developers.google.com/search/docs/appearance/ai-features).

Ask any provider promising a special property result to identify the exact Google feature and its published requirements. Keep a vocabulary check, search appearance, and received inquiry as separate acceptance records.

## Give each thing the right identity

Use this proposed model for an individual property page. These are vocabulary choices, not Google's required fields for a property-sales feature.

| Thing being described | Proposed type or relationship | What to establish |
| --- | --- | --- |
| Listing page | `RealEstateListing` | The page presenting the offer, with its own URL and approved text |
| Physical property | `House`, or the applicable property type | The property's identity and visible details |
| Sale or rental offer | `Offer`, linked through `offers` | The transaction described on this page |
| Offered property | `itemOffered` pointing to the property | The same property identified elsewhere in the graph |
| Publishing business | `publisher` pointing to the actual organization | Who publishes this listing page |

The listing definition supplies the page type and `offers` relationship. `House` describes the accommodation, rather than the website or brokerage. [RealEstateListing](https://schema.org/RealEstateListing), [House](https://schema.org/House).

Schema.org's `itemOffered` documentation permits additional types and explains using a second type such as `Product`. For a house being offered for sale, a developer can use `House` and `Product` on the same property node. This models the offered item; it does not establish Google shopping eligibility. [The itemOffered relationship](https://schema.org/itemOffered), [Google's feature gallery](https://developers.google.com/search/docs/appearance/structured-data/search-gallery).

`RealEstateAgent` is a `LocalBusiness` type within the organization hierarchy. Use it for the relevant real estate business. Keep the individual person's biography separate. [RealEstateAgent's hierarchy](https://schema.org/RealEstateAgent).

Choose `publisher` only when the named business publishes the page. Do not assign the business as the property's seller without confirming that role. The publishing relationship accepts a person or organization. [Schema.org's publisher definition](https://schema.org/publisher).

## Hand your developer a relationship skeleton

The following JSON-LD shows connections for a house-sale listing. It contains no address, asking price, client name, or availability claim. It is an implementation brief, not finished markup to publish unchanged.

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "#listing",
      "@type": "RealEstateListing",
      "about": { "@id": "#property" },
      "offers": { "@id": "#offer" },
      "publisher": { "@id": "#publishing-business" }
    },
    {
      "@id": "#property",
      "@type": ["House", "Product"]
    },
    {
      "@id": "#offer",
      "@type": "Offer",
      "itemOffered": { "@id": "#property" }
    },
    {
      "@id": "#publishing-business",
      "@type": "RealEstateAgent"
    }
  ]
}
```

Here, `about` identifies the listing's subject. Repeated `@id` values connect the references to their defined entities. Google's documentation describes linking related items using `@id`. [Schema.org about](https://schema.org/about), [Google's entity-linking guidance](https://developers.google.com/search/docs/appearance/structured-data/sd-policies).

Require stable identifiers in the finished implementation. Have the developer reuse the established business identifier across listing pages. Keep each property's identifier distinct. Add actual page URLs and approved facts before testing the completed output.

An `Offer` without a specified `businessFunction` defaults to selling under Schema.org's definition. For a rental page, require the developer to specify the leasing transaction. Change the property type when the listing describes another kind of property. [Schema.org's Offer documentation](https://schema.org/Offer).

## Fill fields from the same approved facts as the page

Ask for a mapping from the listing source to the visible page and generated JSON-LD. Leave unverified optional details out. Google's policies require truthful, current markup that represents visible content. [Google's content requirements](https://developers.google.com/search/docs/appearance/structured-data/sd-policies).

| Field to consider | Location | Source and implementation check |
| --- | --- | --- |
| `datePosted` | Listing page | Use the listing's actual online publication date, not today's date on every refresh. [Definition](https://schema.org/datePosted) |
| `address` | Property | Match the permitted address displayed on the page. [House properties](https://schema.org/House) |
| `numberOfBedrooms` | Property | Use the approved bedroom count. Avoid substituting it for the total room count. [House properties](https://schema.org/House) |
| `floorSize` | Property | Preserve the verified area and unit in a `QuantitativeValue`. [House properties](https://schema.org/House) |
| `price` | Offer | Match the current asking price. Follow the documented numeric format without a currency symbol. [Price guidance](https://schema.org/price) |
| `priceCurrency` | Offer | Use the verified currency's ISO 4217 code, such as `USD` for US dollars. [Currency guidance](https://schema.org/priceCurrency) |
| `availability` | Offer | Use a documented `ItemAvailability` value only when it accurately represents the offer. [Availability definition](https://schema.org/availability) |

Name who approves the source data and who fixes discrepancies. Ask the listing provider which fields you may reproduce in page markup. Record unresolved permission or source questions before commissioning the template.

## Plan status changes before the first listing goes live

Schema.org's `ItemAvailability` vocabulary includes values such as `InStock`, `Reserved`, and `SoldOut`. It does not supply a direct replacement for every MLS status. [The availability enumeration](https://schema.org/ItemAvailability).

Require a written mapping approved by the person responsible for the listing. Do not automatically translate every pending or contingent status to `Reserved`. If the source status has no defensible mapping, omit the optional availability value and retain accurate visible status text.

Ask the developer to demonstrate these maintenance cases on a preview:

| Case to test | Proposed acceptance check |
| --- | --- |
| Asking price changes | Visible price and offer markup update from the same approved record |
| Property goes under contract | Status wording, contact prompt, and any availability mapping agree |
| Property sells or is withdrawn | Active-offer markup is removed or revised to match the approved page treatment |
| Feed stops updating | The maintenance owner receives an observable failure and checks stale public information |
| Listing is removed | The agreed removal or archive policy applies to both content and markup |

For retained archives, require approval of the facts and media that remain. Keep active showing language out of a page approved only as a historical example. These are proposed maintenance checks, not statements about your MLS's display permissions.

## Check what the listing integration exposes

Before adding markup, ask where the property content lives. Inspect your own page and any hosted listing destination separately. Require the developer to identify the template they can edit and the source of its data.

Google separates initial HTML from rendered content and can process JavaScript. Its guidance recommends server rendering or pre-rendering, while noting that not all bots execute JavaScript. [Google's JavaScript guidance](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics).

Compare the property details in the browser, initial HTML, rendered output, and extracted structured data. Request a demonstration on the actual listing URL. Avoid accepting a screenshot of another vendor's demonstration page as proof for your website.

## Validate vocabulary, Google features, and inquiry receipt separately

Use the [Schema.org Markup Validator](https://validator.schema.org/) for the generated page's Schema.org graph and syntax. It accepts a URL or supplied markup and displays extracted structured data. [Schema.org's validator documentation](https://schema.org/docs/validator.html).

Use [Google's Rich Results Test](https://search.google.com/test/rich-results) for supported Google features. Compare its findings with the feature's documentation. Google's introduction explains the test's role in validating markup and previewing some search features. [Google's testing guidance](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data).

A result showing no supported rich-result items does not, by itself, establish that your `RealEstateListing` vocabulary is invalid. That distinction follows from Google's documented feature list and Schema.org's separate validator. [Google's feature gallery](https://developers.google.com/search/docs/appearance/structured-data/search-gallery), [Schema.org's validator scope](https://schema.org/docs/validator.html).

Then test the page as a buyer. Submit a permitted test question and confirm its arrival at the agreed destination. Require the received record to include the property identity, page URL, question, and reply details.

Test the seller route separately. Ask for a clear path to your seller-service page and a representation inquiry. Confirm that its recipient receives seller context, rather than a request to view the advertised house.

Retain the page URL, test date, markup findings, status-change evidence, and inquiry receipts. These are acceptance records. Measure later search visits and received inquiries separately before attributing any change to schema.

## Put the listing template in your website brief

The markup worksheet separates source-field mapping, vocabulary validity, and search-feature eligibility. Take the listing-template requirements to [whole website fix: listing markup](/for/real-estate). The whole website fix includes schema verification.

[Scale With Search's published offer](https://scalewithsearch.com/work). [listing markup, published scope, checked 2026.10.14](https://scalewithsearch.com/work).

- [How MLS listings appear on your website, and what search can miss.](/articles/idx-mls)
- [Own your real estate website: domain, hosting, editing, and leads](/articles/own-your-site)
- [Check your real estate website in 30 minutes](/articles/real-estate-website-audit)


## Related: Real estate

- [How MLS listings appear on your website, and what search can miss.](/articles/idx-mls)
- [Own your real estate website: domain, hosting, editing, and leads](/articles/own-your-site)
- [Check your real estate website in 30 minutes](/articles/real-estate-website-audit)

----

```text
                  .|########||.                                       .|########||.                                       .|########||.
               |##||.      .||##|.                                 |##||.      .||##|.                                 |##||.      .||##|.
             |#|.              .|#|.                             |#|.              .|#|.                             |#|.              .|#|.
           |#|                    |#|                          |#|                    |#|                          |#|                    |#|
         .#|                        |#.                      .#|                        |#.                      .#|                        |#.
        .#.                          .#|                    .#.                          .#|                    .#.                          .#|
       |#.                            .#|                  |#.                            .#|                  |#.                            .#|
      |#             ......             #|                |#             ......             #|                |#             ......             #|
     .#           ||#########|           #|              .#           ||#########|           #|              .#           ||#########|           #|
    .#.         |######||######|.        .#.            .#.         |######||######|.        .#.            .#.         |######||######|.        .#.
    #.        .##|###|##|#|######|        .#            #.        .##|###|##|#|######|        .#            #.        .##|###|##|#|######|        .#
   ||        |##|#||||||||||||#||#|        ||          ||        |##|#||||||||||||#||#|        ||          ||        |##|#||||||||||||#||#|        ||
   #        |#||||||||||||||||||||#|        #.         #        |#||||||||||||||||||||#|        #.         #        |#||||||||||||||||||||#|        #.
  ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||
  #       .#||||||||||||||||||||||||#|       #        #       .#||||||||||||||||||||||||#|       #        #       .#||||||||||||||||||||||||#|       #
 ||   ....|||#||||||##|#|||#|#||##||||....|. ||      ||   ....|||#||||||##|#|||#|#||##||||....|. ||      ||   ....|||#||||||##|#|||#|#||##||||....|. ||
 #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#      #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#      #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#
 #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.     #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.     #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.
.|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||    .|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||    .|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||
||   |....  #. ....|#.      |. ...|. ....||   ||    ||   |....  #. ....|#.      |. ...|. ....||   ||    ||   |....  #. ....|#.      |. ...|. ....||   ||
#.  .||||||##||||||##||####|||||||#||||||#|   .#    #.  .||||||##||||||##||####|||||||#||||||#|   .#    #.  .||||||##||||||##||####|||||||#||||||#|   .#
#    .||####|###########################|.     #    #    .||####|###########################|.     #    #    .||####|###########################|.     #
#      .#||||||.#.|| # |. ..# #| #|||||#|      #    #      .#||||||.#.|| # |. ..# #| #|||||#|      #    #      .#||||||.#.|| # |. ..# #| #|||||#|      #
#      .#|||||| ..  |# ## |#| ...#|#|||#|      #    #      .#|||||| ..  |# ## |#| ...#|#|||#|      #    #      .#|||||| ..  |# ## |#| ...#|#|||#|      #
#      .#|||#|# .# .#| #| ##|.#..#|||||#|      #    #      .#|||#|# .# .#| #| ##|.#..#|||||#|      #    #      .#|||#|# .# .#| #| ##|.#..#|||||#|      #
#      .#||||||############|######|||||#|      #    #      .#||||||############|######|||||#|      #    #      .#||||||############|######|||||#|      #
#   |...||#||||||#||||#|#||||||#|||||#||| |.|  #    #   |...||#||||||#||||#|#||||||#|||||#||| |.|  #    #   |...||#||||||#||||#|#||||||#|||||#||| |.|  #
#. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#    #. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#    #. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#
|| |  ...||  ...##| |  #| .|. |. #####  .. .| ||    || |  ...||  ...##| |  #| .|. |. #####  .. .| ||    || |  ...||  ...##| |  #| .|. |. #####  .. .| ||
|| ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||    || ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||    || ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||
.# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.    .# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.    .# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.
 #.|||||||#############################| ||| .#      #.|||||||#############################| ||| .#      #.|||||||#############################| ||| .#
 ||       ##||#||#||||||#||#||#||#||##.      ||      ||       ##||#||#||||||#||#||#||#||##.      ||      ||       ##||#||#||||||#||#||#||#||##.      ||
  #       .#|||||||||#||#|||||||||||#|       #        #       .#|||||||||#||#|||||||||||#|       #        #       .#|||||||||#||#|||||||||||#|       #
  ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||
  .#        |#||||||||||||||||||||#|        #.        .#        |#||||||||||||||||||||#|        #.        .#        |#||||||||||||||||||||#|        #.
   ||        |#||||||||||||||||||#|        ||          ||        |#||||||||||||||||||#|        ||          ||        |#||||||||||||||||||#|        ||
    #.        .######|#|#########|        .#            #.        .######|#|#########|        .#            #.        .######|#|#########|        .#
    .#.         |#####||||#####|         .#.            .#.         |#####||||#####|         .#.            .#.         |#####||||#####|         .#.
     |#           ||########||           #.              |#           ||########||           #.              |#           ||########||           #.
      |#             ......             #|                |#             ......             #|                |#             ......             #|
       |#.                            .#|                  |#.                            .#|                  |#.                            .#|
        |#.                          .#.                    |#.                          .#.                    |#.                          .#.
         .#|                        |#.                      .#|                        |#.                      .#|                        |#.
           |#|                    |#|                          |#|                    |#|                          |#|                    |#|
            .|#|.              .|#|.                            .|#|.              .|#|.                            .|#|.              .|#|.
               |##||.      .||##|                                  |##||.      .||##|                                  |##||.      .||##|
                 .||########||.                                      .||########||.                                      .||########||.

Scale With Search  2026  [scalewithsearch.com](https://scalewithsearch.com)
```
