Offer is the Schema.org type for an offer to sell or provide a product or service. It is rarely used alone; it sits in the offers property of a Product, SoftwareApplication, Event or Course. AggregateOffer summarizes several offers with a lowPrice and highPrice. Google relies on Offer details for price and availability in product, app and event features.
Core properties
- price: a number, without currency symbols; use 0 for free
- priceCurrency: a three-letter ISO 4217 code such as USD or EUR
- availability: a Schema.org value such as InStock or PreOrder
- url: the page where the offer can be taken up
- priceValidUntil: the date after which the price may change
- priceSpecification: for detail such as billing period or tax
Subscriptions and plans
SaaS pricing is usually recurring. A UnitPriceSpecification with a billingDuration or referenceQuantity can describe a monthly or annual price. Google's documentation does not describe special handling for subscription pricing in software app results, so keep the main price field simple and accurate and add detail in priceSpecification.
"offers": {
"@type": "Offer",
"price": "19.00",
"priceCurrency": "USD",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "19.00",
"priceCurrency": "USD",
"referenceQuantity": { "@type": "QuantitativeValue",
"value": "1", "unitCode": "MON" }
}
}AggregateOffer for tiered pricing
When a product has several plans, AggregateOffer with lowPrice, highPrice and offerCount summarizes the range. It is accurate for a pricing page showing multiple tiers. Use individual Offers when you want to describe each plan precisely.
Example
Event registration
A SaaS company, Wrenhollow, runs a paid virtual workshop. Its Event markup includes an Offer with price 99, currency USD, availability InStock, validFrom the registration open date and a url to the signup page. When seats sell out, the availability changes to SoldOut.
Common mistakes
Putting symbols in price
"$19" or "19 USD" in price is invalid. Use a plain number and set the currency separately.
Stale availability
Showing InStock for sold-out or retired plans misleads users and can break merchant guidelines.
Questions
It is valid Schema.org, but Google uses offers inside a parent type such as Product, SoftwareApplication or Event.