Skip to content

Usage Statistics

Sublarr can send opt-in, pseudonymous usage statistics to help prioritise development, gauge compatibility, watch fleet health, and show real-world adoption. It is off by default and sends nothing until you explicitly enable it.

The processing rests on your consent (Art. 6(1)(a) GDPR). Consent is opt-in, default off, and withdrawable at any time — there are no consequences for leaving it off or turning it back off later. Withdrawing your consent also erases the data already collected from your install (see Right to erasure).

The consent card in the app and the Usage statistics setting say the same: reports are linked by a random install ID, the IP address is not stored, and both link the privacy policy and name the controller, Dennis Wittke.

A single ping, roughly once every 24 hours. Every field is an enum, a boolean, or a coarse bucket — never a raw count and never free text.

FieldExampleWhy
install_idrandom opaque idDe-duplicate installs and count active ones; generated locally, not derived from anything identifying. A restored database gets a new id, so a backup restored onto a second instance never reports as the original install; the opt-in choice is kept
version1.17.0Which versions are in use
archamd64 / arm64Platform split (e.g. Raspberry Pi adoption)
db_backendsqlite / postgresDeployment shape
providers_enabled["addic7ed"]Which providers are popular
library_size_bucket1k-10kRough deployment size (a bucket, never an exact count)
reported_atISO-8601When the ping was sent
FieldExampleValues
translation_enabledtrueboolean
translation_backendollamaollama / openai / none (type only — never a model name or URL)
media_server_typeembyjellyfin / emby / plex / kodi / multiple / none
sonarr_connectedtrueboolean
radarr_connectedfalseboolean
standalone_modefalseboolean
redis_usedtrueboolean
FieldExampleValues
interface_languagedelow-cardinality locale code
auth_typeproxynone / ui / proxy
update_channelstablestable / rc / beta (derived from the version suffix)

Each value is a bucket on the same scale as library_size_bucket (e.g. <100, 100-1k, 1k-10k), never an exact count.

FieldExample
series_bucket100-1k
movies_bucket<100
downloads_bucket1k-10k
translation_jobs_bucket<100

providers_enabled in the core cannot distinguish a deliberate choice from the default: an empty allow-list means “all registered”, so an install that picked nothing looks exactly like one that hand-picked every provider. This group separates the two, and adds which providers actually produce results.

FieldExampleWhy
curatedtrueWhether you restricted providers at all, or left the default
enabled["subdl"]Your explicit list — empty when curated is false
delivering["subdl"]Providers that produced at least one subtitle in the last 30 days

Provider names only. There is no per-provider count: a tally of how many subtitles each one produced would be a rough fingerprint of library size, and the payload rule is enum, boolean or bucket throughout.

Four yes/no markers for how far an install got between installing and its first subtitle. No counts, sizes or names. Current app versions send this group, but the collector does not store it — it is discarded on arrival.

FieldExampleValues
setup_completedtrueboolean — the onboarding wizard was finished
library_scannedtrueboolean — the library produced at least one wanted item
scheduler_rantrueboolean — a scheduled job has run at least once
first_download_donefalseboolean — at least one subtitle was downloaded
FieldExampleWhy
auto_disabled_count0Fleet-health signal — how many providers auto-disabled, never which ones

Next to the fields above, the collector records per install the time of the first and the last report (first_seen, last_seen). That is what the 180-day retention below is measured against.

No hostname, no filesystem path, no series/movie title, no API key, no exact counts, and no per-user or per-library-content data.

Your IP address is necessarily transmitted when your install connects: stats.sublarr.de is reachable through Cloudflare, like the website (see the privacy policy). The collector itself does not store or log it. Which provider credentials an install has configured is deliberately not collected.

  • Installs: an install’s row is kept only while it stays active. If it stops pinging, it is deleted 180 days after its last activity (last_seen).
  • Aggregate snapshots: the public trend charts are built from daily snapshots that hold only anonymous aggregate counts (no install_id). Because they are anonymous, they are kept for 24 months.
  • Backups: deleted rows can survive in system backups for up to four weeks before those are overwritten.

Because your install stores its own install_id locally, you can delete your data without knowing any server-side identifier. Turning the toggle off withdraws consent and fires POST /v1/forget {install_id}, which deletes your install’s row on the server. You never need to email anyone to be forgotten — though you still can (see the privacy policy). If that request fails (for instance because your server is offline at that moment), the row is removed by the 180-day rule instead.

  • New installs: you are asked once during onboarding.
  • Existing installs: you are asked once in the “What’s New” dialog after updating.
  • Any time: Settings → About → Usage statistics.

The public aggregate is shown at sublarr.de/stats.