Conversion Console

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

  1. Sign in is invite-only via ALLOWED_EMAILS until PUBLIC_SIGNUP=true opens free accounts.
  2. Dashboard → Connect: authorize Google (and Bing if configured), pick GSC / GA4 / Ads / GTM properties per site.
  3. Clarity is per-site (project ID + API token), not a global env var.
  4. 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