{% extends "admin/_admin_base.html" %} {% block title %}Advertisement analytics · Admin{% endblock %} {% block admin_title %}Advertisement analytics{% endblock %} {% block admin_subtitle %}Impressions, clicks and click-through performance across placements.{% endblock %} {% block admin_actions %} All advertisements {% endblock %} {% block admin_content %}
{% set cards = [ ('Total', overview.total, 'bi-megaphone', 'primary'), ('Active', overview.status_counts.active, 'bi-broadcast', 'success'), ('Scheduled', overview.status_counts.scheduled, 'bi-clock', 'info'), ('Expired', overview.status_counts.expired, 'bi-hourglass-bottom', 'warning'), ('Disabled', overview.status_counts.disabled, 'bi-slash-circle', 'secondary'), ] %} {% for label, value, icon, color in cards %}
{{ value }}
{{ label }}
{% endfor %}
{{ overview.total_impressions }}
Total impressions
{{ overview.total_clicks }}
Total clicks
{{ '0%' if overview.average_ctr == 0 else '%.1f%%'|format(overview.average_ctr) }}
Average CTR
{% if overview.most_clicked %}
Most clicked · {{ overview.most_clicked.click_count }} clicks
{% else %}
—
Most clicked
{% endif %}
{% if overview.total == 0 %}

No data yet

Analytics appear once advertisements start collecting impressions and clicks.

Create advertisement
{% else %}

Impressions by advertisement

Clicks by advertisement

CTR comparison

Placement distribution

Active vs expired

New advertisements — last 30 days

{% endif %}

Rewarded advertisement analytics

Watch-to-unlock performance: impressions, completion rate, rewards and rejected claims.

{% set rcards = [ ('Total impressions', rewarded.impressions, 'bi-eye', 'primary'), ('Rewarded views', rewarded.completed_views, 'bi-check2-circle', 'success'), ('Completion rate', ('0%' if rewarded.completion_rate == 0 else '%.1f%%'|format(rewarded.completion_rate)), 'bi-percent', 'info'), ('Rewards granted', rewarded.rewards_granted, 'bi-unlock', 'success'), ('Video failures', rewarded.video_failures, 'bi-camera-video-off', 'danger'), ('Image fallbacks', rewarded.image_fallbacks, 'bi-image', 'warning'), ('Rejected claims', rewarded.rejections, 'bi-shield-exclamation', 'danger'), ] %} {% for label, value, icon, color in rcards %}
{{ value }}
{{ label }}
{% endfor %}
{% if rewarded.impressions == 0 and rewarded.rejections == 0 %}
No rewarded-advertisement activity yet.
{% else %}

Reward funnel

Rejected claims by reason

Video playback

{% if rewarded_breakdown %}
{% for r in rewarded_breakdown %} {% endfor %}
Advertisement Impressions Rewards Completion
{{ r.title }} {{ r.impressions }} {{ r.rewards }} {{ '%.1f%%'|format(r.completion_rate) }}
{% endif %}
{% endif %} {% endblock %} {% block scripts %} {% set has_rewarded = rewarded.impressions > 0 or rewarded.rejections > 0 %} {% if overview.total > 0 or has_rewarded %} {% endif %} {% if overview.total > 0 %} {% endif %} {% if has_rewarded %} {% endif %} {% endblock %}