A real estate website that wants to be cited by ChatGPT, Perplexity and Google AI Overviews needs one connected JSON-LD graph, not scattered tags: `Organization` or `RealEstateAgent` on every page, `RealEstateListing` plus a `Residence` subtype (`SingleFamilyResidence`, `Apartment`, `House`) and an `Offer` on every property page, `Place` with `GeoCoordinates` for location, `Article`/`BlogPosting` with a real `author` and `dateModified` on content, `FAQPage` on Q&A blocks, `BreadcrumbList` for hierarchy, and `ImageObject`/`VideoObject` for media — all of it server-rendered, all of it matching the visible text on the page, and all of it stitched together with `@id` references so the machine reads one entity instead of twelve fragments. The second half of the answer is access. Structured data is worthless if the crawler never sees it. AI answer engines retrieve before they generate, and they use different bots: OpenAI indexes with OAI-SearchBot and fetches live pages with ChatGPT-User, Perplexity uses PerplexityBot and Perplexity-User, Anthropic uses ClaudeBot and Claude-User, Microsoft Copilot leans on the Bing index, and Google AI Overviews run on the standard Google index via Googlebot. Most of these fetchers do not execute JavaScript reliably, which means schema injected client-side through Google Tag Manager is often invisible to exactly the systems you are trying to reach. No vendor publishes a "schema markup increases citations by X%" figure, and any agency that quotes one is inventing it. What is defensible is the mechanism: structured data disambiguates who you are, what you sell, where you operate and when the page was updated, in a format that survives chunking and embedding. That is what makes a page quotable. This guide maps the exact types, properties, technical fixes and measurement setup that real estate agents, brokerages and developers should implement in 2026.
What schema markup should a real estate website use to get cited by AI search?
Think in layers, not tags. **Layer one is identity**: a single `Organization` node (use the `RealEstateAgent` subtype for an agent or brokerage, since it inherits from `LocalBusiness`) with `@id` set to something stable like `https://yoursite.com/#organization`, plus `name`, `legalName`, `logo` as an `ImageObject`, `url`, `telephone`, `address` as a `PostalAddress`, `areaServed`, `openingHoursSpecification` and a `sameAs` array pointing to your Google Business Profile, LinkedIn, Instagram, Zillow or Realtor.com profile and local association directory. Every other page references that `@id` rather than redeclaring the business.
**Layer two is inventory**: `RealEstateListing` on each property URL — note that in schema.org `RealEstateListing` is a page type (a subtype of `SearchResultsPage`/`WebPage`), so the physical asset goes in `mainEntity` as `SingleFamilyResidence`, `Apartment`, `House` or `ApartmentComplex`, and the commercial terms go in `Offer` with `price`, `priceCurrency`, `availability` and `validFrom`. Add `datePosted`, and `leaseLength` for rentals.
**Layer three is context**: `Place`/`AdministrativeArea` for neighborhood and city pages, `Person` or `RealEstateAgent` for team bios, `Service` for your listing and buyer-representation services, `Event` for open houses and launch events, `Article` for the blog, `FAQPage` for question blocks and `BreadcrumbList` everywhere.
**Layer four is media and provenance**: `ImageObject` with `contentUrl`, `caption` and `creator`; `VideoObject` with `uploadDate`, `duration` (ISO 8601, e.g. `PT2M18S`) and `thumbnailUrl`. Budget roughly 15–40 developer hours for a mid-size brokerage site, or US$1,500–6,000 as a one-time implementation at typical agency rates; on WordPress, plugins such as Yoast SEO Premium (from ~US$99/year per site, depending on plan) or Rank Math Pro (from ~US$79/year, depending on plan) cover the identity layer but rarely the listing layer without custom work.
How do ChatGPT, Perplexity and Google AI Overviews actually use your structured data?
Answer engines are retrieval systems with a language model bolted on top. The pipeline is: crawl → index or live-fetch → chunk → embed → retrieve the most relevant passages → generate an answer with citations. Your schema influences three of those five steps.
At **crawl**, the bot has to be allowed and the markup has to exist in the raw HTML response. OpenAI runs GPTBot (training), OAI-SearchBot (search index) and ChatGPT-User (live fetch when a user asks). Perplexity runs PerplexityBot and Perplexity-User. Anthropic runs ClaudeBot and Claude-User. Google AI Overviews are generated from the ordinary Google index, which is why `Google-Extended` — the token that controls Gemini training and grounding — does **not** remove you from AI Overviews; only blocking Googlebot or using `nosnippet` / `max-snippet:-1` does that, and it also removes you from ordinary search. That trade-off is real and worth a conscious decision.
At **chunk and embed**, JSON-LD gives the system unambiguous key–value facts — `price: 8500000`, `priceCurrency: MXN`, `numberOfBedrooms: 3`, `floorSize: 145 MTK`, `addressLocality: Polanco` — instead of forcing a model to infer them from a marketing paragraph. Chunkers frequently keep the JSON-LD block intact because it is short and self-contained.
At **generate and cite**, the model prefers passages it can attribute confidently: a named author, a `dateModified`, a clear entity, a specific number. Structured data is not a ranking factor that any provider has documented, and you should distrust anyone claiming otherwise. What it does is make you the easiest source to quote correctly — and in a sector where a wrong price or a wrong square-meter figure is a legal problem, being the machine-readable source of truth is the whole game.
Which schema types belong on each page template of a real estate site?
Map schema to templates once, then ship it globally. **Homepage**: `Organization`/`RealEstateAgent` + `WebSite` (Google deprecated the sitelinks search box rich result in late 2024, but a `WebSite` node with `potentialAction: SearchAction` still declares your search endpoint cleanly) + `BreadcrumbList`.
**Property detail page**: `RealEstateListing` → `mainEntity` → residence subtype + `Offer`, plus `ImageObject` gallery and `VideoObject` tour. **Development / new-construction page**: `ApartmentComplex` with `numberOfAvailableAccommodationUnits`, `amenityFeature` as `LocationFeatureSpecification` entries (pool, coworking, pet park), plus an `ItemList` of unit types where each `itemListElement` is an `Apartment` with its own `Offer` and `floorSize`. This is the highest-leverage markup for developers, because it lets an assistant answer "which two-bedroom units are still available at X and from what price" without guessing.
**Neighborhood/zone page**: `Place` or `AdministrativeArea` with `geo`, `containedInPlace` and a `FAQPage` block. **Agent bio**: `Person` (or `RealEstateAgent`) with `jobTitle`, `worksFor` referencing the org `@id`, `knowsAbout` ("luxury condominiums in Coral Gables", "pre-construction in Tulum"), `hasCredential` as `EducationalOccupationalCredential` for the license, and `sameAs` to LinkedIn and portal profiles.
**Blog/guide**: `BlogPosting` with `author` as an `@id` reference to a real `Person`, `datePublished`, `dateModified`, `publisher`, `about` and `inLanguage`. **Open house**: `Event` with `startDate`, `endDate`, `location` and `eventAttendanceMode`.
One caution on reviews: since September 2023 Google no longer shows review rich results for self-serving reviews — testimonials you host about your own business on `LocalBusiness` or `Organization` pages. You can still mark them up honestly for machine consumption, but do not expect stars in the SERP, and never mark up reviews that are not visible on the page.
How do you mark up a property listing correctly with RealEstateListing and Offer?
Start from the fields your MLS or portal feed already gives you and map them one by one. A complete listing node typically carries: `name` (a human title, not the MLS ID), `description`, `url`, `datePosted`, `identifier` (MLS number), and `mainEntity` containing `numberOfBedrooms`, `numberOfBathroomsTotal`, `numberOfRooms`, `floorSize` as a `QuantitativeValue` with `unitCode: MTK` for square meters or `FTK` for square feet, `yearBuilt`, `petsAllowed`, `numberOfParkingSpaces` (via `amenityFeature` if needed), `address` as a full `PostalAddress`, and `geo` as `GeoCoordinates` with `latitude` and `longitude`.
The `Offer` node carries `price` as a plain number with no currency symbol or thousands separator, `priceCurrency` as an ISO 4217 code (`USD`, `MXN`, `COP`, `EUR`, `PEN`, `CLP`), `availability` (`https://schema.org/InStock` while active, `SoldOut` once closed), `validFrom`, and `seller` referencing your organization `@id`. For rentals, add `leaseLength` as a `QuantitativeValue` in months and use `businessFunction` to distinguish lease from sale.
Three rules keep this safe. **Parity**: Google's structured data policies require that marked-up content be visible and representative of the page; mismatches can trigger a manual action, and an assistant that quotes a price your page does not show creates a consumer complaint you will own. **Freshness**: stale prices are the number-one defect in real estate schema — wire `Offer.availability` and `price` to the same source as the visible page, and return 410 or redirect with an updated node when a listing closes. **Compliance**: IDX and MLS licenses restrict how syndicated listing data may be displayed, cached and attributed, and Fair Housing rules mean you should never encode demographic, ethnic, religious or family-status descriptors into `description`, `amenityFeature` or `knowsAbout`. This is general information, not legal advice — confirm your specific markup with your MLS, broker compliance officer or counsel before publishing.
How do you turn your brokerage into an entity that AI systems recognize by name?
Citation is an entity problem before it is a markup problem. An assistant cites "Growth Estate" or "Compass Miami" because it has resolved that string to a stable entity with consistent attributes across many sources — not because a single site declared it.
Start with a canonical entity home. Pick one URL (usually the homepage or an /about page), declare the `Organization` node there with `@id`, and reference that `@id` from every other node on the site — `publisher` on articles, `worksFor` on agents, `seller` on offers, `provider` on services. One organization node per site, referenced everywhere, beats twelve near-duplicate nodes injected by three plugins, which is the single most common defect we see when auditing brokerage sites.
Then enforce NAP consistency. The exact same legal name, street address format, and phone number on your website, Google Business Profile, LinkedIn company page, portal profiles (Zillow, Realtor.com, Inmuebles24, Idealista, ZonaProp, Urbania, Portal Inmobiliario, Finca Raíz, Metrocuadrado), your local realtor association listing and your CRM-generated landing pages. `sameAs` is how you tell the machine those profiles are the same entity; inconsistent names are how you tell it they are three different companies.
Add `knowsAbout`, `areaServed` (as `Place` nodes with real city and zone names, not "nationwide"), `foundingDate`, `numberOfEmployees` and `award` where genuine. Then earn off-site corroboration: local press, association directories, podcast appearances, portal author pages. Markup declares the claim; third-party mentions verify it. Teams running the Estate Funnel method treat the entity graph as infrastructure — the same discipline that lets an AI qualify a lead in under five seconds is what lets an AI describe your firm accurately when a buyer asks who the best agent in a zone is.
Do FAQPage, Article and BreadcrumbList schema still matter after Google restricted rich results?
Yes, but for a different reason than in 2021. In August 2023 Google limited FAQ rich results to well-known authoritative government and health sites, and it deprecated HowTo rich results around the same period. If your KPI was "stars and accordions in the SERP," that value largely disappeared. If your KPI is being quoted by an answer engine, the value went up.
Here is why. `FAQPage` markup forces you to write in the exact shape retrieval systems reward: a self-contained question paired with a self-contained answer, typically 40–80 words, that makes sense with zero surrounding context. That is precisely the unit an embedding model stores and a generator quotes. The same content buried in a 400-word narrative paragraph retrieves far less reliably. Write five to seven of these per pillar page, phrased the way a buyer or seller actually asks — "how much are closing costs in Mexico City," "what is the minimum down payment for a pre-construction unit in Medellín" — and answer with a number, a range and a date.
`Article`/`BlogPosting` matters for provenance: `author` linked to a `Person` entity with credentials, `datePublished` and an honest `dateModified` are the signals that let a model decide your 2026 figure supersedes someone's 2022 figure. Refreshing content without updating `dateModified` wastes the update; faking `dateModified` on unchanged content is the fastest way to lose trust with both Google and users.
`BreadcrumbList` still produces a visible rich result in Google and, more usefully, tells a crawler the hierarchy — country → city → neighborhood → listing — that lets an assistant understand your site as a structured inventory instead of a pile of unrelated URLs.
What technical mistakes stop AI crawlers from reading your real estate schema?
Seven failures account for most broken implementations, and six of them are invisible in a browser.
**1. JavaScript-only injection.** Schema pushed through Google Tag Manager or rendered client-side is usually seen by Googlebot, which renders JS, but frequently missed by GPTBot, OAI-SearchBot, PerplexityBot and ClaudeBot, which largely do not. Server-render the JSON-LD. On Next.js, emit it in the server component or route metadata; on WordPress, emit it via PHP, not a tag manager.
**2. IDX iframes.** If your listings render inside an iframe served from your IDX vendor's domain, the markup — and often the content — belongs to that domain, not yours. Native or API-based IDX (RESO Web API feeds mapped to schema fields) is the fix; it is also the difference between owning your listing URLs and renting them.
**3. Blocking the bots you want citations from.** Disallowing PerplexityBot or OAI-SearchBot in robots.txt while asking why ChatGPT never mentions you is a self-inflicted wound. Decide deliberately: training bots (GPTBot, CCBot, Google-Extended, Applebot-Extended) versus search/citation bots (OAI-SearchBot, ChatGPT-User, PerplexityBot, Googlebot, Bingbot).
**4. Snippet suppression.** `nosnippet`, `max-snippet:-1` or `data-nosnippet` on key content blocks removes you from AI Overviews.
**5. Conflicting duplicate nodes.** A theme, an SEO plugin and a custom snippet each emitting an `Organization` with a different name or phone teaches the parser that your identity is unstable. Audit with a single-page view-source, not just a validator that reports "no errors."
**6. Content parity failures.** Marked-up prices, sizes or availability that do not appear on the rendered page.
**7. Bilingual sites without `inLanguage` and matching hreflang.** English and Spanish versions need separate, self-consistent graphs, each with its own `inLanguage`, its own localized `priceCurrency`, and reciprocal hreflang tags.
How do you measure whether structured data is actually earning AI citations?
Validate first, then measure retrieval, then measure business impact — three different instruments.
**Validation.** Run every template through Google's Rich Results Test and the Schema Markup Validator at validator.schema.org, then watch the Enhancements and Page indexing reports in Search Console and the equivalent in Bing Webmaster Tools (which matters because Copilot leans on Bing). Fetch your own page with curl and no JavaScript to confirm the JSON-LD is in the raw HTML — this ten-second check catches the most expensive mistake on this list.
**Retrieval.** Filter server or CDN logs by user agent to confirm OAI-SearchBot, PerplexityBot, ChatGPT-User and ClaudeBot are actually fetching your listing and guide URLs; Cloudflare and most CDNs expose AI-crawler traffic in their dashboards. Then build a prompt panel: 30–50 questions a real buyer, seller or developer would ask an assistant in your market, tested monthly, logging whether your brand appears, in what position, and which exact URL is cited. That log is your rank tracker for the AI era, and it is the only one that reflects what your prospects see.
**Business impact.** In GA4, create a channel group for referrals from chatgpt.com, perplexity.ai, gemini.google.com and copilot.microsoft.com. Industry trackers generally put AI-assistant referrals at roughly 0.5–3% of organic sessions for most sites in 2025–2026, but with conversion rates that often run two to five times higher than generic organic, because the visitor arrives pre-qualified by the assistant. Expect 2–8 weeks between deployment and re-crawl before numbers move.
The last mile is response speed: an AI-referred visitor is at the end of their research, and industry benchmarks consistently show contact within five minutes dramatically outperforms contact within an hour. Getting cited is worth little if the lead waits until Monday.
Frequently asked questions
No. No AI provider publishes a documented ranking or citation boost for structured data, and any figure claiming otherwise is invented. Schema markup makes your facts machine-readable, unambiguous and safe to quote, which raises the odds of accurate citation — but being crawlable, being in the index, having genuinely useful content, and being corroborated by third-party sources matter at least as much.