Documentation
Technical platform docs
Operator and implementer reference for OAuth, sync, integrations, and health checks. For the product getting-started path, see the Guide.
OAuth & Google scopes
Sign-in uses Auth.js with Google. Production requires AUTH_URL, AUTH_SECRET, AUTH_GOOGLE_ID, and AUTH_GOOGLE_SECRET. Redirect URI:
https://conversionconsole.com/api/auth/callback/google
Requested scopes (read-oriented): openid, email, profile, Search Console readonly, Analytics readonly, AdWords, Tag Manager readonly. After expanding scopes, users must re-consent from Connect.
Full reference: /docs/oauth
Connect flow
- Sign in is invite-only via
ALLOWED_EMAILSuntilPUBLIC_SIGNUP=trueopens free accounts. - Dashboard → Connect: authorize Google (and Bing if configured), pick GSC / GA4 / Ads / GTM properties per site.
- Clarity is per-site (project ID + API token), not a global env var.
- Additional platforms and LLM keys live under Dashboard → Integrations.
Sync & insight engines
Sync now pulls connected sources into MySQL (or local SQLite in dev). Insight recipes (cannibalization, intent leaks, GTM hygiene, etc.) run on synced aggregates — pure math by default, no platform LLM bill.
Missing connectors hide related alerts; they do not hard-fail the dashboard. Details: /docs/sync.
Google Ads (read-only)
Requires GOOGLE_ADS_DEVELOPER_TOKEN and OAuth AdWords scope. API posture is read-only (Basic Access reporting). Conversion Console does not programmatically modify campaigns, budgets, or creatives.
Bing & Clarity
Bing Webmaster uses MICROSOFT_CLIENT_ID / MICROSOFT_CLIENT_SECRET with callback /api/integrations/bing/callback. Optional BING_WEBMASTER_API_KEY may be stored for future API-key paths; OAuth powers current sync.
Clarity: paste project ID + bearer token on the site Connect form.
BYO LLM keys
Strategy chat can use customer-supplied OpenAI, Claude, or Gemini keys from Integrations. Built-in insight recipes do not require an LLM. Keys are stored per user/workspace configuration — not hardcoded in server env for multi-tenant use.
Operator env & database
Hostinger prefers split DB vars (DB_HOST=localhost, DB_USER, DB_PASSWORD, DB_NAME) so special characters in passwords work. Set ENABLE_APP_ROUTES=true to unlock dashboard/auth on production. Locally, USE_SQLITE_DEV=true uses a file DB and skips Hostinger MySQL.
If Hostinger cannot execute Prisma schema-engine during build (EACCES), push schema from a machine with Remote MySQL: npm run db:hostinger:push.
Troubleshooting
- Check /api/health for database, OAuth, and env flags.
- OAuth scope errors → re-authorize from Connect with full consent.
- Empty insights → confirm sync completed and required sources are linked.
- Deep dive: /docs/troubleshooting