How can a home-service company describe an offer catalogue in Schema.org?

The Citead team, updated

In short. Use Service with provider and hasOfferCatalog, then describe each offering through Offer.itemOffered and its access through availableChannel.

Definition: Schema.org defines Service as a service provided by an organization. A home-service company can connect a service to its provider with provider, group its offers with hasOfferCatalog, and describe ways to access each service with availableChannel.

Key facts

  • As of October 2026, Schema.org's Service documentation accepts an Organization or Person as the value of provider.
  • Schema.org defines OfferCatalog as a list of related offers or further catalogues from the same provider.
  • The itemOffered property connects an Offer to the item offered and accepts Service as a value.
  • A ServiceChannel describes access to a service through a website, telephone number or location.

How do the company, catalogue and individual services connect?

Schema.org's home-cleaning example places provider and hasOfferCatalog on a Service. The provider is represented as a LocalBusiness, named ACME Home Cleaning in the example. The catalogue contains separate groups for house cleaning and one-time services.

An Offer describes an offer to provide something, including performing a service. Within each offer, itemOffered describes the particular service. The example uses separate service objects for apartment light cleaning and window washing, among other offerings.

The OfferCatalog definition permits further catalogues inside a catalogue. Its itemListElement property holds the entries. This supports a catalogue grouped by service family, with individual offers inside each group. A catalogue can also be attached directly to an Organization through hasOfferCatalog.

The following JSON-LD, a format for expressing structured data, shortens the cleaning example and adds service access channels. ACME Home Cleaning comes from Schema.org's illustrative example; the example.com addresses are placeholders for actual access pages.

{
  "@context": "https://schema.org/",
  "@type": "Service",
  "serviceType": "Home cleaning",
  "provider": {
    "@type": "LocalBusiness",
    "name": "ACME Home Cleaning"
  },
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Cleaning services",
    "itemListElement": [
      {
        "@type": "Offer",
        "itemOffered": {
          "@type": "Service",
          "name": "Window washing",
          "availableChannel": {
            "@type": "ServiceChannel",
            "serviceUrl": "https://example.com/window-washing"
          }
        }
      },
      {
        "@type": "Offer",
        "itemOffered": {
          "@type": "Service",
          "name": "Carpet cleaning",
          "availableChannel": {
            "@type": "ServiceChannel",
            "serviceUrl": "https://example.com/carpet-cleaning"
          }
        }
      }
    ]
  }
}

Where do booking and contact channels belong?

Schema.org's ServiceChannel documentation defines serviceUrl as the website used to access the service. In this model, a service-specific booking or request page belongs inside that service's availableChannel object.

For telephone access, servicePhone expects a ContactPoint object. For a place where someone can go to access the service, serviceLocation expects a Place. A channel can also specify availableLanguage, which accepts a language name or a Language object.

The Service documentation separately defines areaServed as the geographical area where the service is provided. Its cleaning example represents Massachusetts as a State under areaServed. The service territory and the channel's access location therefore have separate properties.

What should the website show alongside the markup?

As of October 2026, Google's general structured data guidelines require marked-up content to be visible to readers and relevant to the page's focus. The company name and individual cleaning offers in the markup must therefore match the page's content. Google also requires current information and recommends JSON-LD among its supported structured data formats.

FAQ

Can I attach the catalogue directly to my company?

Yes. Schema.org's OfferCatalog documentation lists Organization, Person and Service as types that can use hasOfferCatalog.

Can I give each service a different access page?

Yes. Schema.org's ServiceChannel documentation defines serviceUrl for accessing a service. Each service's availableChannel can describe its corresponding access page, as illustrated above.

Sources

  1. Schema.org, "Service", undated
  2. Schema.org, "OfferCatalog", undated
  3. Schema.org, "itemOffered", undated
  4. Schema.org, "ServiceChannel", undated
  5. Google Search Central, "General structured data guidelines", undated

Check how a page reads to answer engines. Open the GEO score analyzer

Test a page and see what to fix first

The analysis usually takes less than 10 seconds and needs no account.

400,000+ pages scored in the public benchmark