The question
Every engine gets the same single question, unchanged: "Who is <name>?", with the name as typed (letters only, first and last name). No system prompt shapes the answer, and the check does not use the person's own chat history. Each engine is called through its API with its web search on, as in its own app, so the answer reflects both the model's training data and what it finds on the web that day.
The engines
| Engine | API | Search and sources |
|---|---|---|
| Claude | Anthropic Messages API | Web search tool, at most 3 searches; cited pages come from the answer's citations. |
| ChatGPT | OpenAI Responses API | Web search tool; cited pages from the answer's URL citations. |
| Gemini | Gemini API | Grounding with Google Search; cited pages from the grounding metadata, resolved from Google's redirect links. |
| Perplexity | Sonar API | Always searches; cited pages from the search results. |
The model names are shown on each answer. An engine that fails, refuses or is over its monthly budget is shown as not answering; the others still answer.
Answers and sources
Each answer is shown word for word, with its own formatting, and its numbered references linked to the pages it cited. Cited pages are finished before the result is saved: Gemini's Google redirect links are resolved to the real page, and a source titled only with a domain gets the page's own title, both through the same protections as any other outbound request. A source that cannot be resolved keeps its title without a link.
The analysis step
After the answers arrive, one more model (claude-haiku-4-5 by default) reads all of them and returns JSON in a fixed schema: the distinct people the answers describe under the name (with role, organization, location and which engines), facts the answers contradict each other on, answers that mix two people together, and, when the name has a claimed SelfBadge profile with verified facts, whether each answer matches them. The JSON is validated before it is shown; the answers are passed to the model as data, never as instructions. The summary at the top of a result is written from this analysis and labeled as written by a model.
Caching and limits
- Cache: a result is kept for 24 hours and shared by anyone who asks about the same name, then deleted. A cached name costs nothing and does not count toward a visitor's check.
- Per visitor: one new check a day per browser and network address.
- Overall: a daily cap on new checks (default 50) and a monthly budget per engine and for the analysis step.
- Bot check: new checks pass a Cloudflare Turnstile check, or a form-timing check where Turnstile is off.
Limits of the method
- Answers vary between runs and change as the engines and the web change. A result is a snapshot of one moment.
- Apps may add personalization, location or memory that the API call does not have, so an app's answer can differ.
- The analysis is written by a model and can be wrong; the answers themselves are unedited and shown in full.
Run the check at /ai-check. Why assistants confuse people is explained in How AI assistants identify people.
Specifications and sources
Related reference
- How AI assistants identify people: the signals assistants use, and why namesakes get mixed up.
- Disambiguation: how machines tell people with the same name apart.
- Reading a SelfBadge profile: for bots and agents: JSON-LD, .json, .md, llms.txt, the API and the MCP server.
- Entity resolution: how knowledge graphs merge records about the same person.
- All reference pages