Guides / How the engines find and choose businesses
Structured data for AI visibility: what business details the engines read
What schema.org markup can and cannot do for a local contractor in ChatGPT, Gemini, Perplexity, and Claude, which business details matter, and why consistency across the web matters more than the markup itself.
By Ben Hinton
, published
The question: What business details do AI engines read from structured data?
The short answer
Structured data is a block of machine-readable facts about your business, written in the schema.org vocabulary and placed in your pages. It states your name, trade, phone, address, service area, and hours in a form no reader can misinterpret. It is useful, and it is not magic.
Google says plainly that there is no special schema.org structured data1 that you need to add to appear in its AI features, and that there are no additional requirements2 beyond being indexed and eligible for a snippet. The details the engines use about your business are the same whether they read them from markup, from your visible page text, from your Google Business Profile, or from a directory. What decides whether they get those details right is whether every one of those places says the same thing.
What structured data is
Schema.org is a shared vocabulary for describing things on the web. A local contractor describes itself with a LocalBusiness type or one of its more specific children: RoofingContractor, HVACBusiness, GeneralContractor, or the broader HomeAndConstructionBusiness, which fits a window and door company. The usual format is JSON-LD, a short script block in the page that does not change what visitors see.
A minimal, correct block for a contractor looks like this:
{
"@context": "https://schema.org",
"@type": "RoofingContractor",
"@id": "https://www.example.com/#business",
"name": "Example Roofing LLC",
"url": "https://www.example.com/",
"telephone": "+1-602-555-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 E Example St",
"addressLocality": "Phoenix",
"addressRegion": "AZ",
"postalCode": "85004",
"addressCountry": "US"
},
"areaServed": ["Phoenix", "Mesa", "Chandler", "Gilbert", "Scottsdale"],
"openingHours": "Mo-Fr 07:00-17:00",
"sameAs": [
"https://www.facebook.com/exampleroofing",
"https://www.yelp.com/biz/example-roofing-phoenix"
]
}
Every field here is a fact that also exists somewhere else: on your contact page, on your Business Profile, on each directory. That is the point. Markup does not add facts; it pins down the ones you already publish.
The business details that matter
For a home-services business, these are the details worth getting exactly right, in markup and everywhere else:
- Legal and trading name. One spelling, everywhere. If you trade under a shorter name, say so on the site and use one form consistently.
- Trade. The most specific schema.org type that fits, plus visible text that says what you do. A company that does roofing and room additions should say both, clearly separated.
- Phone. The number customers call. Tracking numbers that differ from site to site make the web disagree about you.
- Address or service area. A storefront business lists its address. A business that goes to the customer lists the cities it serves with
areaServedand says the same on its service-area pages. - Hours. Including emergency service, if you offer it.
- License and insurance. State them in visible text with the license number.
- Profiles.
sameAslinks your site to your profiles on the directories and review sites, which helps any reader connect them as one business.
Google's own recommendation for its AI features is to make sure structured data matches the visible text on the page and that Business Profile information is up to date. That rule is sound for every engine: markup that says one thing while the page says another is a contradiction, and a contradiction leaves the reader to choose which version to believe.
Common markup mistakes
Missing markup is not the only failure. Markup can be present and still wrong, because it disagrees with itself or with the page:
- Two plugins, or a theme and a plugin, each emit their own business block, with different names or phone numbers.
- A template's placeholder details or an old address survive in markup nobody reads.
- Location pages copy the head-office block and change the city but not the phone or address.
- The markup names a business type that does not match what the page describes.
Each of these gives a reader two answers to one question. Fix them before adding anything new.
What the other engines read
OpenAI, Anthropic, and Perplexity publish guidance for site owners about crawler access: which bots to allow so your pages can be fetched for ChatGPT, Claude, and Perplexity search results. We explain those crawlers in how the engines find local businesses. The documentation we cite from them is about access, not markup, so we do not claim that markup earns a recommendation.
What we can say is where the facts come from. Yext's analysis of AI citations on location-specific queries found 86%3 of them came from sources brands control or manage, mainly websites and listings. That is a vendor in the listings business measuring industries other than home services, so treat it as direction. It still makes the practical point: most of what an engine reads about a local business is material the business can correct.
A test you can run
Pick the business at the top of your trade's index. For window and door companies in Phoenix, that is currently Renewal by Andersen4, in the newest weekly run of Claude's and Gemini's answers. The index is at /index. We have not measured roofing or heating and air conditioning yet, so in those trades pick the competitor you most often lose jobs to.
Now compare how that business appears on its website, its Business Profile, and the directories that show up as citations for your trade. Then do the same for your own business. Look for a different phone number, an old address, a missing line of business, a name spelled two ways, or a service area that covers different cities on different sites. Each difference is a place where an engine has to guess.
You can also check your own markup with a schema validator or Google's Rich Results Test, and confirm that every value in it matches the visible page.
What this means for an owner
Add structured data, because it is cheap and it removes ambiguity. Do not expect it to earn a recommendation on its own, and do not pay anyone who says it will.
The real work is consistency across the web: the same name, phone, trade, service area, and license on your site, your Business Profile, and every directory the engines cite for your trade. That work is tedious, it has to be checked against the sources each engine actually reads, and it has to be rechecked, because directories can change a listing without telling you. Our citation study shows which sites those are for Phoenix contractors, and llms.txt and AI crawler access covers the other half of being readable: letting the crawlers in.
Notes
- Google says no special schema.org markup or AI text files are needed for AI Overviews/AI Mode, but recommends structured data match visible text and that Business Profile and Merchant Center information be up to date. Google Search Central, Dec 10, 2025; checked Sep 27, 2026. AI features and your website ↩
- Google states there are no additional requirements or special optimizations to appear in AI Overviews or AI Mode; a page must be indexed and eligible to show with a snippet. Google Search Central, Dec 10, 2025; checked Sep 27, 2026. AI features and your website ↩
- Across 6.8 million AI citations from ChatGPT, Gemini and Perplexity on location-specific queries, 86% came from sources brands control or manage: websites (44%), listings (42%) and reviews/social (8%). Yext, Oct 9, 2025; checked Sep 27, 2026. Yext Research: 86% of AI Citations Come from Brand-Managed Sources, Clarifying How Marketers Can Compete in the AI Search Era ↩
- The window and door business with the highest AI share of voice in Phoenix: Renewal by Andersen. 86 answers from 2 engines, week of Sep 21, 2026. See the data ↩