contactPoint
contactPoint · Recommended
Appears in
What is it?
contactPoint is a structured way to describe how an organization can be contacted, including the type of contact, phone number or email, hours of availability, and supported languages. It is more structured than plain telephone or email fields because it groups contact information with context, who the contact is for, when it is available, and what language it supports.
The field expects a ContactPoint object (or an array of ContactPoint objects for multiple contact channels).
Why this matters for AEO
When a user asks "how do I contact [company] for support?" or "what is [company]'s sales number?", AI answer engines benefit from knowing which type of contact corresponds to which purpose. A single phone number is ambiguous, contactPoint with contactType: "customer support" removes that ambiguity.
Google's Knowledge Panel surfaces contact information including phone numbers and contact types. For voice assistants responding to "call [company]'s customer service", the contactType field routes the intent correctly. Organizations with multiple departments (support, billing, sales) benefit most from contactPoint arrays, which give AI systems the granularity to answer department-specific contact queries.
What the specs say
Schema.org:contactPoint expects ContactPoint. "A contact point for a person or organization." [Source: https://schema.org/contactPoint]
Google: Recommended for Organization. "The best way for a user to contact your business, if applicable." [Source: https://developers.google.com/search/docs/appearance/structured-data/organization]
ContactPoint sub-fields
contactType— Texttelephone— Textemail— TextfaxNumber— TextavailableLanguage— Language or TextcontactOption— ContactPointOptionhoursAvailable— OpeningHoursSpecificationareaServed— Text or AdministrativeAreaproductSupported— Text
Format and code
Single contact point:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Basecamp",
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"telephone": "+18005550100",
"email": "support@basecamp.com",
"availableLanguage": "English"
}
}
Multiple contact points:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Shopify",
"contactPoint": [
{
"@type": "ContactPoint",
"contactType": "customer support",
"telephone": "+18888168123",
"availableLanguage": ["English", "French", "Spanish"],
"contactOption": "TollFree"
},
{
"@type": "ContactPoint",
"contactType": "sales",
"telephone": "+18888160783",
"availableLanguage": "English"
}
]
}
With hours of availability:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "HubSpot",
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"telephone": "+18884827768",
"hoursAvailable": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
}
}
}
Invalid, missing contactType:
{
"@type": "ContactPoint",
"telephone": "+15555550100"
}
contactType is what differentiates contactPoint from a plain telephone field. Always include it.
Webflow implementation
Static pages
Add to Site Settings > Custom Code for the site-wide Organization schema:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company",
"url": "https://yoursite.com",
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"telephone": "+15555550100",
"email": "support@yourcompany.com",
"availableLanguage": "English"
}
}
</script>
CMS template pages
Contact points are typically static per organization. For multi-location CMS sites, each location page may have its own contact point using a CMS embed with bound fields for telephone and email.
In Schema HQ
contactPoint is emitted a ContactPoint builder in the Organization schema configuration. Select the contact type, enter telephone and email, choose supported languages, and Schema HQ generates the correct nested ContactPoint JSON-LD.
Real examples
No live crawl examples were captured. Shopify :
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Shopify",
"url": "https://shopify.com",
"contactPoint": [
{
"@type": "ContactPoint",
"contactType": "customer support",
"telephone": "+18888168123",
"contactOption": "TollFree",
"availableLanguage": ["English", "French"]
},
{
"@type": "ContactPoint",
"contactType": "sales",
"telephone": "+18888160783"
}
]
}
Related fields
- telephone — primary phone number (simpler alternative)
- email — primary email address
- faxNumber — fax contact number
- areaServed — geographic service area
- name — organization name
FAQ
What values are valid for contactType?
Schema.org supports a controlled vocabulary for contactType. Recognized values include: "customer support", "technical support", "billing support", "bill payment", "order support", "subscriptions", "credit card support", "emergency", "baggage tracking", "reservations", "sales". Use values from this list for maximum interoperability.
Is contactPoint better than having separate telephone and email on Organization?
Both can coexist. telephone and email directly on Organization are simpler and sufficient for basic contact information. contactPoint adds semantic context (contact type, language, hours). For organizations with multiple contact channels or types, contactPoint provides granularity that plain telephone cannot.
Can I have more than one contactPoint?
Yes. Provide an array of ContactPoint objects for each distinct contact channel. Google's documentation acknowledges multiple contact points. Each should have a different contactType to avoid ambiguity.