Docs

Dashboard Metrics

This page documents how dashboard metrics are calculated today, based on the current dashboard and analytics API logic. As of February 25, 2026, the dashboard also supports a quiz filter (All quizzes or a specific quiz) and selected-quiz performance insights.

Dashboard cards

  • Total Quizzes: Count of all quizzes where quizzes.owner_id = current user, including drafts and published quizzes.
  • Published Quizzes: Count of owned quizzes where status = "published".
  • Total Submissions: Count of all submission rows in the current dashboard quiz filter (de-duplicated by (quiz_id, submission_id) key logic in the dashboard page).
  • Submissions this month: Count of submissions with created_at >= UTC month start in the current dashboard quiz filter.
  • Leads this month: Count of rows in leads for owned quizzes since period start:
    • Free plan: UTC month start.
    • Paid plans: inferred billing period start (current_period_end - 1 month).
    • Note: This card remains account-level.

Leads & submissions chart

The Leads & submissions chart reads /api/analytics/funnel-timeseries and is available on paid plans.

  • Date window options: 7d, 30d, 90d (UTC day buckets).
  • Quiz filter: quizId=all (default) or a specific owned quiz id.
  • Submissions series: Daily count of submissions.created_at for the selected quiz filter.
  • Leads series: Daily unique count across both:
    • leads
    • completion_cta_leads Deduplicated per day by (quiz_id, submission_id).
  • Conversion series: submissions / leads * 100 for each day (as currently implemented).
  • Free plan behavior: API returns 402 PAYWALL and the UI shows upgrade messaging.

Quiz insights panel (selected quiz only)

When a specific quiz is selected in the dashboard filter, the Quiz insights panel loads:

  • /api/analytics/quiz-funnel
    • Started: Unique (quiz_id, submission_id, run_id) runs with event_type=start.
    • Reached gate: Runs with event_type=step_view where step_type=lead_gate.
    • Completed: Runs with event_type=complete.
    • CTA clicks: Count of submission_exit_events where action=completion_cta.
  • /api/analytics/question-dropoff
    • Reached count: Runs that viewed each block (submission_step_events, event_type=step_view).
    • Answered count: Submissions that contain an answer value for that block id.
    • Completion rate: answered_count / reached_count * 100 (answerable blocks only).
    • Drop-off after block: Runs that reached current block but not the next block.
  • /api/analytics/completion-outcomes
    • Clicks: Completion CTA exits grouped by label/style/location/rule index.
    • Lead clicks: Matching rows in completion_cta_leads.
    • Outcome type: CTA goalType (builder-defined key, for example booking, request_demo, watch_webinar).
    • Legacy rows without explicit goalType can fall back to keyword classification for booking.

Interpretation notes

  • If submissions increase while leads stay flat, common causes are skipped lead capture, lead limits reached, or a flow without lead collection.
  • Chart leads can include completion CTA lead captures (completion_cta_leads) that are separate from lead-capture step submissions.
  • The leads usage card remains account-level even when a single quiz is selected.
  • For best attribution quality, set CTA goal types in completion CTA settings (base and rule-specific CTAs).

Related resources