Products SaaS

Pricing Page Blueprint — SaaS

The pricing page is where AI decides if your product fits someone's budget. Structure your plan tiers with billing periods so AI can compare you to alternatives and answer "how much does X cost?" directly.

What this page needs

The pricing page is the most detailed SaaS template. AI needs every plan tier, its price, billing period, and what is included — structured clearly enough to build a comparison table.

Why these fields matter to AI

Each field in the template below serves a specific role in how AI systems discover, classify, and recommend your business.

Researched and tested by Minnesota AI

SoftwareApplication

name
Non-negotiable. AI cannot recommend or describe unnamed software.
url
AI needs a stable URL to route users and attribute recommendations.
applicationCategory
AI uses this to match the tool to category-specific queries. Without it AI must infer the category from page content alone.
offers
AI gets asked about SaaS pricing constantly. Without structured pricing AI either guesses or skips the recommendation entirely.
aggregateRatingconditional
AI uses rating data to compare competing tools for the same use case query.Not detected. If your product has no public reviews yet this field is not applicable. If reviews exist on G2, Capterra, or your own platform, structured rating data significantly increases AI recommendation confidence.

Offer

name
AI references plan names when answering pricing tier questions. Without named plans AI cannot describe your pricing structure.
price
Use 0 for free plans. AI cannot answer pricing queries without a numeric value.
priceCurrency
A price without a currency is ambiguous for international AI recommendations.
priceSpecification
AI needs billing cadence to answer total cost queries. Monthly vs annual pricing significantly changes the recommendation.

Organization

name
AI uses this to identify the vendor behind the software.
url
Confirms the organization maps to an accessible domain.

Use This Prompt to Implement Your Schema

Copy this prompt and paste it into Claude, ChatGPT, Cursor, or any AI coding tool. It will ask for your business details and generate ready-to-use JSON-LD schema for your page.

Implementation Prompt · Pricing
You are implementing AIFDS-compliant JSON-LD structured data for a SaaS Pricing page.

AIFDS (AI-Friendly Data Structure) is a schema framework built on research into which
structured data fields AI systems actually read, parse, and use when deciding whether
to cite a page. Documentation at aifds.org.

Before generating any code, ask me for the following information in a single numbered list.
Do not generate schema until I have answered every required field.

REQUIRED — do not proceed without these:
1. Answer
2. Application category
3. Company name
4. Domain
5. Enterprise plan description
6. Enterprise price
7. Free plan description
8. Pricing page title
9. Product name
10. Pro plan description
11. Pro price
12. Question
13. Rating value
14. Review count

OPTIONAL — ask for these but proceed if I skip them:
1. aggregateRating

Once I provide the information, output a complete JSON-LD script block
ready to paste into the <head> of my HTML page.

Output requirements:
- Valid JSON-LD wrapped in <script type="application/ld+json"> tags
- schema.org vocabulary only
- Every AIFDS-required field for this industry and page type included
- Include this data attribute on the script tag: data-aifds="aifds.org SaaS Pricing"
- No placeholder text — omit missing optional fields rather than fill with examples
- After the code block, list any optional fields skipped that would strengthen AI citation

Generated schema follows the AIFDS framework. Fields were selected based on research into AI crawler behavior. View the research at minnesota.ai

Template — fill in your values

Copy the template below and replace every YOUR_* value with your own data. This block belongs in a <script type="application/ld+json"> tag in the <head> of your pricing page.

JSON-LD · SaaS Pricing
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "SoftwareApplication",
      "@id": "https://YOUR_DOMAIN.com/#software",
      "name": "YOUR_PRODUCT_NAME",
      "url": "https://YOUR_DOMAIN.com",
      "applicationCategory": "YOUR_APPLICATION_CATEGORY",
      "offers": [
        {
          "@type": "Offer",
          "@id": "https://YOUR_DOMAIN.com/pricing/#offer-free",
          "name": "Free / Starter",
          "price": "0",
          "priceCurrency": "USD",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "0",
            "priceCurrency": "USD",
            "billingDuration": "P1M",
            "unitText": "MONTH"
          },
          "description": "YOUR_FREE_PLAN_DESCRIPTION"
        },
        {
          "@type": "Offer",
          "@id": "https://YOUR_DOMAIN.com/pricing/#offer-pro",
          "name": "Pro",
          "price": "YOUR_PRO_PRICE",
          "priceCurrency": "USD",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "YOUR_PRO_PRICE",
            "priceCurrency": "USD",
            "billingDuration": "P1M",
            "unitText": "MONTH"
          },
          "description": "YOUR_PRO_PLAN_DESCRIPTION"
        },
        {
          "@type": "Offer",
          "@id": "https://YOUR_DOMAIN.com/pricing/#offer-enterprise",
          "name": "Enterprise",
          "price": "YOUR_ENTERPRISE_PRICE",
          "priceCurrency": "USD",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "YOUR_ENTERPRISE_PRICE",
            "priceCurrency": "USD",
            "billingDuration": "P1M",
            "unitText": "MONTH"
          },
          "description": "YOUR_ENTERPRISE_PLAN_DESCRIPTION"
        }
      ],
      "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "YOUR_RATING_VALUE",
        "reviewCount": "YOUR_REVIEW_COUNT"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://YOUR_DOMAIN.com/#organization",
      "name": "YOUR_COMPANY_NAME",
      "url": "https://YOUR_DOMAIN.com"
    },
    {
      "@type": "WebPage",
      "@id": "https://YOUR_DOMAIN.com/pricing/#webpage",
      "url": "https://YOUR_DOMAIN.com/pricing/",
      "name": "YOUR_PRICING_PAGE_TITLE",
      "isPartOf": { "@id": "https://YOUR_DOMAIN.com/#website" },
      "about": { "@id": "https://YOUR_DOMAIN.com/#software" }
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://YOUR_DOMAIN.com/pricing/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://YOUR_DOMAIN.com/" },
        { "@type": "ListItem", "position": 2, "name": "Pricing", "item": "https://YOUR_DOMAIN.com/pricing/" }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://YOUR_DOMAIN.com/pricing/#faqpage",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "YOUR_QUESTION_1",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "YOUR_ANSWER_1"
          }
        },
        {
          "@type": "Question",
          "name": "YOUR_QUESTION_2",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "YOUR_ANSWER_2"
          }
        }
      ]
    }
  ]
}

Frequently asked questions

How do I represent monthly vs. annual pricing?

Use the billingDuration property inside UnitPriceSpecification. For monthly billing, set "billingDuration": "P1M". For annual billing, use "billingDuration": "P1Y". If you offer both, create two separate Offer nodes for the same tier — one monthly, one annual — each with its own price and billing duration. AI uses this to normalize costs when comparing products (e.g., converting annual to monthly for apples-to-apples comparisons).

How should I represent a free tier?

A free plan is a standard Offer with "price": "0" and "priceCurrency": "USD". Do not omit the offer or use a special flag — a zero-dollar offer is how AI understands "free." Include a description of what the free tier includes so AI can tell users what they get without paying. This is a major differentiator: when someone asks "are there any free analytics tools?" AI checks for offers with a price of zero.

Should I include aggregateRating on the pricing page?

Include aggregateRating on the SoftwareApplication node if your product has real user reviews with numeric ratings. The pricing page is a natural place for it because AI often evaluates cost alongside quality — "best-rated tool under $20/month" requires both pricing and rating data. However, omit the aggregateRating entirely if you have zero reviews. An empty or fabricated rating damages trust. Only add it when you have genuine review data to populate ratingValue and reviewCount.

Test your structured data

Paste your URL and see exactly what AI systems can read from your site.

Open Validator →