πŸ“Š Message statistics

← Back to settings
All stats computed locally from your Messages database. No data leaves this machine. Range: {{ date_range }}.
{% set grand_total = sent_total + received_total %}

Sent vs received

{% if grand_total > 0 %}
Sent
{{ sent_total | int }}
Received
{{ received_total | int }}

{{ grand_total | int }} messages total β€” {{ (sent_total / grand_total * 100) | round(0) | int }}% sent, {{ (received_total / grand_total * 100) | round(0) | int }}% received.

{% else %}

No messages in this date range.

{% endif %}

Top contacts

{% if top_contacts %} {% set max_count = top_contacts[0].count %}
{% for c in top_contacts %}
{{ c.name }}
{{ c.count }}
{% endfor %}

Most-texted contact: {{ top_contacts[0].name }} ({{ top_contacts[0].count }} messages).

{% else %}

No data.

{% endif %}

Activity by hour

Local time β€” darker = more messages.

{% set hour_max = namespace(val=1) %} {% for c in hour_counts %}{% if c > hour_max.val %}{% set hour_max.val = c %}{% endif %}{% endfor %}
{% for c in hour_counts %} {% set pct = (c / hour_max.val * 100) | round(0) | int %}
{% if loop.index0 % 6 == 0 %} {{ loop.index0 }} {% else %} Β· {% endif %}
{% endfor %}
{% set peak_hour = namespace(h=0, v=0) %} {% for c in hour_counts %}{% if c > peak_hour.v %}{% set peak_hour.h = loop.index0 %}{% set peak_hour.v = c %}{% endif %}{% endfor %} {% if peak_hour.v > 0 %}

Peak hour: {{ peak_hour.h }}:00–{{ peak_hour.h }}:59 ({{ peak_hour.v }} messages).

{% endif %}

Activity by day of week

Mon–Sun β€” darker = more messages.

{% set dow_labels = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] %} {% set dow_max = namespace(val=1) %} {% for c in dow_counts %}{% if c > dow_max.val %}{% set dow_max.val = c %}{% endif %}{% endfor %}
{% for c in dow_counts %}
{{ dow_labels[loop.index0] }}
{% endfor %}
{% set peak_dow = namespace(d=0, v=0) %} {% for c in dow_counts %}{% if c > peak_dow.v %}{% set peak_dow.d = loop.index0 %}{% set peak_dow.v = c %}{% endif %}{% endfor %} {% if peak_dow.v > 0 %}

Busiest day: {{ dow_labels[peak_dow.d] }} ({{ peak_dow.v }} messages).

{% endif %}
{% if top_groups %}

Top group chats

{% set grp_max = top_groups[0].count %}
{% for g in top_groups %}
{{ g.name }}
{{ g.count }}
{% endfor %}

Most active group: {{ top_groups[0].name }} ({{ top_groups[0].count }} messages).

{% endif %}

Generated by chatwire · all data stays on your Mac