Skip to main content

ChatGPT · Perplexity · Gemini

ChatGPT recommends your competitor.WellCited changes that.

Type your domain. In about ten seconds, see the seven things an answer engine checks and which ones your site fails.

Or try one:

No signup, no card, about ten seconds. Seven checks on any public site — we read only what a crawler reads, and the report is yours.

checks per audit
Crawler access, llms.txt, schema, answer structure, extractability, metadata, sitemap.
answer engines sampled
ChatGPT, Perplexity and Gemini — the same question, asked of each.
AI crawlers checked
GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot and four more.

Answer engines we sample

  • ChatGPTResponses API + web search
  • Perplexitysonar
  • GeminiGoogle Search grounding
  • Claudecrawler access only, v1soon
  • AI Overviewson the roadmapsoon
  • Copiloton the roadmapsoon

Sampled today, or checked for crawler access. We label what we don't do yet rather than implying we do.

The problem

Your buyers stopped reading ten links.

They ask once and read one answer. Ranking third for the same question does not put you in it.

Your ranking did not change. Your pipeline did.

ChatGPTFixed example — nothing was fetched

best AI visibility tool for a B2B SaaS site

For a B2B SaaS site, the tools people most often point to are Corvid Labs[1], which tracks brand mentions across answer engines, Halyard[2] for share-of-voice reporting, and Tinsel Metrics[3] if you want prompt-level tracking. All three publish structured documentation that's easy to cite.

Cited

  • [1]corvidlabs.io/docs/overview
  • [2]halyard.co/compare
  • [3]tinselmetrics.com/llms.txt
acme.comNot named. Not cited. Nothing in your analytics will report it.

Measure

See the answer, not the ranking.

We ask the engines what your buyers actually type and keep every answer verbatim. A rank tells you where a link sits; this tells you what was said.

  • Answers stored word-for-word, per engine, per run
  • Share of voice against up to ten competitors you name
  • Every citation traced back to the page that earned it
SamplingFixed example — nothing was fetched
  1. ChatGPTstored
  2. Perplexitystored
  3. Geministored
Illustration of one run. Every answer is kept verbatim, per engine.

Fix

Findings don't move the score. Fixes do.

Most tools in this category stop at the diagnosis. WellCited writes the file — llms.txt, schema, FAQ blocks — generated from your own scan, ready to paste.

  • llms.txt built from your real site structure, not a template
  • JSON-LD that passes Google's Rich Results test before you ship it
  • FAQ blocks written from the prompts you actually lost
/llms.txt
# Acme

> Scheduling software for field service teams. Route, dispatch and invoice from one place.

## Main pages

