Last updated: 2026-04-21
PayPulse runs entirely in your browser. It makes zero network requests. None of your data ever leaves your device.
When you use PayPulse, it stores the following on your device only, inside your browser's localStorage:
- Monthly salary amount
- Working hours (e.g. 9:00 – 18:00 with 1h lunch)
- Start date (when you began this job)
- Year-end bonus months
- Language, currency, region, tax provider, pension provider preferences
- Theme preference (light / dark)
- Daily override records (sick leave, extra work days, stock P&L notes)
- Annual income goal
That's it. There is no cloud, no account, no sync.
- ❌ No analytics (no Google Analytics, Plausible, Mixpanel, nothing)
- ❌ No telemetry — we don't know you exist
- ❌ No ads, no trackers, no pixel beacons
- ❌ No server API calls
- ❌ No user accounts
- ❌ No cookies except what
localStoragetechnically is (browser-only key/value store) - ❌ No external fonts (all rendering uses your system fonts)
- ❌ No external scripts or frameworks loaded from CDN
You can verify this yourself:
- Open
index.htmlin a browser - Open DevTools → Network tab
- Reload the page
- You will see zero requests after the initial page load.
You can manually export your data as JSON via the Settings → Export button, and import it elsewhere. That's the only time your data "moves" — and only by your own hand.
The optional desktop/ tools (widget + menu bar app) are also fully offline. They read the same paypulse-config.json file locally and never make any network requests.
Two ways:
- In-app: Settings → "Clear all data"
- Manual: In your browser, open DevTools → Application → Local Storage → delete the
paypulsekey
For the desktop tools: delete ~/Documents/paypulse/desktop/paypulse-config.json and ~/Documents/paypulse/desktop/.widget_state.json.
Open an issue if you have any privacy questions.