back to index

AEO Queries

A Chrome extension that records the exact search queries ChatGPT, Claude and Perplexity issue when answering a prompt

repo: https://github.com/EricSpencer00/aeo-extension


GitHub Repo · Privacy Policy

An assistant asked to compare two products does not search for the sentence it was given. It rewrites that sentence into several precise queries and searches those instead. The pages that rank for the rewritten queries are the pages the model reads, and therefore the brands it names in the answer. Those strings, not the original prompt, are the optimisation target. AEO Queries records them as they are issued.

A single Perplexity prompt comparing headphone warranties produced nine distinct searches, including site:-scoped ones aimed at the manufacturers' own documentation and a price query with the current month pinned into it. None of the nine matched the wording of the prompt. Guessing at that set is the hard part of answer engine optimisation; reading it off the wire removes the guessing.

How it works

The extension observes the responses those pages already receive and recovers the query text from them. On Perplexity that means every issued query, reformulations and operators included. On Claude it is each web_search tool call. On ChatGPT it is the browsing tool's queries, which are present only when signed in.

Signed-out ChatGPT is a real gap and it is not one an extension can close. The anonymous web app reports only that it is "searching 7 websites" and never delivers the query text to the browser. What the server does not send cannot be recovered. Signed in, the queries come through.

Verification

Each supported site was checked by loading the packaged extension into Chrome, asking the live site a real question while signed in, and reading what actually landed in storage: nine queries from one Perplexity prompt, three from Claude, eleven from ChatGPT. Gemini and Copilot are best-effort and were not verified that way.

Scope and permissions

The manifest is version 3 and asks for storage and sidePanel plus eight named hosts. There is no <all_urls>, no tabs, no scripting, and no activeTab. The extension is inert everywhere outside those hosts. Nothing is uploaded: there is no analytics, no telemetry, and no error reporting, and the packaging script refuses to build if a localhost address survives into the shipped manifest. Reading the responses those eight sites return is the entire product, which is why the host list is the shape it is.

Output

Status

Version 2.0.0 is packaged and passing its 69-check suite. The build comes from an explicit allow-list, so tests, fixtures and tooling cannot reach the upload. Until the Chrome Web Store listing is live, installation is through chrome://extensions with developer mode on and "Load unpacked" pointed at the repository.