<MT />
Back to Blog
AEOpricing pageSaaSstructured dataChatGPTPerplexityindie hackers

Make Your Pricing Page Easy for AI Assistants to Quote

T

Muhammad Tayyab

October 14, 2026·16 min read
iPhone showing the ChatGPT "What can I help with?" screen next to a laptop in a vertical stand — photo by Tim Witzdam via Unsplash

A fresh study found ChatGPT and Gemini quoting stale prices for recently repriced SaaS tools, often from old pages the vendor forgot about. Here's a practical checklist to make your free tier, limits and plan names unambiguous enough that AI assistants quote you correctly.

When someone asks an AI assistant "How much does [your product] cost?", the assistant will almost always give a number. Whether it's your current number is a different question.

On October 12, 2026, OrganiKPI asked ChatGPT and Gemini what 116 well-known B2B SaaS tools cost and compared every answer with the live pricing pages. It published the results the next day. Here's what it found:

  • Almost every answer named a price. Only 1.0% of answers (14 of 1,388) gave no price at all.
  • Repriced tools got misquoted far more often. For the 77 tools that had changed their pricing, Gemini gave a stale or wrong price in 12.8% of answers and ChatGPT in 5.7%. For the 39 tools that hadn't changed, the combined error rate was 2.6%.
  • Most errors were old prices, not invented ones: 83.5% of the errors on changed tools.
  • Removed plans were the riskiest change. They were misquoted in 11.5% of answers, and 16.7% for Gemini. Both assistants still listed plans the vendor no longer sells.
  • The stale price often lived on the vendor's own site. Three vendors still hosted old pricing pages or blog and help articles with the old price. Four of ChatGPT's stale claims traced to a second pricing page one vendor still hosted.

The study's own caveats are worth repeating. It covered two assistants, not Perplexity, Grok or Google's AI Mode. The repriced group was picked because its pricing moved, so its error rate doesn't describe SaaS in general. And a handful of tools carried most of the errors.

Builders are running the same kind of check on their own products. On Indie Hackers, the developer of a small puppy-training app asked four AI assistants 24 buyer questions (October 2, 2026). The app came up 0 times, even though AI crawlers were allowed and the page was indexed. His takeaway: "An answer engine has nothing to quote."

I couldn't find a single viral thread that started this conversation. What I found is steady evidence, like the two posts above, that assistants state prices confidently and that what they repeat depends on what's out there to read. Your job is to make the correct answer the easiest one to find.

Why assistants get your pricing wrong

There are a few distinct routes, and they need different fixes:

  • Training memory. The model "remembers" an old price from before your change. Nothing you publish today changes that quickly.
  • Live retrieval from a stale page. The assistant searches, finds an old pricing URL, a blog post or a help article on your own domain, and repeats it.
  • Third-party echo. Reviews, "best X tools" lists and directories quoted your price once and never updated it. In OrganiKPI's data, 70.3% of Gemini's stale claims appeared in a third-party article it cited.
  • A page that's hard to read. Prices that only appear after JavaScript runs, behind a billing toggle, or inside an image are harder for any crawler to extract correctly.
  • Ambiguity you created. "Free forever*", "Pro (legacy)", "starts at $9", and a monthly/annual toggle with no labels are all easy to quote wrong, even for a careful human.

You can't fully control the first route. The rest you can fix this week.

The pricing page checklist

Plan names and prices

  • One name per plan, everywhere. The plan name on your pricing page, in your app, in your docs and in your billing emails should match exactly. If you renamed "Starter" to "Basic", remove "Starter" from every page you control.
  • State the period next to every price. Write "$12 per month, billed monthly" or "$120 per year ($10/month), billed annually", not a bare "$10".
  • State the currency. "USD $12" or "$12 USD" if you sell internationally. Don't leave the reader to guess from a "$" sign.
  • Make the default visible. If your page has a monthly/annual toggle, make sure the plain HTML shows both prices with labels, not just whichever one the toggle defaults to.
  • Avoid "starts at" without the condition. If $9 is only for annual billing with one seat, say so in the same sentence.

