AnswerLineStart free

, GEO · Engineering

AI crawlers explained: OAI-SearchBot, GPTBot, PerplexityBot, ClaudeBot, Google-Extended and more

An AI crawler is an automated client an AI company uses to fetch web pages, either in bulk (to build a search index or a training corpus) or on demand (when a user’s question needs a page). Most vendors now split these jobs across separate user agents, which means robots.txt can express “appear in AI search, but don’t train on my content”. It also means a single careless Disallow can remove you from an engine you wanted to be in.

Below: the user agents each major vendor documents, the stated purpose, robots.txt behavior and the stated effect of blocking, all from vendor pages checked 2026-09-17. Then robots.txt recipes and a way to measure the effect of a change.

The crawler table

Vendor User agent token Stated purpose robots.txt, per the vendor
OpenAI OAI-SearchBot Surface websites in ChatGPT’s search features Yes, used as the search opt-out
OpenAI GPTBot Crawl content that may be used to train generative AI foundation models Yes, used as the training opt-out
OpenAI ChatGPT-User Certain user actions in ChatGPT and Custom GPTs; not automatic crawling “robots.txt rules may not apply”
OpenAI OAI-AdsBot Validate the safety of pages submitted as ChatGPT ads Not stated; visits only submitted ad pages
Perplexity PerplexityBot Surface and link websites in Perplexity search results; not for foundation-model training Yes, recommended to allow
Perplexity Perplexity-User Visit pages to answer a user’s question “Generally ignores robots.txt rules”
Anthropic ClaudeBot Collect web content that could contribute to model training Yes
Anthropic Claude-SearchBot Improve search result quality for users Yes
Anthropic Claude-User Access websites when individuals ask Claude questions Yes
Google Googlebot Crawling for Google Search, including all Search features Yes
Google Google-Extended Control token for Gemini training and grounding in Gemini Apps and Vertex AI; not a separate crawler Yes, as a robots.txt token
Apple Applebot Search in Spotlight, Siri and Safari; may also train Apple foundation models and ground AI answers Yes
Apple Applebot-Extended Control token for use of Applebot data in training Apple foundation models; does not crawl Yes, as a robots.txt token
Microsoft bingbot Bing’s standard crawler Yes

Sources: OpenAI crawlers, Perplexity crawlers, Anthropic crawler article (dated April 7, 2026), Google common crawlers, About Applebot, Bing crawlers. All checked 2026-09-17.

xAI is not in the table. We found no first-party xAI page documenting Grok’s crawler user agents as of 2026-09-17. Third-party lists name several different tokens and disagree with each other, so we don’t repeat any of them here.

What each vendor says about visibility

OpenAI

Perplexity

Anthropic

Google

So disallowing Google-Extended affects more than training: by Google’s description, it also opts content out of grounding in the Gemini app.

Apple

Microsoft

robots.txt recipes

Robots.txt groups match by user agent token; a crawler follows the most specific group that names it and ignores the rest. Test any change on a staging copy first, and keep your existing User-agent: * group intact.

Recipe 1: appear in AI search, opt out of model training

# Search and answer crawlers: allowed
User-agent: OAI-SearchBot
User-agent: PerplexityBot
User-agent: Claude-SearchBot
User-agent: Claude-User
Allow: /

# Training crawlers and tokens: disallowed
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: Applebot-Extended
Disallow: /

This leaves Googlebot, Applebot and bingbot to your existing rules. Two tokens are left out on purpose:

User-agent: OAI-SearchBot
User-agent: GPTBot
User-agent: PerplexityBot
User-agent: ClaudeBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: Google-Extended
User-agent: Applebot-Extended
Disallow: /

This does not remove you from Google AI Overviews or AI Mode, which Google controls through Googlebot and snippet directives, and it does not cover Apple’s AI answers, which Apple controls through nosnippet. Expect ChatGPT to still show bare navigational links in some cases, as OpenAI describes.

Recipe 3: keep a private section out of every AI crawler

User-agent: OAI-SearchBot
User-agent: GPTBot
User-agent: PerplexityBot
User-agent: ClaudeBot
User-agent: Claude-SearchBot
User-agent: Claude-User
Disallow: /internal/
Allow: /

Anything that must stay private belongs behind authentication. robots.txt is a public request that compliant crawlers honor; it doesn’t restrict access.

Verify the crawler before you trust the user agent

User agent strings are easy to fake. Vendors publish ways to check them:

Before blaming a vendor for ignoring your rules, match the requesting IP against its list. Before blaming robots.txt for a visibility drop, check your WAF and CDN logs for blocked requests from those ranges.

Measuring the effect of a crawler change

The vendor statements tell you the direction of an effect, for example that opting out of OAI-SearchBot removes you from ChatGPT search answers. They don’t give the size of the effect on your prompts or how long the transition takes.

