AI Citability
The machine-readable surfaces every UpliftCRE site publishes — the listing fact feed, llms.txt, markdown doors, the property-facts table, and the information AI can read (JSON-LD).
Your site is built to be read by machines as well as people. This page documents the surfaces every site publishes for AI assistants and developers: a JSON fact feed per listing, a plain-text site index, markdown twins of key pages, a facts table, information AI can read (JSON-LD), and the standard sitemap and feeds.
Availability
- The JSON-LD information AI can read is always on. So is the privacy guard: confidential listing details — internal notes, seller motivation, comps, private documents, coaching fields, assessed value, legal description — are withheld from every machine-readable response, always.
- The fact feed, the llms.txt index, the markdown doors, and the property-facts table are part of the platform's AI Citability surfaces. They are enabled per site by the team — they are not a switch you hold. If they are not live on your site yet, ask hello@upliftcre.com.
- The site must be public. A site hidden from search engines serves none of the crawler-facing surfaces.
The listing fact feed
Every published listing exposes a JSON fact feed, on your own domain:
GET https://www.yourdomain.com/wp-json/ucre/v1/listings/{id}.
The id is the listing's id — visible in the dashboard's listing links, in the CSV export's Listing ID column, and through the connector's list tool. The endpoint is public: no sign-in, no key. An unpublished, hidden, or wrong-id request answers a plain not-found — there is no way to tell a hidden listing from a missing one.
The response carries the listing's identity — id, title, public URL, published and modified
timestamps — plus a facts object:
| Field | Meaning |
|---|---|
label | The fact's display label — the price fact reads "Asking price" or "Sold price", never a bare "Price" |
value | The value as published |
unit | USD, sqft, acres, years, ft, percent — or none |
source | Where the value came from: advisor for advisor-entered values, or an external source such as the county appraisal district for tax and parcel facts |
as_of | When the value was current |
The fact set is allowlisted, not scraped. A fact appears because it is registered — never merely because a field exists. The set, in feed order:
- Deal terms: construction status, WALT (years), listing status, transaction type, property type, property subtype, asking price, lease rate, lease period, lease structure
- Location: address, city, state, postal code
- Size and specs: building size (SF), lot size (acres), year built, zoning, parking spaces, parking type, clear height (ft), suite count, tenancy
- Tax and parcel: parcel / APN, annual property tax, taxing jurisdictions
- Financials: NOI, cap rate, occupancy — published only when the listing's tier is set
Enrichment facts register as they become available and join the same set.
The property-facts table
The same fact set can render on the listing page itself as a semantic HTML table — so the
facts a visitor reads are the facts the feed serves. Templates place it with the shortcode
[ucre_property_facts] (attributes: id — defaults to the current listing; title — defaults
to "Property Facts", pass an empty string to omit the caption).
The emitted markup is stable for styling:
| Element | Class / attribute |
|---|---|
| Table | ucre-facts |
| Caption | ucre-facts__caption |
| Row | ucre-facts__row |
| Label cell | th.ucre-facts__label |
| Value cell | td.ucre-facts__value, with data-fact="{key}" |
With the surfaces off, the shortcode renders nothing — never literal shortcode text.
llms.txt
The site serves a virtual llms.txt at its root — /llms.txt on your domain. It is plain
text, generated at request time, and carries:
- Your company name and tagline.
- A Listings section linking the listings archive and the newest listing's fact feed.
- A Notes section stating that the same fact set appears on the page, in the JSON feed, and in the JSON-LD; figures are as published; and the sitemap location.
- The markdown index link, when the markdown surfaces are on.
Markdown doors
Three ways to read key pages as markdown, all on your own domain:
- The site index:
/index.md— the whole site, listed. - The
.mddoor: take a listing, glossary, or team page URL and replace the trailing slash with.md— for example,/team/jane/becomes/team/jane.md. - Content negotiation: request the normal URL with an explicit
Accept: text/markdownheader. Wildcard accept headers do not trigger it — the preference must be explicit.
The doors cover listings, the CRE glossary, and team pages.
Information AI can read (JSON-LD)
Every page emits JSON-LD — information AI can read. The organization graph runs site-wide, breadcrumbs appear on every page but the home page, and archive pages list their items. Per content type:
| Content | Type |
|---|---|
| Home page | RealEstateAgent (with the site's organization and website details) |
| Listings | RealEstateListing (with broker, offer, price specification, address, geo, and the fact set as additional properties) |
| Team pages | Person (with RealEstateAgent and credentials) |
| Insights articles | Article |
| Market-news articles | NewsArticle |
| Market reports | Report (with place coverage, measured variables, and mentioned terms) |
| Case studies | Article |
| Track record deals | Article |
| Markets served | Place |
| Services | Service |
| Asset types | Article |
| Glossary terms | DefinedTerm |
| FAQs | FAQPage |
| Testimonials | Review — only after the client's sign-off |
| Any other page | WebPage |
Pages that carry FAQ content emit an additional FAQPage node alongside their primary type.
Sitemap and feeds
- Sitemap: the standard sitemap at
/wp-sitemap.xml. Individual published pages stay in it and live at their own links; below a section threshold, the section's archive page and its category and tag listings are held back — see Tools and sections for the thresholds. - RSS: each content type has its standard feed. Below a threshold, that type's feed is switched off rather than serving a near-empty collection.
- Listing visibility: listings marked hidden by their visibility setting are excluded from the feed, the JSON-LD, and these surfaces.
- Search and REST collections stay open below thresholds, by design — a section being too young to have an archive page does not hide the individual work.