Back to the report

Method and raw data

The small print behind the report: how each answer was captured, how the three marks are decided, and the files.

How the app answers were captured
  • Each of the ten questions was typed as written into each app, in a fresh chat or search, and the answer was read from the page and saved with a screenshot and its links.
  • ChatGPT: chatgpt.com home page, logged out, fresh chat per question. The default experience is used with no model or effort picker (none is shown to logged-out users); the composer sends the question as-is, and ChatGPT decides whether to search the web. off (no account)
  • Gemini: gemini.google.com/app, logged out, fresh chat per question off (no account)
  • Google AI Overview: google.com/search (All tab) for the AI Overview; udm=50 for AI Mode; signed out
  • Google AI Mode: google.com/search (All tab) for the AI Overview; udm=50 for AI Mode; signed out
  • Location: United States, residential IP, America/New_York time zone, en-US. Google requests carry hl=en and gl=us.
  • One run per question per surface (run 1). AI answers vary between runs; one run is an observation, not a rate.
  • Apps can personalise answers and vary them from one ask to the next. Each cell is one observation.
How mentioned, recommended and linked are decided
  • Mentioned, Recommended and Linked to your site come from fixed rules (name matching, cue words and web-address matching, listed in targets.yaml). No language model judged any cell.
  • "Recommended" is a cue-word check (recommend, best, top pick or similar next to the name, or a list under a recommendation heading). It can miss or over-flag a recommendation, and it never infers a rank from list order.
  • "Linked to your site" means the answer carries a link to the brand's own web address.
Documented practice and hypothesis
StatementStatus
OpenAI documents separate crawlers for search (OAI-SearchBot), training (GPTBot) and user-initiated fetches (ChatGPT-User), each controllable in robots.txt.Documented by the vendor
Google documents Google-Extended as a robots.txt token for use of content in Gemini models, separate from Google Search crawling.Documented by the vendor
Allowing those crawlers is a precondition for being used as a source by the engines that honour them.Reasonable, partly documented; not proof of citation
Clear factual pages, accurate structured data and consistent business details raise the chance of being linked.Hypothesis: test with a baseline, one change, repeat runs
A specific wording, schema type or llms.txt file moves these results.Hypothesis, unproven. No placement is guaranteed
Crawler access check: plausible.io

Checked 2026-10-31T15:39:59Z. one GET each for robots.txt, the sitemap and the homepage, with a neutral browser-style user agent; no crawler user agent is spoofed. robots.txt returned HTTP 200. Saved robots.txt, crawler.json.

CrawlerHome page/blog/Rule group
OAI-SearchBotallowedallowedno matching group (robots.txt allows by default)
GPTBotallowedallowedno matching group (robots.txt allows by default)
ChatGPT-Userallowedallowedno matching group (robots.txt allows by default)
Google-Extendedallowedallowedno matching group (robots.txt allows by default)
PerplexityBotallowedallowedno matching group (robots.txt allows by default)
ClaudeBotallowedallowedno matching group (robots.txt allows by default)
  • Sitemap: https://plausible.io/sitemap.xml: HTTP 200, 167 URLs, declared in robots.txt
  • Home page: HTTP 200, canonical https://plausible.io/, meta robots None, X-Robots-Tag None

This reads the rules a site publishes. It does not prove what a crawler fetched (that needs server logs), and a CDN or firewall can still block a crawler robots.txt allows.

A separate test through the developer APIs (not what people see)

Before the app capture, the same ten questions were also sent to the OpenAI and Gemini developer APIs with web search on, twice each. This is a different product from the apps: the apps add their own instructions, memory, personalisation and interface. The numbers on the main page never include it. In that test Plausible was mentioned in 36 of 39 answers and its site linked in 29; 1 of 40 calls failed (shown as failed).

  • OpenAI API, run 1 (gpt-6-luna, 2026-10-31 15:41 UTC): Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10
  • OpenAI API, run 2 (gpt-6-luna, 2026-10-31 15:43 UTC): Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10
  • Gemini API, run 1 (gemini-2.5-flash, 2026-10-31 15:41 UTC): Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10
  • Gemini API, run 2 (gemini-2.5-flash, 2026-10-31 15:43 UTC): Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9 failed (HTTP 429: { "error": { "), Q10
RunModelAnsweredTokens in / outEst. cost
OpenAI API run 1gpt-6-luna10 of 10192,804 / 7,096$0.209
OpenAI API run 2gpt-6-luna10 of 10211,547 / 7,079$0.241
Gemini API run 1gemini-2.5-flash10 of 101,992 / 18,518$0.397
Gemini API run 2gemini-2.5-flash9 of 101,972 / 15,394$0.354
Total$1.200

Estimates from each response's usage fields at list prices (OpenAI and Gemini pricing pages, read 2026-10-31). Gemini grounding is counted at the list price of $35 per 1,000 grounded prompts even though the API documents a free daily allowance, so the figure is a worst case. Not an invoice. A one-question setup check on both engines ran first ($0.059) and is not part of the sample; total spent on this page's API data, setup check included: $1.259. Every API answer links to its stored raw response; each raw file is checked against its SHA-256 when the page is built: 40 of 40 verified.

Limits of this sample
  • Ten questions, one category, one ask per question per app: enough to show the method, too few to rank brands.
  • A change after a website edit counts as real only if it is larger than the normal movement between identical asks. A proper baseline is five or more asks per question per app with frozen questions, and dated change notes next to them.
  • No traffic data. Referral traffic from AI products would come from analytics and server logs, with traffic of unknown source kept in its own bucket.
Downloads and raw data

consumer.jsonresults.csvresults.jsonrun-log.jsonlquestions.yamltargets.yamlrobots.txt (saved)crawler.json

consumer.json holds every app answer; results.csv and results.json hold the separate developer-API test; the run log keeps every attempt and error.