SCHEMA.ORG · Offer

Price Schema Markup: price, priceCurrency, Offer & AggregateOffer Examples

There is no standalone Schema.org type named Price for ordinary product snippets. Product pricing is normally expressed inside Offer or AggregateOffer, and the markup must match the price a user can actually see on the page.

updateUpdated: September 18, 2026
Quick answer

What you need to know

For a single product price, put price and priceCurrency inside an Offer nested under Product.offers. Use AggregateOffer when the page genuinely describes a low-to-high range or multiple offers for the same product. Do not include currency symbols inside price; use an ISO 4217 code such as USD in priceCurrency.

memorySemantic summary for search and AI

Product prices in Schema.org are usually modeled as Product → offers → Offer. Offer.price is the numeric price and Offer.priceCurrency is the ISO 4217 currency code. AggregateOffer uses lowPrice, highPrice and optionally offerCount. Visible price and structured price must stay synchronized.

Key properties

The table below summarizes the fields that most often determine whether the entity is clear and internally consistent. Only provide values supported by the page.

PropertyImportanceHow to use it
priceOfferNumeric current price without a currency symbol.
priceCurrencyStrongly recommendedThree-letter ISO 4217 code such as USD.
lowPrice / highPriceAggregateOfferActual minimum and maximum represented by the page.
offerCountAggregateOfferNumber of offers when known.
priceValidUntilOptionalOnly use a real known expiry date.
availabilityRecommendedCurrent ItemAvailability value.

Price is usually part of Offer

Schema.org pricing for a product normally lives inside Offer or AggregateOffer because price describes a commercial offer, not the abstract Product identity.

How to format price

Use a machine-readable numeric value such as 1299.00. Keep currency out of price and put the ISO code in priceCurrency.

Offer versus AggregateOffer

Use Offer for one current sellable offer. Use AggregateOffer only when the same product genuinely has multiple offers or a visible price range.

Sale prices and complex pricing

Keep the active price synchronized with the page. Do not invent an old price or discount solely for structured data.

Multiple currencies

When a site serves several currencies, make the page/canonical model unambiguous. A structured offer should describe the currency actually presented for that URL.

Freshness

priceValidUntil is useful only when a real expiry exists. For frequently changing catalogues, keeping price and availability current matters more than adding every optional field.

Validation checklist

Confirm that Product, Offer and the visible page describe the same item, URL and price. Check decimal formatting, ISO currency and availability.

JSON-LD examples

Single price with Offer

Use when one current offer is visible.

{
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "Wireless Headphones X2",
    "offers": {
        "@type": "Offer",
        "url": "https://example.com/headphones-x2/",
        "price": "149.99",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock"
    }
}

Price range with AggregateOffer

Use only for a real range of the same product.

{
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "Conference Room Display",
    "offers": {
        "@type": "AggregateOffer",
        "lowPrice": "999.00",
        "highPrice": "1299.00",
        "priceCurrency": "USD",
        "offerCount": 3
    }
}

Google, Bing and Yandex

Google

Google supports Offer and AggregateOffer for product results. priceCurrency is recommended for product snippets and required for merchant-listing scenarios.

Bing

Bing supports Schema.org JSON-LD and can use Product/Offer pricing to understand the commercial entity, but markup does not guarantee a price-enhanced result.

Yandex

Yandex recognizes price on Offer and lowPrice on AggregateOffer together with priceCurrency for product scenarios.

Important: valid structured data does not guarantee a rich result. Each search engine decides whether to use the data and how to present it.

Common mistakes

  • warningWriting $149.99 inside price.
  • warningOmitting priceCurrency.
  • warningUsing AggregateOffer for unrelated products.
  • warningLeaving an expired priceValidUntil.
  • warningStructured price differs from the visible page.

Frequently asked questions

Is there a Schema.org Price type?

For normal product structured data, price is usually a property of Offer or PriceSpecification, not a standalone page type.

Should price include a currency symbol?

No. Keep price numeric and place the ISO currency code in priceCurrency.

When should I use AggregateOffer?

When the same product genuinely has multiple offers or a price range on the page.