ServicesAI Audit
← Back to Blog

How to Use ContactPoint Schema to Help AI Route Enquiries

Schema MarkupContactPoint SchemaJSON-LDAI VisibilityLLM SEOStructured DataAI Search
Woman in a call center providing customer support with a headset and laptop.

If a potential customer asks ChatGPT "how do I contact [your brand]?" and the AI either returns nothing, returns the wrong number, or points people to a competitor, you have a structured data problem. ContactPoint schema is one of the most overlooked fixes in the AI visibility toolkit, and it is surprisingly straightforward to implement correctly.

This post walks through exactly how ContactPoint schema works, how to write it, how AI engines interpret it, and the common mistakes that silently break it. Whether you run a single-location e-commerce brand or a multi-department business with different lines for sales, support, and press, the logic is the same.

What ContactPoint Schema Actually Tells AI Engines

ContactPoint is a schema.org type that sits inside a parent entity, usually an Organization or LocalBusiness. It tells machines not just that you have a phone number, but what that number is for, who should use it, which languages it supports, and when it is available.

That distinction matters a great deal for AI search. When someone asks Perplexity "what is the customer service number for [brand]?", the AI is not scraping your footer. It is parsing structured signals from your markup, your Knowledge Graph presence, and any other machine-readable data it has indexed. If your ContactPoint is either missing or vague, the AI either guesses, pulls stale data from somewhere else, or simply declines to answer.

Google has used ContactPoint data in Knowledge Panels for years. The newer generation of AI assistants, including ChatGPT with browsing enabled and Gemini, have inherited similar parsing behaviours. Giving them clean, complete ContactPoint markup reduces the chance of a hallucinated or outdated answer reaching your potential customers.

The Core Properties You Need to Include

A minimal ContactPoint that actually does something useful needs at least four properties. Here is what each one contributes:

contactType

This is the single most important property and the one most people skip. The contactType tells the AI what this contact method is for. Schema.org recommends values like customer support, sales, technical support, billing support, bill payment, order support, and emergency. Use plain English strings that match these conventions. If you write general enquiries instead of customer support, you are gambling on whether the AI parser maps your custom string to the right intent.

telephone

Format this in full international format: +44-20-7946-0958, not 020 7946 0958. AI parsers and voice assistants are significantly more reliable when they receive a properly formatted E.164-style number. The hyphens are optional but aid readability in the raw JSON.

availableLanguage

This matters more than most people think. If your support line is English-only, say so. If you have a Spanish-speaking line, mark it. AI engines increasingly use this to route multilingual queries to the right contact. Use a Language object or a plain string like English.

hoursAvailable

Use OpeningHoursSpecification nested inside ContactPoint to define when each contact method is live. An AI that knows your sales line closes at 17:30 on Fridays will not recommend calling it on a Saturday morning. That is good for users and good for your brand.

A Working JSON-LD Example

Here is a real-world example for an e-commerce brand with two contact points: customer support and a wholesale sales line.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Bramble & Birch",
  "url": "https://www.brambleandbirch.co.uk",
  "contactPoint": [
    {
      "@type": "ContactPoint",
      "telephone": "+44-800-123-4567",
      "contactType": "customer support",
      "areaServed": "GB",
      "availableLanguage": "English",
      "hoursAvailable": {
        "@type": "OpeningHoursSpecification",
        "dayOfWeek": [
          "Monday", "Tuesday", "Wednesday",
          "Thursday", "Friday"
        ],
        "opens": "09:00",
        "closes": "17:30"
      }
    },
    {
      "@type": "ContactPoint",
      "telephone": "+44-800-765-4321",
      "contactType": "sales",
      "areaServed": "GB",
      "availableLanguage": "English",
      "hoursAvailable": {
        "@type": "OpeningHoursSpecification",
        "dayOfWeek": [
          "Monday", "Tuesday", "Wednesday",
          "Thursday", "Friday"
        ],
        "opens": "08:30",
        "closes": "18:00"
      }
    }
  ]
}
</script>

Notice the array structure for contactPoint. You can include as many ContactPoint objects as you have distinct lines. Each one should have a different contactType so parsers can distinguish them clearly.

Adding Email and URL-Based Contact Methods

Phone numbers are only part of the picture. Many e-commerce brands handle the majority of enquiries through email or a web form. ContactPoint supports both.

email property

Add "email": "support@yourbrand.co.uk" directly to the ContactPoint object alongside the telephone. You can have a ContactPoint with only an email and no telephone, which is perfectly valid for brands that do not offer phone support.

url property for web forms

Use "url": "https://yourbrand.co.uk/contact" within ContactPoint to point AI parsers at your contact form. This is particularly useful for press and media enquiries where you want journalists routed to a specific page rather than a generic inbox.

A press ContactPoint might look like this:

{
  "@type": "ContactPoint",
  "contactType": "press",
  "url": "https://yourbrand.co.uk/press-enquiries",
  "availableLanguage": "English"
}

Where to Place the Schema on Your Site

ContactPoint schema nested inside an Organization block should live on your homepage and your contact page. These are the two pages AI crawlers are most likely to index for entity-level information about your brand.

