How Focus Meter Stores Your Data: SQLite, No Network Calls, Zero Telemetry
Most "privacy-first" product claims boil down to branding. You'll see the word "local" in the marketing copy, then find a privacy policy that reserves the right to share "anonymized usage data." If you're going to trust a tracker with a continuous record of your work, the vendor should be specific about where data lives, what leaves your machine, and how to verify the claim.
This post is the specifics for Focus Meter. What's stored, where, how to query it yourself, and what happens over the network. No marketing language.
What's stored
Three kinds of data, all local:
1. Activity samples. Every few seconds while you're active, Focus Meter records the frontmost app, the current browser URL (if you enabled URL tracking), and a timestamp. These are the raw data.
2. Categorization metadata. Your mappings of apps and domains to Productive / Neutral / Distracting. A few hundred rows for most users.
3. Settings and preferences. App configuration, idle thresholds, which browsers have URL tracking enabled, etc.
That's it. No screenshots, no keystrokes, no clipboard contents, no window contents, no meeting audio. The data model is limited on purpose — broader data collection (keystrokes, screenshots) would be harder to justify storing even locally.
Where it lives
The database is a single SQLite file at:
~/Library/Containers/com.cmon.focusmeter/Data/Library/Application Support/Focus Meter/focus-meter.sqlite
The path is inside the Mac App Store sandbox container, which is why it's deep in Containers/. Sandboxing is an Apple requirement for App Store apps and has the nice side effect that the file is automatically scoped to Focus Meter — no other app can reach it without your permission.
The file is a standard SQLite 3 database. You can open it with any SQLite tool: the sqlite3 CLI that ships with macOS, TablePlus, DB Browser for SQLite, or a VS Code extension.
How to query it directly
You don't need Focus Meter running to read the data. Try this in Terminal:
cd ~/Library/Containers/com.cmon.focusmeter/Data/Library/Application\ Support/Focus\ Meter/
sqlite3 focus-meter.sqlite
Then:
.tables
-- shows the schema: activity_samples, apps, domains, categories, ...
-- top 10 apps by total active time today
SELECT app_name, SUM(duration_seconds)/60 AS minutes
FROM activity_samples
WHERE date(started_at, 'localtime') = date('now', 'localtime')
GROUP BY app_name
ORDER BY minutes DESC
LIMIT 10;
Your data is in standard shapes. If Focus Meter ever disappeared tomorrow, you would still have a readable database with years of your own history, portable to any tool you want. This is intentional — no vendor lock-in on data that's yours.
What the app sends over the network
The honest short answer: nothing, as part of the core app.
The longer answer, category by category:
Activity data. Never leaves your Mac. No upload, no sync, no backup service. The SQLite file is all there is.
Telemetry. None. No "anonymous usage data" toggled on by default. No crash-report body (stack traces are surfaced in-app, not sent). You can verify this with Little Snitch or Lulu — the app makes no outbound connections at rest.
Update checks. Handled by the Mac App Store, not by Focus Meter directly. Apple checks for updates on its own schedule using your Apple ID, same as for every MAS app. Focus Meter never talks to update servers.
License check. None. Because Focus Meter is a one-time App Store purchase, Apple handles entitlement at install time. The app doesn't phone home to a licensing server.
Network-connected features. The only feature in the app that touches the network is the Mac App Store "Share" action, which opens an apps.apple.com link in your browser. That's a system URL open, not a network request from Focus Meter itself.
If you disable Wi-Fi right now, close Focus Meter, and reopen it, everything works identically. That's the test. An app that claims to be local-first but fails this test is not local-first.
How to verify it yourself
Three ways, in increasing order of paranoia:
1. The five-minute check. Install Little Snitch or the free Lulu. Launch Focus Meter. Use it normally for a day. Check the outbound-connections log. You should see nothing from Focus Meter.
2. The 30-minute check. Use the macOS network utility nettop or lsof -i to watch live network activity. Filter for the Focus Meter process. Again, nothing.
3. The "airplane mode" check. Turn on airplane mode. Run Focus Meter for a day. Everything — tracking, categorization, reports, Focus Score — should work identically. If anything silently fails while offline, that's a sign the app depends on the network somewhere.
The first check is what I'd recommend for anyone considering a new tracker, regardless of which one. It's the fastest way to cut through marketing claims.
Export and portability
You own your data and Focus Meter's job is to make sure you can take it with you. Two export paths:
In-app. Reports → Export → CSV or JSON. Gives you the rolled-up data (per-app time, per-domain time, daily focus scores) in a clean format.
Direct SQLite. Copy focus-meter.sqlite anywhere. It's a single file, typically under 50MB even after years of data. Open it with any tool.
Both work offline, neither requires an account, and both give you lossless data. If you want to migrate to another tool, or run your own analysis in a notebook, the path is open.
What this enables (and what it costs)
The benefit of the architecture: you can trust the tracker with more data than you otherwise would. URL tracking is a good example — a cloud tracker reading every site you visit feels different from a local tracker doing the same, because the data goes nowhere. That difference is why Focus Meter can ship site-level tracking as a default feature with a clean conscience.
The cost of the architecture: no cross-device sync, no team dashboards, no backup-in-the-cloud. These are real trade-offs for some users. For anyone who just wants to understand their own focus on one Mac without handing over a continuous record of their work to a vendor, the trade is a clear win.
