# Service/product scope machine-readable

> Service/product scope machine-readable: An agent must be able to answer "what does this site offer, and to whom". The fix: add a service scope schema.

- Source: /checks/service-schema
- Site: AgenticWebScore
- Language: English

---
An agent must be able to answer "what does this site offer, and to whom".

| Property | Value |
| --- | --- |
| Check id | `service-schema` |
| Dimension | Protocol Discovery (25%) |
| Tier | Recommended — pool 20 pts |
| Weight inside tier | 2 |
| Impact | High |
| Maturity | Draft — A published specification that is not yet ratified. |
| Conditional | No |
| Publishing skill | `service-schema` |
| Standards | — |

## What is measured

The scanner reads the homepage JSON-LD and looks for a schema.org statement of what is offered and to whom: a Service (or Product) node with serviceType or category, a provider, and areaServed or audience. It passes when such a node names the service type, the provider organization and the served area or audience; it partially passes when only a generic Organization or WebSite node is present, so an agent cannot tell what is offered or which customers it is for.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN=https://your-domain.example
curl -sS "$DOMAIN/" | tr -d '\n' | grep -oE '"@type":"(Service|Product|ProfessionalService|Organization)"|"(serviceType|category|provider|areaServed|audience)":' | sort -u
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```json
{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Agent readiness audit",
  "serviceType": "Website agent-readiness audit and remediation",
  "category": "Consulting",
  "provider": { "@type": "Organization", "name": "Example Inc.", "url": "https://your-domain.example" },
  "areaServed": [
    { "@type": "Country", "name": "United States" },
    { "@type": "Country", "name": "Germany" }
  ],
  "audience": { "@type": "BusinessAudience", "name": "E-commerce and SaaS teams" },
  "termsOfService": "https://your-domain.example/terms",
  "availableChannel": {
    "@type": "ServiceChannel",
    "serviceUrl": "https://your-domain.example/contact",
    "availableLanguage": ["en", "de"]
  }
}
```

> Give provider a full Organization node with name and url rather than a bare string, and list every audience and region you serve, because agents filter on areaServed and audience before they read any page.

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `mcp-card` — MCP server card | Essential | High | — |
| `openapi` — OpenAPI definition | Essential | High | — |
| `oauth-discovery` — OAuth discovery documents | Essential | High | — |
| `api-catalog` — API catalog | Recommended | Medium | — |
| `agent-skills` — Agent Skills declaration | Recommended | Medium | — |
| `a2a-card` — A2A agent card | Recommended | Medium | — |
| `a2a-signed` — Cryptographically signed agent card | Emerging | Medium | — |
| `auth-md` — /auth.md agent authentication guide | Emerging | Medium | — |