Free tier and limits

  • Say exactly what "free" means. Is it a free plan, a free trial, or a freemium tier? How long does the trial last? Is a card required?
  • Write limits as numbers with units. "Up to 3 projects", "1,000 API calls per month", "1 GB storage" can be quoted. "Generous limits" can't.
  • Say what happens at the limit. Does usage stop, slow down, or bill overage? At what rate?
  • Put seat and usage pricing in one sentence each. For example: "$8 per user per month; first user included."

Page mechanics

  • Server-render the prices. The numbers should be in the initial HTML, not fetched later by a script. View the page source (not the inspector) and search for your price.
  • One canonical pricing URL. Old URLs like /pricing-old, /plans or /pricing-2024 should 301 redirect to the live page. Don't leave them up "just in case".
  • Show a visible "Last updated" date on the pricing page, and change it only when the pricing actually changes.
  • Add a short pricing FAQ in plain text: "Is there a free plan?", "What happens when I hit the limit?", "Can I cancel anytime?" Direct question-and-answer pairs are easy to quote accurately.

Everything that isn't the pricing page

  • Search your own site for every old price and old plan name (blog posts, help center, changelog, comparison pages, docs). Update each one with the current figure or a link to the pricing page. In OrganiKPI's data, vendor pages carried 20.9% of all stale claims.
  • Fix third-party listings you control. Directory and marketplace profiles you can log into are the easiest wins.
  • Politely ask publishers to update. For reviews and comparison posts, send the old price, the new price and your pricing URL. Correcting a fact is a reasonable ask; don't offer payment.

An illustrative example (made up)

This is a made-up example. "Notely" and its prices are fictional, used only to show the difference between hard-to-quote and easy-to-quote copy.

Hard to quote:

  • Free forever*
  • Pro: $8 (toggle defaults to annual, no label)
  • Team: Contact us
  • *Fair use applies

Easy to quote:

  • Free plan: $0. Up to 3 notebooks and 500 MB storage. No credit card required. No time limit.
  • Pro: USD $10 per month billed monthly, or USD $96 per year ($8/month) billed annually. Unlimited notebooks, 20 GB storage.
  • Team: USD $8 per user per month, billed annually, minimum 3 users. Everything in Pro plus shared workspaces.
  • At the limit: on the Free plan, you can still read and export notes but can't add new ones until you upgrade or delete.

Structured data: helpful, but match the page exactly

Structured data won't force an assistant to quote you correctly, and Google is explicit about its own AI features. Its AI features documentation says there are no additional technical requirements for AI Overviews or AI Mode beyond being indexed and eligible for a snippet, and that "there's also no special schema.org structured data that you need to add." The same page recommends making sure your structured data matches the visible text on the page.

Where JSON-LD does help is in stating your plans in a precise, machine-readable form that has to agree with your visible copy. Two Google rules matter here:

  • Google's structured data policies say not to mark up content that isn't visible to readers of the page.
  • For the software app rich result, Google requires name, offers.price (use 0 for a free app) and either aggregateRating or review. Don't invent ratings to qualify. If you don't have real reviews on the page, you won't get that rich result, and that's fine.

Schema.org gives you the building blocks for subscription pricing. An Offer can carry a UnitPriceSpecification, which can include referenceQuantity (for example, 1 month) and billingDuration. Schema.org also asks for an ISO 4217 code in priceCurrency rather than a "$" symbol in the price.

Here's a sketch for the made-up Notely example. Adapt it to your real plans, and keep every number identical to the visible page:

{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Notely",
  "applicationCategory": "BusinessApplication",
  "operatingSystem": "Web",
  "offers": [
    {
      "@type": "Offer",
      "name": "Free",
      "price": 0,
      "priceCurrency": "USD",
      "description": "Up to 3 notebooks and 500 MB storage. No credit card required."
    },
    {
      "@type": "Offer",
      "name": "Pro (monthly)",
      "priceSpecification": {
        "@type": "UnitPriceSpecification",
        "price": 10,
        "priceCurrency": "USD",
        "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "MON" }
      }
    },
    {
      "@type": "Offer",
      "name": "Pro (annual)",
      "priceSpecification": {
        "@type": "UnitPriceSpecification",
        "price": 96,
        "priceCurrency": "USD",
        "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "ANN" }
      }
    }
  ]
}

