AggregateOffer
AggregateOffer is an Offer subtype for summarizing multiple offers for the same product. It has 3 properties of its own: lowPrice (cheapest available price), highPrice (most expensive), and offerCount (how many sellers have the product). Google reads AggregateOffer to show a price range in the Product snippet: "From $34 to $49, 5 sellers."
The type hierarchy is Thing → Intangible → Offer → AggregateOffer. Use it when a product is sold by multiple retailers at different prices and you want to show the range. If you sell the product yourself at one price, use a regular Offer instead.
Full example of schema.org/AggregateOffer json-ld markup
The markup is verified as valid with Rich Results Test from Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "XooTee Classic",
"@id": "https://xoocode.com/shop/xootee-classic#product",
"image": "https://xoocode.com/shop/xootee/xootee-classic-front.jpg",
"description": "Premium cotton t-shirt printed with Jane Xoo's 1945 handwritten notes.",
"brand": { "@id": "https://xoocode.com#organization" },
"offers": {
"@type": "AggregateOffer",
"lowPrice": "425.00",
"highPrice": "595.00",
"priceCurrency": "DKK",
"offerCount": 4,
"availability": "https://schema.org/InStock"
}
}
</script>lowPrice and highPrice
lowPrice and highPrice take a Number or Text. Use numbers without currency symbols: "34.00" not "$34.00". Set priceCurrency (inherited from Offer) to the three-letter ISO 4217 code. Google shows the range as "From $34 to $49" in the product snippet.
offerCount
offerCount is the number of individual offers aggregated. If 5 sellers list the product, set offerCount to 5. Google may display "5 sellers" alongside the price range. This gives shoppers a sense of availability and competition.
AggregateOffer vs multiple Offers
If you list each seller individually (with their own price, URL, and availability), use an array of Offer objects on the Product. If you summarize across sellers without listing each one, use AggregateOffer. Price comparison sites often use AggregateOffer for the summary and link to individual retailer pages. A manufacturer's product page might use AggregateOffer when the product is sold through a retail network.
Minimal valid version
The smallest markup that still produces a valid AggregateOffer 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.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "XooTee Classic",
"offers": {
"@type": "AggregateOffer",
"lowPrice": "425.00",
"highPrice": "595.00",
"priceCurrency": "DKK",
"offerCount": 4
},
"image": "https://xoocode.com/shop/xootee/xootee-classic-front.jpg"
}
</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.
- Google docsProduct snippet (price range)primary
Common AggregateOffer 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.
- 01
Currency symbols in lowPrice/highPrice
Wrong"lowPrice": "$425.00"Right"lowPrice": "425.00", "priceCurrency": "DKK"lowPrice and highPrice take plain numbers without currency symbols. Set the currency separately in priceCurrency using the ISO 4217 code. Google cannot parse "$425" as a structured price.
- 02
AggregateOffer for a single-seller product
Wrong"@type": "AggregateOffer" when you are the only sellerRightUse "@type": "Offer" with a single price for single-seller productsAggregateOffer implies multiple sellers with a price range. Using it for your own single-price product is misleading. The price range (lowPrice to highPrice) only makes sense when there are actually multiple prices to aggregate.
- 03
Missing offerCount
WrongAggregateOffer with lowPrice and highPrice but no offerCountRight"offerCount": 4offerCount tells users how many sellers offer the product. Google may display this alongside the price range. Without it, the range lacks context: is the price spread across 2 sellers or 200?
Schema properties in this example
About the example data
The XooTee Classic is sold by multiple retailers through the Xoo Marketplace. The AggregateOffer summarizes the price range across all sellers.
Comments
Loading comments...