Skip to content
SEO Madmanby Adam Hafez
Free tool

Product schema checker for product snippets

Product schema checker: test Product JSON-LD against Google product snippet rules for name, offers, price, currency and stock. Free, runs in your browser.

Runs entirely in your browser. Nothing you enter is uploaded, logged or stored.

Parsed with the browser's own JSON.parse against Google's documented property tables for Product. Nothing you type is sent anywhere.

Key takeaways

  • Google documents name as the only strictly required Product property, alongside a rule that at least one of review, aggregateRating or offers must be present.
  • An Offer needs price, or priceSpecification.price, and a priceCurrency, which Google recommends in three-letter ISO 4217 format.
  • An AggregateOffer instead needs lowPrice and priceCurrency, with highPrice and offerCount recommended.
  • Google lists ten ItemAvailability values, including InStock, OutOfStock, PreOrder and SoldOut, and any other string is not a documented value.
  • This checker reads only the JSON-LD typed in and cannot confirm that the price shown on the page matches the markup.

What it takes

  • A pasted Product JSON-LD object

More tools

All of them free, all of them browser-only.

Browse the tools

How to use it

  1. 1Paste the Product JSON-LDCopy the contents of the script tag with type="application/ld+json" that describes the product, not the surrounding page markup.
  2. 2Confirm name and one of threeAdd name, then at least one of review, aggregateRating or offers, the combination Google documents as required.
  3. 3Complete the OfferGive price and a three-letter priceCurrency; for a price range use an AggregateOffer with lowPrice instead.
  4. 4Use a documented availabilityPick from the ten ItemAvailability values Google lists rather than a free-text stock note.
  5. 5Set priceValidUntil as a dateWrite it in ISO 8601 form such as 2026-12-31, then recheck for the recommended properties still missing.

Paste the Product JSON-LD from a product page and this product schema checker tests it against the property tables in Google’s product snippet documentation. It parses with the browser’s own JSON.parse, so a syntax error is reported before any property check, and nothing you paste leaves your browser.

What this product schema checker checks

  • A Product node. It looks through a single object, an array or an @graph list for the first node whose @type is Product. Without one, it stops with a single Problem.
  • name. Google documents name as required for Product.
  • One of review, aggregateRating or offers. Google requires at least one of the three. Each is also listed on its own as present or missing, as information.
  • Offer price and priceCurrency. For an Offer, Google requires price (or priceSpecification.price) and priceCurrency, with the currency recommended as a three-letter ISO 4217 code.
  • AggregateOffer lowPrice and priceCurrency. If the offer’s @type is AggregateOffer, the tool applies that table instead: lowPrice and priceCurrency are required.
  • availability. When present, it must end in one of the ten ItemAvailability values Google lists: InStock, OutOfStock, PreOrder, BackOrder, Discontinued, LimitedAvailability, InStoreOnly, OnlineOnly, PreSale or SoldOut. The full https://schema.org/InStock form and the bare word both pass.
  • priceValidUntil. When present, it must start with an ISO 8601 date such as 2026-12-31.

How to read the results

Every row carries one of four labels. Problem means a documented requirement is not met: no Product node, no name, none of the three either-or properties, or a missing price, lowPrice or priceCurrency. Warning means the value exists but is not in the documented form, such as a currency symbol or a free-text stock note. Info marks a recommended property that is absent. Pass means the check is satisfied. Fix Problems first; Warnings next.

When offers is an array, the checker reads the first offer only, so repeat the check with each offer at the top if they differ.

Worked example

The tool opens with a Product named “Trail running shoe” that has an image and a single Offer: price “89.00”, priceCurrency “USD”, availability https://schema.org/InStock and priceValidUntil “2026-12-31”. The results:

  • @type is Product, name, offers: Pass.
  • aggregateRating and review: Info, “Missing”.
  • One of review, aggregateRating or offers: Pass, “offers”.
  • Offer price: Pass. Offer priceCurrency: Pass, “USD”.
  • availability and priceValidUntil: Pass.

Change priceCurrency to $ and that row turns to Warning. Delete the whole offers block and the either-or row becomes a Problem, “None present”, because the node now has a name and nothing else. Google also notes that its Rich Results Test may warn about offers without review or aggregateRating, which is the state of this example.

Common mistakes it catches

  • A name-only Product. Valid JSON, a correct @type, and no review, rating or offer: the documented minimum is not met.
  • A price range written as an Offer. An AggregateOffer that carries price instead of lowPrice fails the lowPrice check.
  • Free-text stock notes. “In stock” or “Available” is not one of the ten ItemAvailability values and is flagged as a Warning.
  • Local date formats. A priceValidUntil of 12/31/2026 is not an ISO 8601 date.
  • Currency symbols. $ or € in priceCurrency instead of a three-letter code.

What it cannot check: whether the price in the markup matches the price shown on the page, whether the page focuses on a single product, and whether the priceValidUntil date has already passed.

Sources

  1. 1.Product snippet (Product, Review, Offer) structured data - Google Search CentralPrimary

Frequently asked questions

Is offers required for a product snippet?

Not by itself. Google says you only need one of review, aggregateRating and offers, though it notes the Rich Results Test may report a warning if you provide offers without review or aggregateRating.

Does this cover merchant listing rich results?

No. This checker applies the product snippet documentation only, which has its own smaller property tables. Google points merchant sites where people can buy the product to its separate merchant listing documentation.

Can the JSON-LD be inside an @graph?

Yes. This checker looks through a single object, an array or an @graph list for the first node whose @type is Product.

Why is my priceCurrency flagged as a warning?

The checker expects three uppercase letters, the ISO 4217 form Google recommends, such as USD or EUR. A symbol like $ or a lowercase code such as usd is present but not in that form, so it is reported as a warning rather than a pass.

Does an expired priceValidUntil date matter?

It can. Google says the product snippet may not display if priceValidUntil indicates a past date. This checker only confirms the value starts with a YYYY-MM-DD date; it does not compare it with today, so check the date yourself.

Can I use Product markup on a category page?

Google says product rich results only support pages that focus on a single product. A category or listing page with many products is not the page type this markup is documented for.