Real estate is one of the most competitive niches online, and it is also one where structured data is criminally underused. Most property sites publish beautiful listings with photos, floor plans, and detailed descriptions, and then leave search engines to figure out the rest on their own.
That is a missed opportunity, because property search is exactly the kind of detail-heavy, high-intent search that structured data was built for. Buyers do not search casually. They search with specifics: three bedrooms, under a certain price, in a certain neighborhood, with a yard.
RealEstateListing schema is how you feed those specifics to Google and AI in a language they understand. But there is a catch that most guides skip over, and understanding it is the difference between schema that works and schema that just sits there.
Let’s get into it.
Quick answer: RealEstateListing schema is structured data that identifies a page as a property listing for sale or lease. On its own it is fairly thin, with only two unique properties (datePosted and leaseLength), so its real power comes from layering it with other types like SingleFamilyResidence, Apartment, and Offer. There is no dedicated Google rich result for it, but it is highly valuable for local search and AI property recommendations. On WordPress, a plugin like SchemaEngine AI makes this layering practical.
What RealEstateListing Schema Actually Is
Let’s define it precisely, because this is where the confusion starts.
According to Schema.org, a RealEstateListing is a listing that describes one or more real estate offers, where the business function is typically to lease out or to sell. Crucially, the type itself represents the overall listing as a web page. It is a page-level wrapper, not a description of the property itself.
Read that again, because it matters. RealEstateListing describes the listing page. It does not describe the house.
That distinction explains something that surprises a lot of people: RealEstateListing has only two unique properties of its own.
- datePosted: When the listing was published.
- leaseLength: The length of a lease, for rentals.
That is it. Everything else it uses is inherited from broader web page types.
So if you were expecting a rich set of bedroom, bathroom, and square footage fields, you will not find them here. And that leads directly to the most important concept in real estate schema.
The Secret Is Layering, Not One Big Tag
Here is the insight that separates working real estate schema from decoration.
RealEstateListing is not meant to work alone. It is the wrapper. Inside it, you layer the types that actually describe the property and the deal.
Think of it as three floors of a building:
Floor 1: The listing (RealEstateListing). This says “this page is a property listing” and carries the date posted and lease length.
Floor 2: The property (Accommodation types). This is where the real detail lives. Use the most specific type that fits:
SingleFamilyResidencefor a standalone houseApartmentfor an individual unitApartmentComplexfor an entire building or communityHouseas a broader fallback
These types carry the properties buyers care about: number of rooms, bedrooms, bathrooms, floor size, year built, address, and geo coordinates.
Floor 3: The deal (Offer). This carries the price, the currency, and the availability status, plus whether the business function is to sell or to lease.
Stack those three together and you have given search engines a complete, unambiguous picture: this is a listing page, for this specific type of property, with these features, at this price, available now.
Most real estate sites either skip the schema entirely or add a bare RealEstateListing tag with nothing underneath it. Neither approach helps.
Let’s Be Honest About Rich Results
Time for a straight answer, because you deserve one.
Does RealEstateListing schema get you a fancy rich result in Google, the way Recipe or Product schema does? No. There is no dedicated real estate rich result in Google’s search gallery.
So why bother?
Because rich results were never the only reason to use structured data, and in real estate they are arguably not even the main one. Here is what your markup actually does:
It removes ambiguity. Google stops guessing whether “3” refers to bedrooms, bathrooms, or the street number, and starts knowing.
It powers local and Maps visibility. Accurate address and geo data, combined with RealEstateAgent and LocalBusiness schema, strengthens your presence in local search where property hunting happens.
It feeds AI property search. This is the big one, and we will come back to it.
It supports other rich results you can win. FAQ schema on your listing pages, breadcrumbs, and agent profiles all can produce visible enhancements, even if RealEstateListing itself does not.
Set the right expectation and you will use this correctly: RealEstateListing schema is infrastructure, not decoration. It makes everything else work better.
The Properties That Do the Heavy Lifting
Since the detail lives in the layered types, here is what to prioritize across the stack.
On the property (Accommodation type):
- address: Full PostalAddress with street, city, region, postal code, and country.
- geo: Latitude and longitude, ideally precise to several decimal places.
- numberOfBedrooms and numberOfBathroomsTotal: The details buyers filter by.
- floorSize: Square footage or square meters, with the unit specified.
- yearBuilt: Especially valuable for buyers filtering by age.
- image: Real, high-quality photo URLs.
On the offer:
- price: The listing price. Important: enter it as a plain number, with no commas and no dollar sign, or your markup will fail validation.
- priceCurrency: The currency code, such as USD.
- availability: Whether the property is available.
- businessFunction: Sell or lease.
On the listing wrapper:
- datePosted: When you published the listing.
- leaseLength: For rentals only.
On related pages:
- RealEstateAgent schema on your agent bio and team pages, with name, credentials, and areas served.
- Organization or LocalBusiness schema for the brokerage itself.
A Layered Example
Here is what the stack looks like in practice. Notice how the listing wraps the property, and the property carries an offer.
json
{
"@context": "https://schema.org",
"@type": "RealEstateListing",
"url": "https://example.com/listings/123-main-st",
"name": "Renovated 4-Bedroom Family Home",
"datePosted": "2024-03-14",
"mainEntity": {
"@type": "SingleFamilyResidence",
"name": "123 Main Street",
"numberOfBedrooms": 4,
"numberOfBathroomsTotal": 3,
"yearBuilt": 1988,
"floorSize": {
"@type": "QuantitativeValue",
"value": 2500,
"unitCode": "FTK"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2672,
"longitude": -97.7431
}
},
"offers": {
"@type": "Offer",
"price": "685000",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"businessFunction": "https://purl.org/goodrelations/v1#Sell"
}
}See how the price is written as 685000, not $685,000? That formatting detail alone breaks a surprising number of implementations.
Doing This in WordPress
Now the practical question: how do you actually get this onto your site?
The Manual Approach
You can write the JSON-LD yourself, as in the example above. For a single listing, that is fine. But real estate sites are not single listings. They are dozens or hundreds of properties, each with different bedroom counts, prices, and types, and each changing status as offers come in and deals close.
Hand-coding that is not a project. It is a permanent job. And every stale price or wrong availability status in your schema is a broken promise to a buyer, and a trust problem with Google.
The Plugin Approach (Recommended)
For any property site with more than a handful of listings, a schema plugin is the only sensible route. It generates the layered markup, pulls the details from your listing fields, and keeps everything valid as your inventory changes.
This is what SchemaEngine AI is designed for. Instead of hand-building a three-layer stack for every property, you can generate accurate RealEstateListing schema with the right Accommodation type and Offer nested inside, link it to your agent and brokerage entities, and validate it all in real time. It supports manual control for those who want it, plus AI-assisted generation that reads your listing page and structures it correctly. As listings go live, change price, or sell, your markup keeps pace.
Mistakes That Break Real Estate Schema
These come up constantly in property site audits.
Using RealEstateListing alone. Without a nested property type and an Offer, you have labeled the page and said almost nothing about the home. Layer it.
Formatting the price wrong. Prices must be plain numbers, no commas, no currency symbols. Write 685000, not $685,000.
Using a generic type when a specific one exists. SingleFamilyResidence, Apartment, and ApartmentComplex all carry more meaning than a vague fallback. Be specific.
Confusing Apartment and ApartmentComplex. Apartment is a single unit. ApartmentComplex is the whole building or community. Mixing them up sends the wrong signal about scale.
Stale listings. A sold property still marked available, or an old price left in the schema, damages trust with both users and Google. Your markup must reflect the current reality.
Data that does not match the page. If your schema says four bedrooms and the page says three, Google may distrust the entire markup. They must match exactly.
Skipping validation. Always run listings through Google’s Rich Results Test and the Schema Markup Validator after changes.
Why AI Search Changes the Math Here
Here is where real estate schema becomes genuinely urgent.
Property search is being transformed by AI, because property questions are naturally specific and conversational. People are already asking:
“Find me a 3-bedroom house in Austin under $700k with a yard.”
“What condos are available near downtown with parking?”
These queries are essentially database lookups phrased in plain English. To answer them, AI systems like ChatGPT, Google AI Overviews, Gemini, and Perplexity need structured facts: bedrooms, price, location, availability, property type. They cannot reliably extract that from a paragraph of marketing prose about “charming character and abundant natural light.”
A listing with properly layered schema is machine-readable. The AI can match it to the query with confidence and surface it. A listing without schema is a wall of text the AI has to guess at, and when in doubt, it will recommend the competitor whose data is clean.
This is why the “no rich result” caveat matters less than it used to. The visible payoff has moved. It is no longer only about a prettier Google listing. It is about being findable at all when a buyer asks an AI to find them a home.
👉 Good Read: How to Get Cited in ChatGPT Search with Structured Data
Let SchemaEngine AI Handle the Stack
Layering RealEstateListing with the right property type and Offer, formatting prices correctly, keeping availability current across your whole inventory, linking your agents and brokerage, and validating every listing is real, ongoing technical work. Multiply it by a hundred properties and it becomes unmanageable by hand.
SchemaEngine AI does it for you. It generates accurate, properly layered real estate schema, connects your listings to your agent and organization entities for a clean graph, and validates everything in real time, so your properties are ready for local search and AI recommendations. Whether you prefer manual control or AI-assisted generation, your markup stays correct as listings change and sell. Your existing content stays exactly where it is.
Wrapping Up
RealEstateListing schema is not a magic tag you drop on a page. It is a wrapper, and its value comes entirely from what you layer inside it: the right property type, the right details, and a clean Offer with a properly formatted price.
Get that stack right and you achieve something valuable. Your listings stop being prose that machines have to interpret and become structured facts they can act on. That means clearer local visibility, better indexing, and a real shot at being recommended when a buyer asks an AI to find them a home.
Keep it accurate, keep it current, match it to your visible page, and validate before you publish.
And if maintaining a three-layer schema stack across an entire property inventory sounds like a job nobody has time for, SchemaEngine AI can generate, layer, and validate it automatically, so every listing is ready for search and AI the moment it goes live.
Ready to make your listings findable? Try SchemaEngine AI and turn your property pages into structured data that search engines and AI can actually use.



