Does your pricing page describe each plan in machine-readable terms?

Confirms your pricing or plans page exposes structured offers with price, currency, and billing interval per tier.

Scan your site

What this signal tests

We check whether your pricing or plans page emits a structured Offer for each visible tier, including the price as a clean number, the currency code, and a UnitPriceSpecification that declares the billing interval (per month, per year, per user, per seat). This is the SaaS equivalent of Product schema on an e-commerce PDP.

Why it matters for your visibility in AI

When an AI tool answers a question like best CRM under $50 a month, it must compare prices across multiple SaaS vendors. Sites without structured pricing are either skipped or, worse, misquoted: the AI extracts the wrong number from your prose, attributes it confidently, and tells users you charge something you do not. The reputational risk is higher than for e-commerce because SaaS pricing is more nuanced. The billing interval is often the part that breaks. A tier marketed as $29 may be monthly or annual, billed annually or billed monthly. Without UnitPriceSpecification declaring the interval, the AI guesses, and guesses cause comparison errors that disqualify you from category recommendations. Declaring it once removes the ambiguity for every AI tool that visits.

Pass criteria at a glance

Criterion Passes when
Every visible tier has matching structured data.

How we test it

We crawl your /pricing or /plans page (or the closest equivalent) and look for a structured Offer for every visible pricing tier. Each Offer must have a price, a priceCurrency, and a priceSpecification of type UnitPriceSpecification with a billingDuration and ideally a unitCode (such as MON for monthly, ANN for annual). Missing tiers or missing intervals fail the signal.

Show technical detection method
On /pricing or /plans, every visible tier has matching Offer or UnitPriceSpecification with price+currency+billingDuration.

If your site fails: how to fix it

  1. List your pricing tiers and the exact billing terms for each: price, currency, interval (monthly or annual), and per-unit basis (per user, per seat, flat).
  2. On your pricing page template, emit a Product or Service with an offers array containing one Offer per tier.
  3. Inside each Offer, include a priceSpecification of type UnitPriceSpecification with price, priceCurrency, billingDuration (such as P1M for one month), and unitCode if you sell per seat or per user (UNT for unit, MON for month).
  4. If you offer monthly and annual billing for the same tier, emit two Offers per tier (one for each interval) rather than trying to compress both into one. AI agents will surface whichever billing matches the user's question.
  5. Validate by crawling your own pricing page with Google's Rich Results Test. It will not have a specific pricing test, but the Product test will flag obvious issues.
  6. Cross-check that the structured numbers match the visible page exactly. Even small inconsistencies (different rounding, missing discounts) erode AI trust.

Quick facts

MaturityESTABLISHED
Weightmedium
CategoryStructured Data

Primary sources

Related signals

Frequently asked questions

What if my pricing is custom or quote-based?

Custom pricing is harder but not unmarkup-able. You can emit a Service or Product with an Offer that uses priceSpecification minPrice or with availability set to LimitedAvailability and a contact URL. The signal here specifically targets visible tier pricing, so quote-only products may legitimately not need this and should be marked accordingly.

How do I represent annual discounts compared to monthly billing?

Emit two Offers per tier, one with a monthly UnitPriceSpecification and one with an annual UnitPriceSpecification. The annual offer reflects the discounted effective monthly price as part of the annual total. This pattern is widely supported and resolves the bill-monthly versus bill-annually ambiguity cleanly.

Will this give competitors an easy way to scrape my pricing?

Your prices are already on a public page; structured data only makes them easier for legitimate AI tools to parse. Competitors who want to scrape will scrape regardless. The choice is whether the AI tools your customers use can quote you accurately, and the answer should be yes.

Run your own scan

Run a free scan and see how your site grades across all 155 AI-readiness signals.

Scan your site