MON and ANN are UN/CEFACT unit codes for month and year. Schema.org's own UnitPriceSpecification example uses ANN for an annual fee. OrganiKPI noted that tools with Offer markup on their pricing page "leaned" toward fewer errors, but flagged that group as too small to recommend. Treat markup as hygiene, not a fix.

Let the right crawlers read the page

If an assistant's search crawler is blocked, it can't read your current pricing, and an older copy elsewhere wins by default.

  • OpenAI documents separate user agents. Per OpenAI's crawler docs, OAI-SearchBot surfaces sites in ChatGPT search, and sites that opt out won't be shown in ChatGPT search answers. GPTBot is for training, and each setting is independent. ChatGPT-User handles user-initiated visits, where robots.txt rules may not apply. OpenAI says robots.txt changes can take about 24 hours to take effect for search.
  • Perplexity documents PerplexityBot for surfacing and linking sites in its search results, and says it isn't used to crawl content for AI foundation models. It also documents Perplexity-User for user-requested fetches, which generally ignores robots.txt. See Perplexity's crawler docs.
  • Check your firewall and bot protection, not just robots.txt. Both OpenAI and Perplexity publish IP ranges, and Perplexity's docs walk through allowing its bots in Cloudflare and AWS WAF rules.

A minimal robots.txt that allows search crawlers to read your pricing while opting out of OpenAI training might look like this. Adjust it to your own policy:

User-agent: OAI-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: GPTBot
Disallow: /

llms.txt: a cheap test, not a standard

llms.txt is a proposal by Jeremy Howard, first published in September 2024 and updated to v2 in August 2026. It suggests a markdown file at /llms.txt with a short summary of your site and links to LLM-friendly pages. The proposal says thousands of sites now publish one, and it's mostly used to help agents find documentation.

Keep expectations realistic:

  • It's a proposal, not a web standard, and it doesn't replace robots.txt or your sitemap.
  • Google says you don't need to create "new machine readable files, AI text files, or markup" to appear in its AI features.
  • OrganiKPI found tools whose llms.txt stated a price had fewer stale answers (4.2% vs 11.0%), but that group was only 20 tools, so the study calls it "a pattern only, too small to recommend".

If you add one, keep it short and current. Include one line per plan with the price, period and key limits, plus a link to your canonical pricing page. Update it in the same commit as the pricing page.

How to check what assistants say about you

  • Ask the same pricing question several times in each assistant you care about (ChatGPT, Perplexity, Gemini, Grok, Claude), with search on. A single answer is noise.
  • Use prompts like "How much does [product] cost?" and "What plans does [product] offer and what do they cost?" These are the two prompts OrganiKPI used.
  • Open the cited sources. If the wrong number comes with a link, you've found what to fix.
  • Search the wrong number in quotes on the web. Stale figures usually leave a trail.
  • Repeat after every pricing change, and keep a simple log of the date, assistant, answer and source.

If you also care about AI assistants recommending apps (not just quoting prices), I covered that side in When ChatGPT and Ask Play pick the app.

What to do this week

  • Monday: ask three assistants your two pricing prompts three times each, and log every price and cited URL.
  • Tuesday: rewrite your pricing page copy so every plan states its price, period, currency and limits in plain text. Remove asterisks that hide conditions.
  • Wednesday: search your own site for old prices and plan names. 301 redirect retired pricing URLs, and update blog and help articles.
  • Thursday: check robots.txt and your WAF or bot rules for OAI-SearchBot and PerplexityBot. Add or fix JSON-LD so it matches the visible page exactly.
  • Friday: email the two or three third-party pages that quoted your old price, and optionally add a short llms.txt as a test.
  • In two weeks: re-run Monday's prompts and compare.

Soft close

You can't edit what a model memorized last year. You can make sure every page an assistant reads today says the same clear thing: one name per plan, one price per period, limits in numbers, and no forgotten pages contradicting you. That's good for human buyers too.

If you'd like a second pair of eyes on your pricing page or its markup, get in touch.

About the author

Muhammad Tayyab is a full-stack and mobile developer based in Lahore. He builds DripScore, an AI outfit rating app live on the App Store, under dawnapps.co. Find him on GitHub, LinkedIn, and X, or say hello at /#contact.

Sources

Back to all posts
Thanks for reading 🙏