Data Sources
Where AIEO.ee's SEO and GEO numbers come from — mock, DataForSEO, Search Console and live AI-search backends.
In demo mode (DEMO_MODE=true, the default outside production) the
platform runs end-to-end with zero external keys. In production the SEO data
provider must be configured — there is no silent mock fallback. This page
maps every number in the product to its source so you always know what you
are looking at.
SEO / SERP data
| Mode | When | What you get |
|---|---|---|
| Mock provider (demo only) | DEMO_MODE=true and no DataForSEO configured | Deterministic weighted SERP data so rank tracking, gaps and competitor discovery all function. Good for evaluation and demos; not real Google positions. |
| DataForSEO | DATAFORSEO_LOGIN + DATAFORSEO_PASSWORD set (env or admin console) | Real keyword metrics (volume, difficulty, CPC, intent), keyword ideas and live SERP snapshots on demand. Domain-level pages are local aggregations of your tracked data; backlinks read the stored profile (no live backlink provider yet). |
Outside demo mode, a rank/research call without DataForSEO configured
fails loudly (DataForSEO is not configured) rather than fabricating
positions. SERP depth is a platform setting (default 100).
Google Search Console
Connect GSC (Settings → Sites) to import your real query/page performance:
- OAuth with a one-time state; you pick the property after authorizing.
- Tokens are stored encrypted; sync pulls site totals by day plus detail by query+day and page+day, re-pulls the last 3 days each run to settle late-arriving data, and advances its cursor only after a fully successful run.
- Powers the Search Analytics page: clicks, impressions, CTR, average position, and query-level trends.
GSC is optional and independent of DataForSEO.
GEO / AI-answer data — live vs sampled
This is the distinction that matters most. Each GEO run is labeled with a
data_source:
-
live— the engine has a real AI-search backend AND that backend returned genuine search evidence for this run. Three engines support a live backend:- ChatGPT — OpenAI web search (
OPENAI_API_KEY) - Perplexity — direct Sonar API (
PERPLEXITY_API_KEY) - Google AI Overview — Gemini grounding (
GEMINI_API_KEY)
A live run's citations are real sources the backend actually retrieved.
- ChatGPT — OpenAI web search (
-
sampled— every other case: engines without a live backend (Claude, Gemini chat, Copilot, Qwen, Doubao, Hunyuan, GLM), a live engine whose key is not configured, or a live call that returned no search evidence (the run is automatically demoted to sampled). An LLM reproduces what it believes the answer engine would say.
Treat sampled numbers as a directional signal, not a measurement of the
consumer product. The UI shows the data_source label on every engine and
every run; these docs hold the same line. Do not present a sampled engine as
"we queried ChatGPT/Copilot live."
The mock provider
With DEMO_MODE=true (the default outside production), a deterministic mock
AI provider answers prompts so the whole GEO pipeline — tracking, parsing,
SOV, citations — runs end-to-end with no AI keys at all. Mock runs are labeled
and are ideal for evaluating the product; in production DEMO_MODE is off and
the mock fallback throws rather than fabricating data.
AI providers (for the Agent, briefs, analysis)
The Growth Agent, content briefs and weekly analysis call an LLM through a
provider router. Configure any of OpenAI / Anthropic / Gemini / OpenRouter, or
the OpenAI-compatible Qwen / Doubao / Hunyuan / GLM adapters — via environment
variables or the platform admin console. Without a configured provider (and
with DEMO_MODE on) these features use the mock provider.
Summary
| Feature | Demo mode, no keys | + DataForSEO | + GSC | + AI/live keys |
|---|---|---|---|---|
| Rank tracking & gaps | mock (demo only) | real SERP | — | — |
| Search Analytics | — | — | real GSC | — |
| GEO (sampled) | mock | mock | mock | LLM sampling |
| GEO (live) | — | — | — | real citations |
| Agent / briefs | mock | mock | mock | real LLM |
Every degradation is labeled in-product. When a number could be mock or sampled, the UI says so — the platform never silently presents fabricated data as live.