BorderFolio/Security & data handling

Security and what happens to your statement

Last reviewed 31 August 2026

A broker statement is one of the more revealing documents a person owns, and uploading one to a small product is a reasonable thing to hesitate over. This page answers the hesitation concretely: what is asked for, what is read from the file, what is kept and for how long, what leaves the server and to whom, who can look at it, and how to remove all of it. Where the honest answer is a limitation rather than a reassurance, it is written as a limitation.

Broker credentials
Never requested — no brokerage connection exists in the product
Original file
Held in private storage so a failed import can be retried, then deleted automatically within 7 days
Kept long-term
Instruments, quantities, prices, dates, dividends and statement metadata — not account numbers, not names printed on the document
Leaves the server
The document contents go to OpenAI for extraction; nothing else receives them
Encryption
TLS 1.2 / 1.3 in transit; AES-256 at rest for stored files and backups
Access
One person — the founder. No employees, no contractors, no analytics vendor with a view of your holdings
Deletion
Self-service in the app, immediate and irreversible, for a single portfolio or the entire account
Certification
None. No SOC 2, no ISO 27001, no third-party penetration test yet — see the limits

1. Broker credentials are never requested

There is no field for a broker login anywhere in BorderFolio, and no hidden one either: no brokerage integration exists in the codebase at all — no API keys, no read-only tokens, no OAuth connection, no aggregation service such as Plaid or SnapTrade. A portfolio is built in exactly two ways: you upload a document, or you type holdings in by hand.

The consequence worth stating plainly is what BorderFolio therefore cannot do. It cannot place a trade, move money, change a beneficiary or read your account balance. Even a total compromise of this service would not give an attacker a route into your brokerage, because no route exists to steal.

The only optional third-party sign-in is Sign in with Google, which requests the openid email profile scopes — your email address and display name. It grants no access to Gmail, Drive or anything else, and you can use an email and password instead.

A direct Interactive Brokers connection appears on the roadmap. If it ships, it will be an opt-in addition to statement import, never a requirement.

2. What is actually stored from the document

The extractor is looking for a small number of financial facts. Everything else on the page — your name, your address, cash balances, account totals, transfer instructions, bank details — is not a field it writes anywhere.

From the statementKept?Where it ends up
Ticker, ISIN, market (MIC), countryYesIdentifies the instrument you hold
Quantity and average purchase priceYesYour position
Each purchase: quantity, price, date, stated commissionYesContribution history — the record that separates deposited capital from market growth
Dividends received in the period, per instrumentYesDividend history and withholding estimates
Original file name, upload time, rows extracted, duplicates skippedYesThe import journal, so you can see what a past upload did
Broker account number printed on the pageNoRead during the import only, to keep two accounts in one document apart. There is no account-number column in the database
Your name, address, cash balances, account totals, anything else on the pageNoNot extracted into any field

Nothing enters your portfolio automatically. Every import stops at a review screen showing what was read, what was skipped as a duplicate and what could not be imported; the data is written only when you confirm it. See how statement import works.

Separately from the statement, an account holds what you gave it: name, email, a bcrypt hash of your password (never the password), optional date of birth, the tax residence and rates you configure, and your plan and usage counters.

3. Is the original file kept?

Yes, briefly, and then it is deleted whether you ask or not.

What survives the file is the extracted data and the journal entry — the file name, when it was uploaded and how many rows it produced.

4. What leaves the server: AI extraction

Reading an arbitrary broker's layout is done by a language model rather than a per-broker parser, which is why any statement works without a supported-broker list. That has a privacy cost, and it should be stated rather than buried: the contents of the document you upload are sent to OpenAI's API over TLS, so the model can extract the holdings and transactions from it. A PDF is sent as a file, a screenshot as an image, a CSV or text export as text.

Two things bound that transfer:

No other third party receives the document or its contents. If sending a statement to an AI provider is not acceptable to you, entering holdings manually avoids it entirely and produces the same portfolio.

5. Encryption, in transit and at rest

