A two-phase system for measuring and improving how often AI tools like ChatGPT, Perplexity, and Gemini cite your content — automated testing, scoring, and recursive blog rewriting using Python, Playwright, and local LLMs.
Most SEO tools tell you how you rank on Google. This system tells you something different: whether AI chatbots like ChatGPT and Gemini are citing you when users ask questions in your product space — and then automatically rewrites your content until they do.
The entire system was built and iterated on using Cursor with Claude Code as the agentic backend — writing, debugging, and refining the full pipeline without leaving the IDE.
(Full breakdown in the AEO Tester doc — link)
The short version: I built a Python + Playwright workflow that runs a full matrix of keywords across ChatGPT and Gemini, across Chrome/Edge/Brave, across two regions — and logs whether your brand gets cited, who's winning instead, and what to do about it.
The insight that drove it: AI answer engines don't cite randomly. They cite pages structured in specific ways. Before you can fix your content, you need to know exactly where you're invisible and who's beating you. That's what Phase 1 produces — a CSV with 400–600+ rows telling you precisely that.
Two things come out of Phase 1 that feed directly into Phase 2:
This is where the actual improvement happens. The idea is borrowed directly from Karpathy's ML autoresearch: try a change → measure → keep if better → discard if not → repeat. Except instead of optimizing a model's validation loss, you're optimizing a blog post's AEO score.
Before running Phase 2, update your scoring rules and experiment hypotheses based on the Phase 1 insight doc. This is what makes the system compound over time — each round is better calibrated than the last.
Run python run.py and the following five steps execute automatically.
What it answers: What does a page that gets cited actually look like?