Design

  1. Fix a prompt set of 30–100 prompts where your domain is plausibly citable: category, comparison and how-to questions in your space. Prompt set design covers selection.
  2. Pick the treated engine and a control. If you change only OAI-SearchBot, ChatGPT is treated. Gemini and Copilot are controls, because the change doesn’t touch Google or Bing.
  3. Record a baseline for at least a week, with several runs per prompt, because answers vary between runs.
  4. Change robots.txt and note the timestamp. Wait at least the vendor’s stated propagation time (about 24 hours for OpenAI and Perplexity).
  5. Measure for the same length of time afterwards.
  6. Compare the change in citation rate on the treated engine with the change on the controls. A drop on ChatGPT alone points to the change; a drop everywhere points to something else.

Metric

Citation rate = answers with at least one sources[] URL on your domain ÷ answers collected, per engine and period. Track mention rate (brand name in text) separately; a crawler change affects citations first. See mentions vs citations.

Code

import os
from urllib.parse import urlsplit

import requests

API = "https://api.answerline.dev"
HEADERS = {"Authorization": f"Bearer {os.environ['ANSWERLINE_API_KEY']}"}
DOMAIN = "example.com"


def cites(result: dict, domain: str) -> bool:
    for source in result.get("sources", []):
        host = (urlsplit(source.get("url", "")).hostname or "").lower()
        if host == domain or host.endswith("." + domain):
            return True
    return False


def submit_run(prompts: list[str], engines: list[str], run_id: str, hook: str) -> None:
    tasks = [
        {
            "taskType": engine,
            "payload": {"prompt": prompt, "country": "US"},
            "idempotencyKey": f"crawler-test-{run_id}-{engine}-{i}",
            "webhook": {"url": hook},
        }
        for engine in engines
        for i, prompt in enumerate(prompts)
    ]
    for start in range(0, len(tasks), 500):
        resp = requests.post(f"{API}/v1/async/task/batch", json=tasks[start:start + 500], headers=HEADERS, timeout=60)
        resp.raise_for_status()


def citation_rate(results: list[dict]) -> float:
    return sum(cites(r, DOMAIN) for r in results) / len(results) if results else 0.0

Your webhook handler stores each response.result with the engine, prompt index, run id and timestamp. Compute citation_rate per engine for the before and after periods, then the difference-in-differences: (treated after − treated before) − (control after − control before).

How many runs

If ChatGPT cites you in 30% of answers before the change, detecting a drop to 20% at 80% power needs roughly 290 answers per period. With 50 prompts that is about six runs per prompt per period. Smaller effects need far more. Because runs of the same prompt are correlated, also compare the per-prompt rates before and after, not just the pooled rate.

Cost

Async tasks cost 5 credits on ChatGPT, 4 on Gemini and 5 on Copilot. 50 prompts × 6 runs × those three engines is 300 × 14 = 4,200 credits per period, 8,400 for before and after. Synchronous calls add 2 credits each. See credits and pricing.

Related: the AI search engines and how they cite, llms.txt, and the AI visibility tracking use case. To start measuring, make a first call with the quickstart.

Questions

What is the difference between OAI-SearchBot and GPTBot?

OpenAI says OAI-SearchBot is used to surface websites in ChatGPT's search features, while GPTBot crawls content that may be used to train its generative AI foundation models. The settings are independent, so a site can allow OAI-SearchBot and disallow GPTBot.

Does blocking Google-Extended remove my site from AI Overviews?

No. Google says Google-Extended does not affect a site's inclusion in Google Search and is not a ranking signal. AI Overviews and AI Mode are controlled through Googlebot and snippet controls. Google-Extended does govern training of Gemini models and grounding in Gemini Apps and Grounding with Google Search on Vertex AI.

Do user-triggered AI fetchers obey robots.txt?

It depends on the vendor. OpenAI says robots.txt rules may not apply to ChatGPT-User because its actions are user-initiated, and Perplexity says Perplexity-User generally ignores robots.txt. Anthropic says its bots, including Claude-User, honor robots.txt directives.

How long does a robots.txt change take to affect AI search?

OpenAI says it can take about 24 hours for its search systems to adjust after a robots.txt update, and Perplexity says changes may take up to 24 hours to be reflected. Google says recrawling can take from several days to several months depending on the page.

How do I measure whether a crawler change affected my AI visibility?

Run a fixed prompt set on the affected engine before and after the change, with several runs per prompt, and compare the share of answers that cite your domain. Use an engine or prompt group you did not change as a control, and wait at least the vendor's stated propagation time before the after period.

Try it on your own prompts

500 free credits a month, no card. One POST returns the answer, sources and citations as JSON.

Keep reading