Business and store details AI agents can trust: Organization and LocalBusiness data
Usually fixed by: Developer · Typical effort: days
Before an AI agent recommends a store, it wants to know who it's dealing with: the business name, how to contact it, where it ships from, when it's open, and what happens if something goes back. Organization data puts those facts in one place, in a form an agent can read without piecing them together from your footer.
Why business details matter to AI agents
People ask AI assistants questions like "is this a real shop?", "do they have a phone number?", "are they open on Sunday?" and "can I return it if it doesn't fit?". To answer, an agent has to find those facts somewhere on your site. Usually they're scattered: the phone number in the footer, the address on a contact page, the returns window in a policy page, the opening hours in an image.
An agent can often work it out, but every guess is a chance to get it wrong or to give up and recommend someone whose details are easier to confirm. Structured data about your business gives it one trusted summary, on the page it's most likely to visit first: your home page.
Product markup describes what you sell. Organization markup describes who is selling it. Agents use both. For products, see product data that AI shopping agents can read.
Pick the right type
Schema.org has a family of types for businesses. Use the most specific one that's true.
| Type | Use it when |
|---|---|
Organization | The general case: any company, brand or nonprofit |
OnlineStore | You sell online and have no shop customers can walk into. It's a more specific kind of Organization |
LocalBusiness or a subtype such as Store | Customers can visit you at a physical address, such as a shop, showroom or clinic |
If you have an online store and physical shops, describe the company as an Organization or OnlineStore on the home page, and give each shop its own LocalBusiness (or Store) markup on its own location page, with its own address and hours.
A complete example
Here's JSON-LD for the home page of a fictional online coffee store. It goes in the page's HTML, inside the <head> or <body>:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "OnlineStore",
"@id": "https://northwind.example/#organization",
"name": "Northwind Coffee",
"legalName": "Northwind Coffee Ltd",
"url": "https://northwind.example/",
"logo": "https://northwind.example/images/logo.png",
"description": "Specialty coffee roasted to order and shipped across the US.",
"email": "help@northwind.example",
"telephone": "+1-555-010-0199",
"address": {
"@type": "PostalAddress",
"streetAddress": "120 Harbor Street",
"addressLocality": "Portland",
"addressRegion": "OR",
"postalCode": "97201",
"addressCountry": "US"
},
"contactPoint": [{
"@type": "ContactPoint",
"contactType": "customer service",
"email": "help@northwind.example",
"telephone": "+1-555-010-0199",
"availableLanguage": ["en"],
"hoursAvailable": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "17:00"
}
}],
"sameAs": [
"https://www.instagram.com/northwindcoffee.example",
"https://www.linkedin.com/company/northwind-coffee-example"
],
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn",
"merchantReturnLink": "https://northwind.example/returns"
}
}
</script>
What each part tells an agent
- Name, legal name, URL and logo. Confirms which business this is, and that this website belongs to it. Use the name customers know you by in
name, and your registered company name inlegalName. - Contact points. A
ContactPointfor each way to reach you, withcontactTypesaying what it's for ("customer service", "sales", "technical support"). Add the hours it's staffed and the languages it covers, so an agent can tell someone whether they'll get an answer today. - Address. A full
PostalAddressanswers "where are they based?" and helps an agent judge shipping times and which country's consumer rules apply. Only include it if you're happy for it to be quoted. sameAs. Links to your official profiles elsewhere: social accounts, marketplace storefronts, a Wikipedia or business-register entry. They help an agent connect your site to what others say about you, and make it harder to confuse you with a similarly named business.- Return policy.
hasMerchantReturnPolicyon the organization sets a default for everything you sell. Google added support for return policies at the organization level, so you don't have to repeat it on every product. Product-level policies can still override it where they differ.
Opening hours for places customers visit
For a shop, showroom or other location, the most common question is "are they open now?". Use openingHoursSpecification on the LocalBusiness, one entry per set of days with the same hours:
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00", "closes": "18:00" },
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday", "opens": "09:00", "closes": "16:00" }
]
Leave out days you're closed. For holidays, add an entry with validFrom and validThrough dates, so an agent doesn't send someone to a locked door on December 25. Add geo coordinates and a telephone for each location too.
Rules that keep it trustworthy
- Match what people see. The phone number, address, hours and return window in your markup must match your contact and policy pages. If they disagree, an agent can't tell which is right, and may say so.
- One source of truth. Generate the markup from the same settings as your footer and contact page, so a change in one place updates both. Hand-written markup goes stale the first time your hours change.
- Put it in the HTML. Markup added by a tag manager or other JavaScript after the page loads is invisible to agents that don't run JavaScript.
- Describe it once. Use a stable
@id(likehttps://northwind.example/#organization) so other markup on your site, such as a product'sbrandor aWebSite'spublisher, can point to the same organization instead of repeating it. - Keep the policy pages too. Markup summarizes; your returns and shipping pages explain. Agents read both. See policy pages AI assistants can quote.
What AgentScore checks
The AgentScore check "Structured data describes your business and products" reads your home page's HTML for schema.org JSON-LD:
- It passes when JSON-LD is in the HTML before any JavaScript runs, and lists the types it found, such as
OrganizationandWebSite. - It warns if the JSON-LD only appears after JavaScript runs, or if the page only has microdata.
- It fails if there's no schema.org structured data on the home page at all.
The check confirms the markup is there and readable. It doesn't judge whether your hours or phone number are right, so validate the content yourself.
How to add it
- See what you have. View your home page's source and search for
application/ld+json. Many platforms and themes already output a basicOrganizationblock with just a name and logo. - Collect the facts. Ask customer service for the contact details and hours they actually want shared, and check the return window against your current policy.
- Extend the markup. Your developer can extend the theme template, or an SEO app or plugin can add the fields. Prefer one that reads from your store settings.
- Validate. Run the page through the Schema Markup Validator, and Google's Rich Results Test for the fields Google uses.
- Re-check after changes. Add "update the structured data" to the checklist for changing hours, phone numbers or policies.
Business details are one part of being readable to AI agents. For the rest, see the agent readiness guide, and for the details shoppers ask about most, reviews and ratings AI agents can read.