- [Pricing](https://acme.com/pricing)
- [How dispatch works](https://acme.com/product/dispatch)
- [Integrations](https://acme.com/integrations)
- [Customer stories](https://acme.com/customers)
- [Docs](https://acme.com/docs)
Generated for acme.com. Save as /llms.txt.
Paid plans

Schema and FAQ blocks are generated from your own scan. The llms.txt above is free on every audit.

See plans

Verify

Paste it live. We check that it stuck.

Hit verify and we re-crawl the exact URL, read the exact bytes, and show you what came back. A fix stays pending until the live page says otherwise.

  • Response status, headers and body excerpt from the re-crawl
  • Nothing marks itself done — the live page has to prove it
  • The next scan measures the lift and the digest reports it
Verifyllms.txt · acme.com
  1. GET acme.com/llms.txt200 · text/plain · 412 bytes
  2. Body matches the artifactchecksum 7f2a…c104
  3. Marked live14:02 UTC
  4. Next scan measures the liftMonday 09:00
Live since 14:02. Monday’s scan measures the lift.

How it works

Three steps, and you own the output at every one.

Nothing here needs a call, an integration or a person from us.

  1. Step 1

    Audit

    Paste a domain. Seven heuristic checks run against the live page.

    A score out of 100 and a shareable scorecard, in about ten seconds.

  2. Step 2

    Scan

    Add your buyers' questions and the competitors you're losing to. We sample real answers on your plan's schedule.

    A visibility score per engine, and the answers that produced it.

  3. Step 3

    Fix, then verify

    Copy each generated artifact into your site and hit verify. We re-crawl to confirm it is live.

    A dated record of what changed and what the score did next.

The rubric

Seven checks, one hundred points, no opinion about your product.

The whole scoring system, written out. Seven deterministic checks against your live page, in about ten seconds.

How the audit runs, and what it does not do

The audit makes four requests and no more: your page, your robots.txt, your llms.txt and your sitemap.xml. It runs no browser, executes no JavaScript, follows redirects the way a crawler does, and gives up on a page that takes longer than twelve seconds to answer — because the engines give up too. Nothing is stored from the crawl except the report you are shown.

No language model scores anything. Every point below comes from a deterministic rule with a published threshold, which is what makes two audits of the same page comparable and what lets us give the whole thing away. The parts of the product that do use models — asking ChatGPT, Perplexity and Gemini your buyers' actual questions and recording which companies get named — are a different, paid thing, and they are downstream of this: an engine that cannot read your page has nothing to name you for.

CheckWhat it readsPoints
AI crawler accessrobots.txt, resolved the way each crawler resolves it20
Structured data (JSON-LD)Every application/ld+json block in the page source20
Answer-shaped contentQuestion headings, lists, tables, and any FAQ section20
Content extractabilityReadable text in the raw HTML, before any JavaScript runs17
Metadata & identityTitle, meta description, the Open Graph set, canonical link10
llms.txt/llms.txt, and whether it is genuinely plain text8
Sitemapsitemap.xml, or a Sitemap: reference inside robots.txt5
TotalOne page, one crawl, no language model involved100

Points are fixed and public. We publish the rubric because a score you cannot reason about is a score you cannot act on.

What each check reads

Can AI crawlers reach you at all?

AI crawler access · 20

A root-level block is the only thing scored here, because it is the only thing that decides whether an engine may fetch the page. Nine crawlers feed the answers people now read instead of a list of links — GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Perplexity-User, Google-Extended, CCBot and meta-externalagent — and each one is either allowed in or it is not.

The check resolves groups the way a real crawler does: a group that names GPTBot beats the wildcard group. So a site can refuse scrapers in general and still admit the engines it cares about. Most sites that fail this did not decide to fail it — a security plugin, a copied robots.txt or a well-meaning ops ticket did it for them, and nobody has read the file since.

The fix is one file and it takes ten minutes. Open robots.txt, find any group whose rules include Disallow: / — most often the wildcard group — and either remove that line or add a named group for each crawler you want to admit, with Allow: / underneath it. The named group wins, so a blanket refusal can stay in place for everything else. Deploy, then re-run the check: robots.txt is fetched live every time, so the result reflects what is being served rather than what somebody intended. If you are excluding an engine deliberately, that is a legitimate business decision and this check will go on reporting it accurately — a score is a measurement, not an instruction. What it should never be is an accident that nobody in the company knows about.

Does your markup say who you are?

Structured data (JSON-LD) · 20

Ten points for having structured data at all, five for a block that identifies the organisation, five for a rich type — FAQPage, Product, Article, HowTo, SoftwareApplication, BreadcrumbList or Review. Machines use it to resolve identity without inferring it from prose, and inference is exactly where somebody else's name gets substituted for yours.

This is not a ranking trick. It is the difference between a model knowing your product's name, category and homepage as facts, and reconstructing them from a headline and a nav bar. The cheapest available win on most sites is a single Organization block on the homepage: five minutes of work, and missing from the majority of the sites we audit.

Start with one Organization block on the homepage and nothing else. It needs a name and a url, plus — if you have them — a description, a logo and the profile URLs you already link to in the footer. Paste it into the head as a script of type application/ld+json; it changes nothing a visitor sees and nothing about how the page renders. Once that validates, add the rich type that matches what the page actually is: FAQPage where you answer questions, Product where you sell something, BreadcrumbList where there is a hierarchy. Do not add a type the page does not support. Structured data describing a page that does not exist is worse than none at all, because it is the one signal a machine is inclined to trust without checking.

Is the page shaped like an answer?

Answer-shaped content · 20

Eight points for three or more question-shaped headings, four for two or more lists, two for a table, six for a detectable FAQ section. None of it is about keywords. It is about whether a model can lift a self-contained answer out of your page without reassembling it from four paragraphs of narrative first.

The fastest fix is usually to rewrite a heading as the question its section answers, then put the answer in the first sentence underneath rather than the fourth. It reads better for people too, which is the only reason worth doing it. Tables and lists score because they are the two structures that survive being extracted with no surrounding context at all.

Take your three most important pages and read only their headings. If they are nouns — Features, Platform, Solutions — you have a brochure. Rewrite each one as the question a buyer would actually type, then make the first sentence underneath the complete answer and put the elaboration after it instead of before it. Add a table wherever you are comparing things and a list wherever you are enumerating them, because those two structures survive extraction with no surrounding context. And check that any FAQ answers are in the HTML rather than behind a script that reveals them on click: we found exactly that bug on this page, which is why our own FAQ is now a plain disclosure element that keeps every answer in the source whether it is open or shut.

Can a crawler read the page without running your JavaScript?

Content extractability · 17

We fetch the page once, with no browser and no JavaScript engine, and measure how much readable text is actually in that response and how much of the payload it represents. Most crawlers do the same thing. A page that assembles its content in the browser arrives as an empty shell, and an empty shell cannot be quoted no matter how good the content would have been.

This is the check that most often surprises a well-built site. A single-page app with excellent writing can score two out of seventeen, and a heavily hydrated server-rendered page can still come in thin because so much of what it ships is machinery rather than words. The fix is not subtle: server-render the pages you want quoted, and give them enough substance to be worth quoting.

Server-render the pages you want quoted. In a modern framework that is a configuration decision rather than a rewrite — mark the marketing and documentation routes as static or server-rendered and leave the interactive parts as islands. Then read the check's second number, the proportion of the response that is genuinely text. A page can be perfectly server-rendered and still come in thin, because hydration payload, class names and inline scripts outweigh the words. The remedy for that is not a smaller framework; it is more substance. If a page ships forty kilobytes of machinery to deliver two hundred words, the honest reading is that the page does not yet say very much, and this section of this site exists because our own audit said exactly that to us.

Does the page introduce itself?

Metadata & identity · 10

Two points for a title, three for a description between 50 and 170 characters, three for a complete Open Graph set, two for a canonical link. Boring, foundational, and about five minutes of work — which is why losing points here is the most annoying way to lose them.

The description carries more weight than it used to. It is short, it is written by you rather than extracted from you, and it is the single sentence most likely to be quoted back when a model needs one line about what a page is. A great many descriptions on the web were written for a search snippet years ago and have not been read by their owners since.

Write the description as a sentence rather than a keyword list, and keep it between fifty and a hundred and seventy characters: long enough to say what the page is, short enough to survive being quoted whole. Fill the Open Graph set with a title, a description and an image, because those three are what an answer engine and a chat client both fall back on when they need a preview. Add a canonical link even on pages with no duplicates, since it costs one tag and the failure mode without it is silent. Then read the title out loud. If it does not identify the company and the page in one breath, no amount of markup underneath it will repair the impression it makes.

Is there a map at /llms.txt?

llms.txt · 8

llms.txt is a proposed convention: a plain-text file at the root of a domain saying what the site is and which pages are worth reading first. Adoption is not universal and we will not pretend otherwise — which is precisely why it is worth eight points here and not thirty.

We require plain text, not an HTML page that happens to answer at that path. Sites that serve their app shell for every unknown URL fail this check, and correctly: a file that returns a rendered page is not a file. Writing one is cheap, it cannot hurt you, and the exercise forces the same clarity the checks that definitely matter also reward.

Write it by hand, or generate it — the tool on this site does it from your live pages in about ten seconds — and then check three things. It has to be served as text/plain at the root of the domain, not as a rendered page answering at that path. It has to open with a single line describing the business the way you would describe it out loud, because that line is the most quotable thing in the file. And the links under it have to be the pages you actually want read first, in that order, rather than a dump of the sitemap. A short honest map beats a long automated one: if part of the site is not worth a model's attention, leaving it out is the useful signal.

Are your crawl paths declared?

Sitemap · 5

Either a sitemap.xml that parses as one, or a Sitemap: line in robots.txt pointing at it. Five points, because it is the cheapest item on this list and every framework has a plugin, a route helper or a build step that produces one.

AI search indexes lean on the same crawl infrastructure as classic search, so a declared crawl path is still how a new page gets found quickly rather than eventually. It matters most for sites that publish often, which is most sites trying to get quoted in the first place.

Generate one at build time and reference it from robots.txt with a Sitemap: line. Every framework has a plugin, a route helper or a build step that produces it, and if yours does not, a hand-written file listing a dozen URLs still scores and still works. Include only pages you want indexed — a sitemap full of redirects, noindex pages and duplicates teaches a crawler to trust it less, which is the opposite of the point. Set lastModified from a real timestamp rather than from the build clock, because a sitemap in which every page changed this morning is a sitemap in which that field carries no information at all.

What a hundred out of a hundred does not mean

It does not mean an engine will recommend you. Every check on this page measures whether a machine CAN read, parse and quote your site. None of them measures whether it should — that depends on what your pages actually say, who else says it better, and how a given model weighs a thousand signals it has never published. A perfect score removes the reasons you are being skipped; it does not supply a reason to be chosen.

It scores one page, at one moment. The audit fetches a single URL and grades what came back. A homepage that scores a hundred can sit on top of a documentation section that scores twelve, and the pages a buyer's question actually resolves to are usually the deep ones. Re-run it against the pages you want quoted, not only the one you are proud of.

And it is a heuristic, not an oracle. No answer engine publishes its ranking function, so anyone claiming to have reverse-engineered one is guessing with confidence. What is knowable is on this page: whether the crawler was allowed in, whether the markup identifies you, whether the text is there to be read without a browser. We score the knowable part, we publish the rubric, and we say plainly where the certainty stops.

What progress looks like

Scores move in steps, because fixes ship in steps.

Each jump is an artifact going live and the next scan picking it up. The flat stretches are the weeks nothing shipped.

Visibility score12 78+66
Target 80
Illustration of the shape a fix queue produces: flat while nothing ships, stepped as each artifact goes live and the next scan picks it up.

Pricing

Priced per answer, not per seat.

One credit buys one prompt answered by one engine. That is the only thing that spends money on our side, so it is the only thing we charge for. Invite whoever you like.

Free

See the problem, and share the proof.

forever

credits a month

  • 1 site
  • 10 prompts per site
  • No competitor tracking
  • Perplexity
  • Manual only
  • Verify fixes went live
  • Public scorecards
  • White-label client reports

Starter

One site you actually care about.

/mo

200credits a month

  • 1 site
  • 25 prompts per site
  • 3 competitors per site
  • ChatGPT, Perplexity
  • Weekly
  • Verify fixes went live
  • Public scorecards
  • White-label client reports

Growth

Most picked

Where most teams land.

/mo

600credits a month

  • 3 sites
  • 60 prompts per site
  • 5 competitors per site
  • ChatGPT, Perplexity, Gemini
  • Weekly
  • Verify fixes went live
  • Public scorecards
  • White-label client reports

Agency

Client work, with your name on the report.

/mo

2000credits a month

  • 10 sites
  • 150 prompts per site
  • 10 competitors per site
  • ChatGPT, Perplexity, Gemini
  • Twice weekly
  • Verify fixes went live
  • Public scorecards
  • White-label client reports
  • Priority in the scan queue

Prices are in USD and exclude tax. Plan credits refresh at the start of each billing period and expire with it; scan-pack credits never expire. Cancel from the billing page — your account stays live until the end of the period you paid for.

Questions

The ones worth asking first.

If yours isn't here, the answer is probably that we haven't built it yet — and we'd rather say so.

How is this different from a rank tracker?

A rank tracker tells you where a link sits in a list of ten. An answer engine doesn't return a list of ten — it returns a paragraph that names two or three companies. WellCited asks the engines your buyers' questions, keeps the paragraph, and tells you whether your name is in it and which page earned the citation.

Do you change my site?

No. We never ask for CMS access, we don't install a script, and there is no plugin. WellCited generates the file or the markup, you paste it in, and then you press verify — at which point we re-crawl the public URL and tell you what we actually found there.

Which engines do you sample?

ChatGPT, Perplexity and Gemini. Starter samples ChatGPT and Perplexity; Growth and Agency sample all three. We also check whether nine AI crawlers — including GPTBot, PerplexityBot, ClaudeBot and Google-Extended — are allowed to read your site at all, because that check is free and it is the one that most often comes back broken.

Does anything actually read llms.txt?

Adoption is not universal and we will not pretend otherwise. llms.txt is a proposed convention for giving a model a clean, linkable map of your site, and it costs one static file to publish. We generate it because it is cheap, harmless and occasionally decisive — and because writing it forces the structure that the checks which definitely matter, like schema and answer-shaped headings, also reward.

What does a scan cost in credits?

One credit is one prompt answered by one engine. Twenty-five prompts across two engines is fifty credits. Starter includes 200 credits a month, Growth 600, Agency 2,000, and scan packs are available if you want to run something extra without changing plan. Plan credits refresh each period; pack credits never expire.

Is the free audit really free?

Yes, and it needs no account. It runs seven heuristic checks against your live page — no language model is involved, so it costs us close to nothing and we have no reason to gate it. The score is never hidden behind a signup, because a score you cannot share is a score nobody sees.

Can I track competitors?

Yes — three on Starter, five on Growth, ten on Agency. You name them, and every scan records when an engine reached for one of them instead of you, which prompt it happened on, and which of their pages was cited. That last part is usually the most useful thing on the screen.

Do I have to talk to anyone?

No. There is no demo to book, no seat count to negotiate and no discovery call. Sign up, paste a domain, run a scan. If something breaks, email us and a human answers — that is the only conversation on offer.

Is my scorecard public?

Yes. Every free audit publishes a page at its own address, and that page shows the score, the grade, all seven checks and the crawler table to anyone who has the link. The address contains a random token, so nobody can enumerate the audits or harvest the domains that have been run — but a link, once shared, is a link. Reports are never deleted for scoring badly: the number is the product, and hiding it would defeat the point of publishing it.

What happens if I audit the same site twice?

You get a new scorecard at a new address, and the previous one stays where it is. Only the newest audit of a domain is marked canonical: the older pages keep working for anyone who already has the link, they carry a banner pointing at the current report, and they tell search engines to index the current one instead. That is why a re-audit never breaks a link you have already shared.

How quickly can a score move?

Six of the seven checks are things you can change in an afternoon — a robots.txt line, an Organization block, a description, an llms.txt, a sitemap, a heading rewritten as the question it answers. The seventh, content extractability, is a rendering decision and can take a sprint. Re-run the audit as soon as the change is live: it fetches the page fresh every time, so the new number reflects what is actually being served, not what we remember.

What happens to the files if I cancel?

They keep working. Everything WellCited generates is plain text or plain markup that lives on your own server — an llms.txt file, a JSON-LD block, a heading rewritten in your own CMS. There is nothing to disconnect, no script to remove, and no part of it stops functioning when the subscription does. What you lose by cancelling is the weekly re-scan and the verification, not the work.

One question

Find out what ChatGPT says about you.

Same seven checks, same ten seconds, still no signup.

ChatGPTFixed example — nothing was fetched

best AI visibility tool for a B2B SaaS site

For a B2B SaaS site, Acme[1] is the one most often cited it publishes a machine-readable llms.txt, marks up its pricing and FAQ in schema, and answers the question in the first paragraph of the page. Corvid Labs[2] and Halyard[3] are the usual alternatives.

Cited

  • [1]acme.com/llms.txt
  • [2]corvidlabs.io/compare
  • [3]halyard.co/pricing
acme.comNamed first, and cited to the page that earned it.

Free forever. The score is never gated.