schema.org/AggregateOfferRich result eligible
AggregateOffer schema
A price range across several offers, used where a product has multiple tiers.
Where to use it
Pricing pages with several tiers.
A complete example
Valid as written, with every required property and the recommended ones that carry real information.
aggregate-offer.json
{
"@context": "https://schema.org",
"@type": "AggregateOffer",
"lowPrice": "99.00",
"priceCurrency": "USD",
"highPrice": "799.00",
"offerCount": 4,
"offers": {
"@type": "Offer",
"price": "249.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://www.seoforsolos.com/pricing"
}
}Properties
| Property | Status |
|---|---|
lowPrice | Required |
priceCurrency | Required |
highPrice | Recommended |
offerCount | Recommended |
offers | Recommended |
The three mistakes this type attracts
- 01offerCount disagreeing with the number of offers listed.
- 02lowPrice above highPrice, usually from an unsorted array.
- 03Using it for a single offer, where Offer is correct.
Related types
Where this appears in the playbook
- Structured data: what each type is for and which ones earned their place.
- The schema graph: composing types into one graph with stable identifiers.
- One JSON-LD script per page, holding one @graph
- Stable @id anchors that cross-reference rather than duplicate
- Optional fields are omitted, never emitted as empty strings
Questions
What is the AggregateOffer schema type for?
A price range across several offers, used where a product has multiple tiers. Use it on: pricing pages with several tiers.
Which AggregateOffer properties are required?
AggregateOffer requires 2 properties: lowPrice, priceCurrency. It also recommends 3: highPrice, offerCount, offers.
Does AggregateOffer produce a rich result?
AggregateOffer is eligible for a Google rich result when its required properties are present and valid. A validation error therefore has a visible cost in the search result itself.
What is the most common AggregateOffer mistake?
The most common AggregateOffer mistake is: offerCount disagreeing with the number of offers listed.