Security & Privacy
WorthTheFee is built for people who want clarity without handing over unnecessary financial access. Here's the wiring, top to bottom.
When you upload a PDF statement, the file never reaches our servers. PDF.js — the same library Firefox ships — parses the document inside your browser tab and extracts only the text. That text (and only that text) is what we send to our AI to identify charges and match them to credits.
The raw PDF is discarded when you close the tab. If you opt in to "Save statement to archive" — which is off by default — only the extracted, structured data is stored, and you can purge it any time from Settings.
Every row in our database carries the user ID of its owner. Postgres row-level security policies — enforced at the database layer, not the application layer — block any query from returning a row that doesn't match the authenticated user's ID. We use the same mechanism for admin-only tables.
Most card-tracking apps connect to your bank through Plaid or a similar aggregator. We chose not to. The tradeoff:
Automatic transaction sync. You either mark credits manually (takes a minute per card per month) or upload a statement PDF once.
We never see your balance, your other transactions, or your credentials. Nothing to leak. Nothing to monetize. Nothing for an attacker to chase.
| Data | Why | Retention |
|---|---|---|
| Email + password hash | Authentication | Until you delete |
| Cards you add | Compute your ROI | Until you delete |
| Credits you mark used | Compute your ROI | Until you delete |
| Statement metadata (optional) | Speed up future scans | Until you delete |
| Anonymous usage analytics | Improve the product | 13 months |
Found something we missed? Email security@worththefee.com.