On the account side: sign-in and password-reset endpoints are rate-limited per IP address and per email address, sign-up and password reset are additionally protected by a Cloudflare Turnstile challenge, repeated failed logins trigger a captcha, and every upload endpoint sits behind an authenticated, email-confirmed session.

6. Who has access

BorderFolio is built and run by one person — Steffan Kharmaaiarvi, the founder (about). There are no employees, no contractors and no outsourced support desk, so the honest answer to "who could look at my portfolio" is: one named individual with production access, and nobody else.

7. Deleting a portfolio

In the app, open Manage portfolios and choose Delete portfolio. It takes effect immediately and removes, in one cascade: the positions, the contribution history, the monthly snapshots, the dividend records and the statement journal entries belonging to that portfolio.

The uploaded files behind those imports are already gone, or go with the next daily sweep at the latest. Deleting your only portfolio is allowed on any plan — you land back on the upload screen and can start over. Your monthly import allowance is deliberately not refunded by the delete, so a delete-and-recreate cycle is not a way to reset the counter.

8. Deleting your account

Self-service, in the app: Profile & Settings → Security → Danger zone → Delete account, confirmed by typing DELETE. No email to support, no waiting period, no retention offer. It is irreversible.

What the deletion does:

The deletion is built to succeed even when its dependencies do not: if the billing provider or the storage service is unreachable at that moment, your account is still erased and the remaining cleanup is retried hourly until it completes. An outage somewhere else must never leave you with an account you cannot delete.

Two things survive, and both should be said out loud:

Access, correction and portability requests under GDPR and comparable laws go to admin@borderfolio.app, as described in the Privacy Policy.

9. External processors

Everything outside this service that touches your data, and what each one gets. Production runs on Amazon Web Services in the United States, so this is where your data is processed regardless of where you live; for EEA, UK and Swiss users that transfer relies on the European Commission's Standard Contractual Clauses.

ProcessorWhat it receivesWhy
Amazon Web Services (US)Everything: the application host, the database, uploaded statement files, backupsHosting and storage
OpenAIThe contents of the documents you upload; portfolio figures and your configured tax residence for analysisExtracting holdings and transactions from an arbitrary statement layout; portfolio insights
FreemiusName, email and billing details you enter at checkoutPayments, subscriptions and licensing. Card details go to the payment provider and are never seen or stored by BorderFolio
CloudflareConnection metadata: IP address and browser signals, at DNS level and for the Turnstile challengeDNS, proxying and bot protection on sign-up and password reset
MailgunYour email address and the contents of transactional messagesConfirmation emails, password resets, monthly reports
SentryError reports and application logs: identifiers, stack traces, technical context — not request bodies, not statementsKnowing that something broke before you have to report it
GoogleOnly if you choose Sign in with Google: your email address and display nameOptional authentication
Market data providersTicker symbols and exchange codes onlyPrices, dividend data, instrument reference and FX rates. A quote request says which symbol, never who is asking
PostHog (EU region)Only if you accept cookies: page views, the channel you arrived from, and named product events. Autocapture and session recording are switched off and event text is masked — no ticker, holding or amount is ever sentKnowing which pages produce signups. See the Cookie Notice

The list is exhaustive as of the review date at the top of this page. A new processor with access to portfolio data would be added here, and the page's review date updated, before it goes live.

10. What this page does not claim

Security pages tend to imply more than the product has. These are the gaps, stated plainly, so you can judge the risk yourself rather than discovering the limits later.

Found a vulnerability? Email admin@borderfolio.app with enough detail to reproduce it, and expect a reply. There is no paid bounty programme; there is a fast fix and public credit if you want it. Please test only against your own account.

Broker statement importWhat is extracted from a PDF or CSV, and how overlapping statements are de-duplicated. Privacy PolicyThe formal notice: legal bases, your rights, international transfers, retention. FAQCredentials, duplicates, supported securities and the limits of the estimates. AboutWho builds this, and why it is a document-in product rather than a broker connection.
Start tracking free No broker credentials · uploaded files deleted within 7 days · delete your account yourself, at any time.