Home » Data retention
| Data class | How long we keep it | Why |
|---|---|---|
| Uploaded PDF | Never written to disk. Held in server memory during conversion, then discarded. | Bank statements are sensitive. We don't want them, and we don't keep them. |
| Generated Excel / CSV | Returned directly to your browser. The result page is reachable only while the in-memory entry exists; once the server restarts or evicts it, it's gone. | We never store statement-derived content alongside an account. |
| Account record (email, plan tier, Stripe customer ID) | Kept while your account is active. Deleted within 30 days of account closure. | Required to bill you and authenticate you. Removed when you leave. |
| Free-tier usage counter (per IP and per account) | Aggregated counts, rotated daily. Per-IP counters cleared after 24 hours. | Enforces the 3-statements-per-day free tier without storing PII. |
| Service logs (timestamps, page counts, success / failure, truncated IP) | Up to 90 days for operational debugging and abuse prevention. Aggregate counters may be kept indefinitely. | Standard SaaS telemetry. No file content is ever logged. |
| Billing records | Held by Stripe per their retention policy and our legal / tax obligations (typically 7 years). | Tax authorities require it. |
The extension stores a small amount of data on your device only — never sent to our servers.
| Key | Contents | Lives until |
|---|---|---|
chrome.storage.local.apiBase | Which API URL to send uploads to (so power users can self-host). | You change it or uninstall the extension. |
chrome.storage.local.apiKey | Optional API key for paid plans. | You change it or uninstall the extension. |
chrome.storage.local.recent | Up to 5 records of recent conversions (job ID, filename, timestamp). No file content. | You uninstall the extension. |
chrome.storage.local.quota | Daily upload count for the current UTC date. | Auto-rotated daily. |
Be skeptical of any company that says "we don't store your data". Here is what it means in ours:
bytes object in process memory.bytes object — rasterizing pages into a temporary in-memory canvas, sending pages to the AI provider, building the result JSON.open(path, 'wb') writes the PDF anywhere on disk.The only way to recover a PDF that has been through Bank2XL is to keep your own copy — which you already do, since you uploaded it.
You can request account deletion at any time by emailing [email protected] from the email on file. We confirm the deletion within 7 days. Statement content is not part of this request because none was ever stored.