XooCode(){

CompoundPriceSpecification

CompoundPriceSpecification is the PriceSpecification subtype for prices that are the sum of several components: airline fares that break into base fare, fuel surcharge, taxes, and airport fees; hotel stays that break into room rate, resort fee, and city tax; ticket prices that break into face value, booking fee, and facility charge.

It adds 2 direct properties: priceComponent (one or more UnitPriceSpecification blocks, each typed via priceComponentType = "BasePrice" | "Tax" | "Surcharge" | "Installment" | "ActivationFee" | "CleaningFee" etc.) and priceType (a free-text qualifier such as "MSRP" or "InvoicePrice").

Full example of schema.org/CompoundPriceSpecification json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/CompoundPriceSpecification
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Offer",
  "itemOffered": { "@type": "Event", "name": "Xoo Code Quarterly at The Thunderdome", "startDate": "2026-06-14T19:00:00-04:00" },
  "priceSpecification": {
    "@type": "CompoundPriceSpecification",
    "price": 42.00,
    "priceCurrency": "USD",
    "priceType": "TotalPrice",
    "valueAddedTaxIncluded": true,
    "priceComponent": [
      {
        "@type": "UnitPriceSpecification",
        "priceComponentType": "https://schema.org/BasePrice",
        "price": 35.00,
        "priceCurrency": "USD"
      },
      {
        "@type": "UnitPriceSpecification",
        "priceComponentType": "https://schema.org/Surcharge",
        "price": 5.00,
        "priceCurrency": "USD",
        "description": "Facility fee"
      },
      {
        "@type": "UnitPriceSpecification",
        "priceComponentType": "https://schema.org/Tax",
        "price": 2.00,
        "priceCurrency": "USD",
        "description": "Pennsylvania state entertainment tax"
      }
    ]
  }
}
</script>

Why this matters for transparency

Regulators in the EU, UK, and a growing list of US states require all-in pricing disclosure. CompoundPriceSpecification lets you publish the headline total and the component breakdown in the same structured block, so price-comparison engines and knowledge-graph consumers can both show the full price and the breakdown.

Minimal valid version

The smallest markup that still produces a valid CompoundPriceSpecification entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/CompoundPriceSpecification (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CompoundPriceSpecification",
  "price": 42.00,
  "priceCurrency": "USD",
  "priceComponent": [
    { "@type": "UnitPriceSpecification", "priceComponentType": "https://schema.org/BasePrice", "price": 35.00, "priceCurrency": "USD" },
    { "@type": "UnitPriceSpecification", "priceComponentType": "https://schema.org/Tax", "price": 2.00, "priceCurrency": "USD" }
  ]
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

  • Product / Offer rich result (via containing Offer)
    Google docs

Common CompoundPriceSpecification mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Components that do not sum to the headline

    Wrong
    Headline price 42, components summing to 41
    Right
    Keep the headline price equal to the sum of priceComponent entries

    Mismatched totals are flagged by price-comparison engines and cause the structured data to be ignored.

  2. 02

    priceComponentType as free text

    Wrong
    "priceComponentType": "tax"
    Right
    The enumeration URL https://schema.org/Tax

    priceComponentType is a PriceComponentTypeEnumeration; free text bypasses the vocabulary.

  3. 03

    CompoundPriceSpecification nested inside itself

    Wrong
    priceComponent contains another CompoundPriceSpecification
    Right
    priceComponent items should be UnitPriceSpecification (or plain PriceSpecification) blocks

    Consumers expect flat component lists. Nesting compounds inside compounds confuses totalling logic.

Also mentioned in 1 other example

CompoundPriceSpecification also appears in TaxiService. See the full CompoundPriceSpecification schema page for every reference.

About the example data

A Thunderdome ticket priced at $42 total: $35 face value + $5 facility fee + $2 state entertainment tax.

Comments

Loading comments...

Leave a comment