// behind the scenes
What happens in those 30 seconds
You paste a brand. We read the live web with Exa, score how AI search sees it, and Gemini turns the signal into a playbook. Here is every step.
01
You name a brand
Type a company name. We resolve it to the one canonical website, so the whole report is about the right brand.
exa.search (8) → gemini-3.1-flash-lite picks the official domain
02
Exa reads its world
Exa pulls the brand's own pages (homepage, pricing, features, docs) and finds its real rivals by similarity, not guesswork.
exa.getContents (pricing · features · docs · livecrawl) + exa.findSimilar
03
We score AI visibility
For each question a buyer would ask, we see who AI search surfaces. How often the brand shows up, and how high, becomes its GEO score.
exa.search (type: auto · 20 results) per buyer question → GEO 0–100
04
We check what AI says
Then the real test: we ask the questions and read the AI's answer. Does it actually cite the brand, or only the competitors?
exa.answer per question → is the brand in the citations?
05
Gemini writes the play
Gemini compares everyone, finds the edge, and writes the playbook. It streams into a live deck that fills in as the report builds.
gemini-3.1-flash-lite (seed 7 · JSON) → NDJSON stream → live deck
// what it runs on
Exa
exa-js · Search (type: auto) · Find Similar · Contents (subpages, livecrawl) · Answer
Google Gemini
@google/genai · gemini-3.1-flash-lite · structured JSON · seed 7
Next.js · React
16 App Router · React 19 · NDJSON streaming
Vercel
Functions (Node · maxDuration 120) · security headers
Upstash Redis
per-IP rate limits · 6/min burst · 60/day
Google Cloud Storage
cached reports · daily spend budget
// notes for engineers
- › The report streams as NDJSON: identity → visibility → strategy → playbook sections render as they finish, so the deck fills in live instead of waiting for the whole pipeline.
- ›Every Exa call is wrapped with retry + backoff, and untrusted page text is fenced in <UNTRUSTED_CONTENT> guards before it reaches Gemini.
- › Reports are cached in Google Cloud Storage + Redis, and a daily spend budget caps cost.
architecture overview · no secrets shown · back to the scout