Privacy · 10 October 2026

What Logcaliper sends, and what it does not

The app and this site are made by one person for engineers who read privacy pages. So this one names the actual events, every property they carry, and the one identifier. The page lives in the site's public repository, so its history is public too.

  • No account, no sign-in, nothing to register, no permissions asked for.
  • The app sends usage events to Amplitude: which screen, which conversion, a game score. They are listed below, with everything they carry.
  • No name, no email, no contacts, no location, and from version 3.1.1 no number you typed. Until then one event carried two numbers you could set by hand; it is named below.
  • The website counts visits with GoatCounter, without cookies. The profiler page sends nothing at all.
  • Nothing is sold, shared or used for advertising, and nothing is joined with data from other apps or sites. The app's privacy manifest says no tracking; the App Store label says Data Not Linked to You.

The app

Logcaliper for iOS uses the Amplitude analytics SDK. Every event it sends is in this table, with the properties attached to it. A debug build, the kind that runs from Xcode, sends none of them, the SDK's own session events included, from version 3.1.1; in 3.1.0 a debug build still sent those two.

EventWhenWhat it carries
Session startedthe app launches (a cold start, not each return to the front)app_version; units_mode, decimal or binary; mode, conversion or comparison. Until 3.1.1 the last two were always their defaults, because the event went out before the saved settings were read.
session_start, session_endthe SDK's own: session_start when a session begins, at a launch or a return to the front after more than five minutes away, and session_end for the previous session at that same moment, stamped with the time the app last leftno properties of their own, only the device fields listed below, like every event
Conversiona conversion is computedunit_source and unit_target, the units; units_mode; vendor and category if a source is picked; payload_bps, which decade the resulting bit rate falls in, from under 1 kbit/s to over 100 Gbit/s. Not the number you typed.
Comparisona comparison is shownunit_source, unit_target
Estimatethe Storage screen computessource_count; compression and distributed_storage, on or off; retention, the period as shown; result_unit, the unit the total is shown in; units_mode
Share button clickedthe share sheet openssource_count; result_unit
Device added to lista source joins your listvendor, the source's name from the catalogue, and nothing else from version 3.1.1. Until then it also carried logsize, the event size, and rate, the number you typed converted to events per second: the only two numbers you could set by hand that left the app. They no longer do.
Change units, Change mode, Change compression ratioa setting changesthe new setting
About page selectedAbout opensapp_version
Asked for a reviewthe app asks Apple to show its rating prompt: from 3.1.1 at most once per version, after an estimate, a share or a copy, never in the first session and not before two days after the first launch (until then, every time the Log tab appeared)moment, estimate, share or copy; session_count; days_since_first_launch, or -1 for someone who had the app before 3.1.1; app_version. Until 3.1.1: launch_count, the appearance count the prompt was keyed to
Profiler link tappedfrom 3.1.1, a choice is made under "Measure yours" on the Log tabfrom, log; action, open or send. Not the link's destination, which is always the profiler, and nothing about what you do there: the profiler has no counter.
About row tappedfrom 3.1.1, one of the About rows that opens something is tappedrow: missing_source, rate, website or privacy
Game opened, Game started, Game over, Game sharedThreshold, in the appfrom, where it was opened; score, level, answered

What the SDK adds on its own

A device identifier, which is Apple's identifier for vendor: a value specific to Logcaliper's developer on your device, which Apple resets once every app from that developer is gone. It is not the advertising identifier, which the app never reads. With it, on every event: the app version, the OS name and version, the device model and maker, the platform, the language, the carrier's name, the SDK's own name and version, a session id, a timestamp and a per-event id. Amplitude derives a country, a region and a city from the address the request arrives from; the app sends no location. Events are queued on the device and go to Amplitude's servers in the United States in batches: every thirty seconds or thirty events while the app is open, once more as it goes to the background, and anything still queued the next time it opens. Amplitude keeps them under its own terms.

What I keep

A small script pulls daily totals out of Amplitude onto a private dashboard: how many events of each kind on each day, how many active devices, and how many devices per country per day. No individual event is copied, and the dashboard has no way to see one. The same dashboard reads what Apple reports about the listing: views, downloads, updates and deletions by country and device, which is Apple's data under Apple's policy, with nothing in it that names a person.

What the app does not do

The website

These pages count visits with GoatCounter: the home page, Sources and its pages, the rate pages under /eps/, Fun, the quiz and its score pages, the game, and this page. Only the profiler does not. On each, the browser sends GoatCounter the page's address (its path and any query string), its title, the referrer, the screen width and a flag saying whether the browser looks automated. Some links are counted when tapped, such as the App Store badge and the links between these pages: the count carries the link's name and its label. The quiz also counts when a round starts, daily or practice, when it ends, with your score out of ten as the name of the event, and when a result is shared or the card is saved. The game counts a start, a game over, a share and a tap on its App Store link; the score is not sent.

GoatCounter keeps hourly totals by path and by referrer, and daily totals by browser and operating system (read from the request headers), country (from the address), language and screen width, on servers in Finland and Germany, with backups kept for up to thirty days. Its option to record individual page views is off for this site. The address and the full browser signature are not stored with the totals: to count a visit once rather than every reload, GoatCounter keeps the site id, your browser's User-Agent string and your address together as a key in memory, matched to a random id, and only the random id reaches the database; the key is dropped eight hours after the last page it saw from you. No cookie is set. I pull the per-day totals onto the same private dashboard.

The profiler has no counter at all and loads nothing from anywhere but this site: its own scripts, the site's icons and, when you ask for it, its sample log, which its Content-Security-Policy pins to logcaliper.app. The file you give it is read in your browser and never leaves it. Its own test refuses any outside address in the page and any use of browser storage.

What stays in your browser

The quiz remembers that you played a given day's ten, one entry for each day you played, kept until you clear it. The game keeps your best score and whether the sound is on. Both sit in your browser's local storage, which you can clear; no page on the site reads them except the one that wrote them. The counter script reads one local-storage flag of its own on every counted page, which exists only if you opt out of it yourself (open any counted page with #toggle-goatcounter on the end of its address). The profiler stores nothing. There are no cookies on the site.

Apple and GitHub

On an iPhone or iPad, Safari draws its own banner for the app above these pages, the profiler included; to do that Safari asks Apple for the listing, and the page sends nothing. The home page's App Store badge is a picture served by Apple: opening the home page fetches it from Apple's server once, then from cache for a week, with your address, browser and this site's name, as any image request carries. Nothing else on the site loads from Apple. Links to the App Store carry a campaign tag naming the page they sit on; Apple's campaign reports also need a provider token, which these links do not carry yet, so Apple reports nothing to me per page today, and what Apple does with the tag is under Apple's policy. The site is served by GitHub Pages, whose request logs are under GitHub's privacy statement.

Your choices

Deleting the app ends its events. There is no account, so there is nothing to look up, export or delete by name: the events are keyed to the device identifier above, which neither you nor I can read off a device, and which Apple resets when the developer's apps are gone. Questions, or something on this page that does not match what you see on the wire: @cbriguet, or an issue on the site's repository.

Changes

10 October 2026. For version 3.1.1 of the app: "Device added to list" no longer carries the rate and the event size you set; the review prompt asks at the end of a task, at most once per version, and its event fires only when it asks; new events count taps on the About screen's rows and the choice made under the Log tab's "Measure yours"; links to the App Store and the home page in a shared estimate carry a tag naming where they came from. The profiler loads its own scripts and, when you ask, its sample log.

9 October 2026. This page replaces a generated policy. The app's About screen links here from version 3.1.1, and the App Store listing points here from the same release.