User guide · 8 of 9
FAQ & troubleshooting
Signing in
"Invalid invite code" — registration needs the exact code from whoever invited you. Codes are case-sensitive; ask them to re-send it.
"Too many attempts. Try again in N minutes." — sign-in, registration, and reset requests are rate-limited to protect accounts. Wait it out; the timer is per email/device.
I didn't get the verification / reset email. Check spam for "Perfi". On the banner, Resend email issues a fresh link (each new link invalidates the previous one). Reset links expire after 1 hour and work once; verification links last 24 hours.
"This reset link is invalid or has expired." — request a new one from Forgot password?. Only the most recently requested link is valid.
I was suddenly signed out on my phone. A password change or reset (yours, or an administrator's) signs out all other devices by design. Sign in again with the current password.
Uploading
"This file does not look like a {bank} statement." — the bank picked in step 1 must match the PDF. Pick the right bank and re-parse; nothing was imported.
Asked for a "statement month". Your PDF prints no statement date, which Perfi needs to assign years to transactions (statements around January span two years). Enter the month shown on your banking app and reparse.
"This exact file was already imported." — Perfi recognises files by content, per account. Re-importing is blocked so your ledger can't double up. If you meant a different account, assign the sections to that account.
"Uploaded file expired — upload it again." — more than a day passed between parsing and confirming (or the file was cleaned up). Just upload the same PDF again; nothing was imported.
Rows shown dimmed and unchecked in the preview. Those are flagged duplicates (details). Perfi never silently drops them — tick any that are genuinely separate purchases.
My statement's numbers don't match the bank app. Perfi uses the transaction date (not posting date) and the SGD settled amount. Pending transactions aren't on statements at all.
Spending & transactions
A transaction is in the wrong category. Categories are keyword-based. Use tags for your own grouping; mention persistent misses to the operator, who can extend the keyword list.
I only see 200 transactions. The table caps at the latest 200 for speed; the count above it is the real total and Export CSV contains everything matched by your filters.
Investments
A holding shows "—" instead of a value. No cached price is available for that symbol yet. Hit Refresh prices; if it stays unpriced the symbol may not be covered by the quote source. Perfi shows "—" rather than guessing.
"prices as of {an old date}". Quotes refresh lazily (about every 12 hours) and keep the last good data if a refresh fails. Refresh prices forces a retry.
I can't edit an imported trade. Rows marked Imported are locked to their source statement so the ledger stays reconcilable. Manual rows remain editable.
My cash balance looks wrong. Cash is derived purely from the ledger. Look for a missing deposit/withdrawal/fee and add it as a manual trade.
Data & privacy
Do you keep my PDFs? No — deleted right after a successful import, and within 24 hours for abandoned uploads. See Settings & privacy.
How do I get my data out? CSV export on both the Transactions page and the investments ledger.
How do I delete everything? Settings → Danger zone. Immediate and
permanent.