Is my statement uploaded? How to verify it yourself
You should not have to take a website's word for it. This page explains exactly how PennyTie handles a statement, then shows you how to check with tools already built into your browser.
What happens when you drop a PDF
- Your browser loads the page, PennyTie's own scripts, and the open-source pdf.js library. PennyTie's files come from pennytie.com; pdf.js (a pinned version) comes from the jsDelivr CDN, cdn.jsdelivr.net.
- When you choose a file, the page reads it from your disk into the tab's memory using the browser's File API, and pdf.js extracts the text and positions on each page. This is all JavaScript running in your tab.
- The page finds the transactions, checks the arithmetic, and builds the CSV. The CSV and report are created in the tab and saved through your browser's normal download.
None of those steps contains code that sends the file, its text, or the extracted transactions anywhere. When you close or reload the tab, the data is gone. There is no account and no server-side storage of statements, so there is nothing to delete.
The one request that is not for loading code: Pro activation
If you buy Pro, you paste a license key. The page then sends a small request containing only that key to a Cloudflare Worker (pennytie-license.pennytie-support.workers.dev). The Worker passes the key to Gumroad's license-verification API and returns whether the subscription is active. The Worker's code is short and stores nothing. The key and the time of the last check are kept in your browser's local storage, and the page re-checks about once a day. Free users never make this request.
Two honest caveats: Cloudflare and Gumroad are separate companies with their own logs and policies, and PennyTie cannot speak for those. Payment details are handled by Gumroad, not by PennyTie.
Cookies and analytics
PennyTie's code sets no cookies and loads no analytics or advertising scripts. The web host may keep ordinary server logs (such as IP address and pages requested), as described in the privacy page.
A second layer: the Content Security Policy
The app page declares a Content Security Policy in its HTML. In plain terms it tells your browser that scripts may only come from pennytie.com and cdn.jsdelivr.net, and that the page may only make network requests to three places: pennytie.com itself, cdn.jsdelivr.net, and the license Worker above. You can read it yourself with "View source" on the home page and look for Content-Security-Policy. A policy like this is a restriction on the page, enforced by your browser; it is a useful guard rail, not a substitute for the checks below.
How to verify it yourself
Check 1: watch the Network tab (the main test)
- Open PennyTie in Chrome, Edge, Firefox or Safari. Open developer tools (F12, or right-click and choose Inspect; in Safari enable the Develop menu first).
- Go to the Network tab. Tick "Preserve log" if available, then clear the list.
- Drop in a statement (a fictional sample is available on the page if you would rather not use a real one).
- Look at every request that appears. You should see requests that load code or libraries (pennytie.com, cdn.jsdelivr.net, and the pdf.js worker file). Click any request and open its Payload or Request section: none should contain your PDF or its contents.
- Filter by method POST. For a free user processing a file you should see none. A Pro user will see only the license check, whose payload is just the key.
Some browsers show a request's size. A PDF upload would be a large request going out; nothing like that should appear.
Check 2: the offline test
This is a convenient demonstration, with one caveat. pdf.js's main script is loaded when the page loads, but its background worker file is requested the first time a PDF is opened. We have not engineered the site to work offline, so it may not work offline on a cold start, and a failure there would prove nothing about uploads. A reliable way to run it:
- Load PennyTie while online and process the built-in sample once, so the browser has fetched and cached the library files.
- In developer tools, Network tab, switch throttling to Offline (or turn off your Wi-Fi).
- Process your own statement.
If it works, the conversion did not need the network at all. If it fails, go back to Check 1, which is the definitive test, because that shows what is actually sent.
Check 3: read the code
The scripts are plain files served with the page (not minified bundles of PennyTie's own logic), so you can open them from the Sources or Network tab and search for fetch. You will find the license check and the loading of the built-in sample PDF from the same site, and nothing else.
What this does not protect against
- You are trusting the code that pennytie.com serves each time you open the page. Checking the Network tab in your own session is how you verify that session.
- pdf.js is loaded from jsDelivr at a fixed version. The page does not currently pin it with a subresource-integrity hash, so you are trusting that CDN to serve the unchanged file.
- Browser extensions, a compromised computer, or a shared computer can see your files whatever the website does.
What "Verified" means and does not mean
"Verified" means the arithmetic is consistent: opening balance plus the credits minus the debits equals the closing balance printed on the statement, and where the statement prints running balances, each row follows from the one before it. It does not mean the statement is genuine, that it came from your bank, that nothing was altered, or that every transaction is categorized correctly. If you add or edit rows yourself, the result says so. Do not use PennyTie to authenticate a document.
Limits
- Text-based PDFs only. There is no OCR, so scanned images and photographed statements will not work. See scanned vs text statements.
- Files up to 25 MB. The free tier reads up to 5 pages per file; Pro removes that limit.
- Output is CSV. Layouts vary between banks, and unusual layouts can produce flagged or missing rows, which is why the checks exist.
Data retention
PennyTie keeps none of your statement data: it never receives it. The only thing stored is, for Pro users, the license key and last-check time in your own browser's local storage, which you can clear at any time.
Responsible disclosure and contact
If you find a privacy or security problem, please email pennytie.support@gmail.com with the details and steps to reproduce. Please give a reasonable time to fix it before publishing. PennyTie is a small independent product and does not hold third-party security certifications.
Try it: open PennyTie, drop a text-based statement PDF (or use the built-in fictional sample) and see whether the totals tie out. Free for statements up to 5 pages; nothing is uploaded.
Related: Is my statement uploaded? Verify it yourself · ChatGPT vs PennyTie · Upload-based vs in-browser converters · Alternatives to PennyTie · Why statement totals don't match