In beta, with limited placesOpen to everyone in Q1 2027

↑↓ to move · Enter to open · Esc to close

Structured data

What is AggregateOffer in Schema.org?

AggregateOffer is the Schema.org type that sums up several offers for the same product in a single node, with the lowest price, the highest price and the number of offers, for example when several merchants sell the same model. It is a kind of Offer, and Google asks you not to use it to describe the sizes or colors of a product page.

Written by
Reviewed by
Published 6 min read
Takeaway:

Key takeaways

  • AggregateOffer sums up several offers for the same product: the lowest price (lowPrice), the highest (highPrice) and how many there are (offerCount).
  • It is a subtype of Offer meant for when different merchants sell the same item, as on a comparison site.
  • Google asks you not to use it for a set of variants: sizes and colors go in a product group, each with its own offer.
  • Product snippets accept it and require lowPrice and priceCurrency; merchant listings do not, they only accept Offer.

AggregateOffer usually turns up behind one specific question: I have a T-shirt that costs one price in size S and another in XXL, so how do I tell Google "from $X"? Google's answer is that AggregateOffer is not the way. It is a type from Schema.org, and it has nothing to do with an offer in the sense of a promotion: "aggregate" means it sums up several. It matters to you because it is an easy mistake in the structured data of a store with product variants, and because, placed on the wrong page, it shuts the door on one of the two kinds of product rich results Google has.

How it works

Schema.org defines AggregateOffer for when a single product is associated with several offers, and gives the example of the same pair of shoes sold by different merchants. It descends from Offer, so it is an offer that sums up other offers, and it adds four properties of its own:⁠[1]Schema.org. AggregateOffer

Property What it says
lowPrice The lowest price among all the available offers
highPrice The highest price among all the available offers
offerCount The number of offers for the product
offers The offers it sums up, if you want to detail them one by one

Google takes the type and narrows it. In its product snippet documentation it describes it as a kind of Offer that represents the sum of other offers, which can be used, for example, for a product sold by several merchants, and adds a line worth reading twice: do not use AggregateOffer to describe a set of variants of a product.⁠[2]Google Search Central. Product snippet (Product, Review, Offer) structured data

When it is used, Google asks for two properties: lowPrice and priceCurrency, the currency in three-letter ISO 4217 format. It recommends two more: highPrice and offerCount.⁠[2]Google Search Central. Product snippet (Product, Review, Offer) structured data

And there is a Google experience it does not unlock. Of the two ways Google presents a product, product snippets accept Offer or AggregateOffer, but merchant listings require Offer, because to qualify for them the merchant has to be the one selling the product.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data A store that marks up its own product page with AggregateOffer is describing a comparison site, not a store.

Variants have their own path. Google asks for a ProductGroup that gathers the variants with hasVariant, says with variesBy what changes between them (size, color) and carries the parent product's reference in productGroupID; each variant is a Product with its own offer and its own price.⁠[4]Google Search Central. Product variant (ProductGroup, Product) structured data The price range, in that model, is not written: it is worked out from each variant's offers.

In a store

Two pages, two kinds of markup. Fictional example: the stores, the product, the prices and the number of offers are made up.

The first is a comparison site that shows the same espresso maker in several stores. There AggregateOffer fits: the comparison site does not sell, it sums up.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Lucia stovetop espresso maker, 6 cups",
  "offers": {
    "@type": "AggregateOffer",
    "lowPrice": "24.90",
    "highPrice": "32.50",
    "priceCurrency": "USD",
    "offerCount": "5"
  }
}

The second is the product page of a store that sells that espresso maker in two sizes, each at its own price. There what fits is a group with one offer per variant, as Google describes for variants:⁠[4]Google Search Central. Product variant (ProductGroup, Product) structured data

{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Lucia stovetop espresso maker",
  "productGroupID": "LUCIA",
  "variesBy": "https://schema.org/size",
  "hasVariant": [
    {
      "@type": "Product",
      "name": "Lucia stovetop espresso maker, 3 cups",
      "sku": "LUCIA-3",
      "size": "3 cups",
      "offers": { "@type": "Offer", "price": "22.90", "priceCurrency": "USD" }
    },
    {
      "@type": "Product",
      "name": "Lucia stovetop espresso maker, 6 cups",
      "sku": "LUCIA-6",
      "size": "6 cups",
      "offers": { "@type": "Offer", "price": "27.90", "priceCurrency": "USD" }
    }
  ]
}

The difference is not a matter of style. In the first case, the page says "there are five offers for this product between this price and that price," which is true on a comparison site. In the second, the page sells, and each size is a product with its price: writing it as a range with AggregateOffer would be describing variants, which is exactly what Google asks you not to do,⁠[2]Google Search Central. Product snippet (Product, Review, Offer) structured data and it would leave the product page out of merchant listings.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data Both snippets are trimmed examples: a real product page also carries the image, the availability and the rest of the properties each experience asks for.

Warning:

What gets mixed up

Using AggregateOffer to show the price range of the sizes or colors on your own product page. It looks made for that, because it has a lowest and a highest price, but Google expressly rules it out for sets of variants,⁠[2]Google Search Central. Product snippet (Product, Review, Offer) structured data and on a page that sells, merchant listings only accept Offer.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data

How to check

  1. Search for "AggregateOffer" in the source code of your product pages. If it does not appear, this term does not affect you; if it does, keep going.
  2. See where lowPrice and highPrice come from. If they are the prices of your own sizes or colors, the markup describes variants, and Google asks you not to do that with this type.⁠[2]Google Search Central. Product snippet (Product, Review, Offer) structured data
  3. Run the URL through the Rich Results Test and note which experiences it detects. A page where people buy should be able to qualify for a merchant listing, and for that the offer has to be an Offer.⁠[5]Search Console Help. Rich Results Test⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data
  4. If your page does compare sellers, check that it carries lowPrice and priceCurrency, which are required, and add highPrice and offerCount, which Google recommends.⁠[2]Google Search Central. Product snippet (Product, Review, Offer) structured data

The underlying confusion is not between AggregateOffer and Offer, which the Offer entry already separates, but between summing up offers and grouping variants. AggregateOffer sums up offers for a single product, usually from different sellers.⁠[1]Schema.org. AggregateOffer ProductGroup groups products that differ only in something like size or color, and each one carries its own offer.⁠[4]Google Search Central. Product variant (ProductGroup, Product) structured data If your page has a size selector, the word you are looking for is ProductGroup; if it has a list of stores selling the same thing, it is AggregateOffer.

To go further, the structured data reading path lays out the rest of the terms, and the guide to auditing a product page's structured data walks through a product page with variants property by property.

Synonyms

English
aggregate offer, aggregate offer schema
Español
oferta agregada

Sources

  1. [1] Schema.org. AggregateOffer. Accessed . ↑ ↑
  2. [2] Google Search Central. Product snippet (Product, Review, Offer) structured data. Accessed . ↑ ↑ ↑ ↑ ↑ ↑
  3. [3] Google Search Central. Merchant listing (Product, Offer) structured data. Accessed . ↑ ↑ ↑ ↑
  4. [4] Google Search Central. Product variant (ProductGroup, Product) structured data. Accessed . ↑ ↑ ↑
  5. [5] Search Console Help. Rich Results Test. Accessed . ↑

Change history

  • First English version.

This definition is published under CC BY 4.0. Reuse this definition freely, crediting Clione with a link to this page.

Make your catalog easy for bots to read

Clione fills every product page with what bots read best: the JSON-LD graph with its structured data, the meta description and the FAQs. You review and press Push; then we check your live store so it all stays published.