↻ Auto-Refresh
📅 {{ period_label }} |
{% if compare %} vs. {{ compare_label }} {% else %} | {% endif %}
Uebersicht Seiten Traffic-Quellen 🏢 Companies 🎯 Ziele Einbindung 🎬 Recordings 🔥 Heatmaps
Unique Visitors
{{ stats.unique_visitors }}
{{ period_label }} {% if deltas and deltas.unique_visitors is not none %} {% set d = deltas.unique_visitors %} {% if d > 0 %}▲{% elif d < 0 %}▼{% endif %} {{ d|abs }}% {% endif %}
{% if compare_stats %}
Vergleich: {{ compare_stats.unique_visitors }} ({{ compare_label }})
{% endif %}
Sessions
{{ stats.sessions }}
{{ period_label }} {% if deltas and deltas.sessions is not none %} {% set d = deltas.sessions %} {% if d > 0 %}▲{% elif d < 0 %}▼{% endif %} {{ d|abs }}% {% endif %}
{% if compare_stats %}
Vergleich: {{ compare_stats.sessions }} ({{ compare_label }})
{% endif %}
Bounce Rate
{{ "%.1f"|format(stats.bounce_rate) }}%
{% if stats.bounce_rate < 50 %}Gut{% else %}Hoch{% endif %} {% if deltas and deltas.bounce_rate is not none %} {% set d = deltas.bounce_rate %} {% if d > 0 %}▲{% elif d < 0 %}▼{% endif %} {{ d|abs }}% {% endif %}
{% if compare_stats %}
Vergleich: {{ "%.1f"|format(compare_stats.bounce_rate) }}% ({{ compare_label }})
{% endif %}
Verweildauer
{{ avg_duration_fmt }}
min:sek {% if deltas and deltas.avg_duration is not none %} {% set d = deltas.avg_duration %} {% if d > 0 %}▲{% elif d < 0 %}▼{% endif %} {{ d|abs }}% {% endif %}
{% if compare_stats %} {% set cs = compare_stats.avg_duration %}
Vergleich: {{ cs // 60 }}:{{ "%02d"|format(cs % 60) }} ({{ compare_label }})
{% endif %}
Besucher-Verlauf {% if compare_stats %} {{ period_label }} {{ compare_label }} {% endif %}
Traffic-Quellen
Top Seiten {{ top_pages|length }} Seiten
{% if top_pages %} {% for p in top_pages[:10] %} {% endfor %}
SeiteAufrufeBounce
{{ p.path }} {{ p.views }} {{ "%.0f"|format(p.bounce_rate) }}%
{% else %}

Noch keine Daten. Script einbinden und warten.

{% endif %}
Geraete
{% if compare_stats %}
📈 Perioden-Vergleich {{ period_label }} vs. {{ compare_label }}
Metrik{{ period_label }}{{ compare_label }}Differenz
Unique Visitors {{ stats.unique_visitors }} {{ compare_stats.unique_visitors }} {% set diff = stats.unique_visitors - compare_stats.unique_visitors %} {% if diff >= 0 %}+{% endif %}{{ diff }}
Sessions {{ stats.sessions }} {{ compare_stats.sessions }} {% set diff = stats.sessions - compare_stats.sessions %} {% if diff >= 0 %}+{% endif %}{{ diff }}
Bounce Rate {{ "%.1f"|format(stats.bounce_rate) }}% {{ "%.1f"|format(compare_stats.bounce_rate) }}% {% set diff = stats.bounce_rate - compare_stats.bounce_rate %} {% if diff >= 0 %}+{% endif %}{{ "%.1f"|format(diff) }}%
Verweildauer {{ avg_duration_fmt }} {% set cs = compare_stats.avg_duration %}{{ cs // 60 }}:{{ "%02d"|format(cs % 60) }} {% set diff = stats.avg_duration - compare_stats.avg_duration %} {% if diff >= 0 %}+{% endif %}{{ diff }}s
{% endif %}
Alle Seiten — {{ period_label }} {{ top_pages|length }}
{% if top_pages %} {% set total_views = namespace(v=0) %} {% for p in top_pages %}{% set total_views.v = total_views.v + p.views %}{% endfor %} {% for p in top_pages %} {% endfor %}
PfadAufrufeBounce RateAnteil
{{ p.path }} {{ p.views }} {{ "%.0f"|format(p.bounce_rate) }}% {% if total_views.v > 0 %} {% set pct = (p.views / total_views.v * 100)|round(1) %}
{{ pct }}%
{% endif %}
{% else %}

Keine Seiten-Daten im gewählten Zeitraum.

{% endif %}
Traffic-Quellen — {{ period_label }}
{% if compare_stats %}{% endif %} {% set src_colors = {'organic': '#22c55e', 'direct': '#6366f1', 'paid': '#eab308', 'social': '#3b82f6', 'referral': '#f97316'} %} {% set src_names = {'organic': 'Organisch', 'direct': 'Direkt', 'paid': 'Paid/CPC', 'social': 'Social Media', 'referral': 'Referral'} %} {% set total_src = namespace(v=0) %} {% for k, v in stats.traffic_sources.items() %}{% set total_src.v = total_src.v + v %}{% endfor %} {% for k, v in stats.traffic_sources.items() %} {% if compare_stats %} {% set cv = compare_stats.traffic_sources.get(k, 0) %} {% endif %} {% endfor %}
QuelleSessionsVergleichΔAnteil
{{ src_names.get(k, k) }} {{ v }}{{ cv }} {% set diff = v - cv %} {% if diff != 0 %} {% if diff > 0 %}+{% endif %}{{ diff }} {% else %}{% endif %} {% if total_src.v > 0 %} {% set pct = (v / total_src.v * 100)|round(1) %}
{{ pct }}%
{% else %}{% endif %}
Verteilung
{% if companies %}
🏢 Identifizierte Unternehmen — {{ period_label }} {{ companies|length }} Firmen
{% for c in companies %} {% endfor %}
UnternehmenDomainBesucheAnsprechpartner
{{ c.company_name }} {% if c.domain %}{{ c.domain }}{% else %}—{% endif %} {{ c.visits }} {% if c.contacts %} {% for contact in c.contacts[:3] %}
{{ contact.first_name }} {{ contact.last_name }} {{ contact.title }} {% if contact.email %}{% endif %}
{% endfor %} {% if c.contacts|length > 3 %}
+{{ c.contacts|length - 3 }} weitere
{% endif %} {% else %} Noch nicht gesucht {% endif %}
{% if c.contacts %} {% endif %}
{% else %}
🏢

Noch keine Unternehmen identifiziert

Unternehmens-Netzwerke werden automatisch erkannt wenn sie die Website besuchen.

{% endif %}
Conversion-Ziele — {{ period_label }}
Lade Ziele...
Conversions im Zeitraum
Lade Conversion-Daten...
📋 Tracking-Script einbinden ({{ current_domain.name }})

In den <head> oder vor </body> einfuegen:

<!-- netgrade Analytics --> <script src="https://analytics.netgrade.de/ng.js?id={{ tracking_id }}" async></script>
📊 Custom Events
// Conversion tracken window.nga.track('lead_form_submit', { form: 'kontakt' }); // Kauf-Event window.nga.track('purchase', { value: 199.00, currency: 'EUR' }); // SPA Pageview window.nga.pageview();
🔑 REST API
# Stats (Zeitraum via date_from/date_to) curl -u netgrade:analytics2026! \ "https://analytics.netgrade.de/api/v1/stats?domain_id={{ domain_id }}&date_from=2026-04-01&date_to=2026-04-10" # Companies curl -u netgrade:analytics2026! \ "https://analytics.netgrade.de/api/v1/companies?domain_id={{ domain_id }}&days=30"
🔒 Consent-Banner (DSGVO) — in Website einbinden

Diesen HTML-Snippet direkt vor </body> einfügen (nach dem Analytics-Script):

🔒 DSGVO-Hinweis: Heatmaps laufen immer (anonymisiert, keine Session-ID). Session Recordings erfordern Consent-Level full. Alle Eingabefelder (Input, Textarea, Select) werden in Recordings automatisch maskiert. Consent-Banner nur nötig wenn du Session Recordings nutzen willst.
🎬 Session Recordings
🔒 Alle Eingaben DSGVO-konform maskiert

🔁 Lade Recordings...

🔥 Heatmap-Visualisierung
🔥

Keine Heatmap-Daten

Heatmap-Daten werden automatisch (anonymisiert) gesammelt — kein Consent erforderlich.