If you run a Shopify store, the cleanest approach is to add the JSON-LD block to your theme.liquid file inside the <head> tag, scoped to render only on the homepage. On WordPress, a plugin like RankMath or a custom function in functions.php works well, though hand-coding the JSON-LD gives you more precise control over the output.

Avoid placing ContactPoint markup only on inner pages like /faq or /about. Those pages carry less entity authority in AI indexes, and the signal is weaker. Put it where your brand's identity signals are strongest.

If you are not sure how your current structured data is being read, the free AI visibility audit at FlinnSchema will surface any gaps in your ContactPoint and Organisation markup within minutes.

areaServed: Don't Skip It

The areaServed property defines the geographic scope of a contact method. This becomes significant when AI assistants answer location-specific queries. If someone in Australia asks ChatGPT for your contact number and your ContactPoint has "areaServed": "GB", a well-calibrated AI should note the geographic mismatch rather than returning a UK freephone number that may not work internationally.

Use ISO 3166 country codes (GB, US, AU) or schema.org AdministrativeArea objects for finer granularity. For global brands with local numbers in multiple markets, create a separate ContactPoint for each market with its own areaServed, telephone, and availableLanguage.

ContactPoint for Chatbots and Live Chat

This is an area where most guides stop too early. If your site uses a live chat widget or an AI chatbot as a primary support channel, you can represent that as a ContactPoint too. Use "contactType": "customer support" and set the url property to the page where the chat widget launches, or to a dedicated chat URL if your platform provides one.

There is no official schema.org value for "live chat" as a contact type yet, but the combination of a url and a contactType of customer support sends a clear enough signal for current AI parsers. As schema.org evolves, this may become more formalised.

Validating Your ContactPoint Markup

After implementation, run your homepage through Google's Rich Results Test and Schema.org's validator at validator.schema.org. Neither tool will tell you definitively how an AI engine will interpret your markup, but they will catch structural errors, missing required properties, and malformed JSON that would prevent parsing entirely.

Pay particular attention to:

  • Mismatched quotation marks or trailing commas in the JSON (both will silently break parsing)
  • The contactType value being absent or using non-standard strings
  • The telephone number not being in international format
  • The hoursAvailable block using 12-hour time instead of 24-hour ISO format

For a deeper look at the kinds of errors that quietly undermine your AI visibility, the common schema markup mistakes post on the FlinnSchema blog is worth reading alongside this one.

How This Connects to Your Wider Entity Presence

ContactPoint does not work in isolation. It is one signal inside a broader Organisation entity that AI engines use to build their understanding of your brand. The more complete and consistent that entity is across your structured data, your Google Business Profile, your Wikidata entry (if you have one), and your social profiles, the more confidently AI engines will return accurate contact information.

Think of it this way: AI engines are pattern-matching machines. If your JSON-LD says your support line is +44-800-123-4567, your Google Business Profile says 0800 123 4567, and an old directory listing says 0800 987 6543, the AI sees three conflicting signals and may either pick the most common one or decline to answer. Consistency across all sources is what resolves ambiguity.

This is closely related to the wider principle of using WebSite schema to help AI search identify your brand, where the goal is to make every major signal point to the same coherent entity.

At FlinnSchema, the structured data implementations we build for e-commerce brands always treat ContactPoint as part of a complete Organisation block rather than a standalone addition. The difference in AI citation quality is noticeable.

Frequently Asked Questions

Does ContactPoint schema directly affect Google rich results?

ContactPoint was historically used in Google's Knowledge Panel for large organisations and is part of the sitelinks search box feature. It does not trigger a standalone rich result in search listings the way Product or FAQ schema does. Its primary value is in structured entity data that AI search engines, Knowledge Graph entries, and voice assistants rely on for accurate business information.

Can I use ContactPoint on a Shopify store without a developer?

Yes, with some caveats. You can add a JSON-LD block directly to your theme.liquid file in the Shopify theme editor without touching any backend code. The block goes inside the <head> tags. If you are not comfortable editing theme files, some Shopify SEO apps allow custom JSON-LD injection. The key is to make sure the markup only appears once per page and is not duplicated by your theme's existing structured data output.

How many ContactPoint objects can I include in one Organisation block?

There is no hard limit set by schema.org. In practice, including more than six or seven ContactPoint objects in a single Organisation block can reduce signal clarity, as parsers may struggle to weight them appropriately. Prioritise your highest-traffic contact methods: customer support, sales, and billing support. If you have a large enterprise with many departments, consider whether a sub-organisation structure using the department property might be cleaner than a long array of ContactPoints on a single entity.

Will AI search engines update their answers immediately after I add ContactPoint schema?

No. Recrawl cycles vary between engines. Google typically recrawls high-authority pages within a few days to a couple of weeks. AI engines like ChatGPT and Perplexity operate on training data or crawl indexes that may refresh on longer cycles, sometimes months. This is why consistent structured data across all your online presence matters: the AI is synthesising signals from multiple sources, and the more consistently your contact information appears across them, the faster and more reliably it will be updated in AI responses.

Want to check your AI visibility?

Run a free audit on your website and see how visible you are to ChatGPT, Perplexity, and other AI search engines.

Run Free Audit