Troubleshooting
Most questions come down to one of three things: a statement that has not finished processing, a figure that does not look right, or a limit being reached. This page covers all three.
Statement statuses
Every upload carries a status, shown in Files.
| Status | Meaning | What to do |
|---|---|---|
| Pending | Accepted and queued; parsing has not started. | Wait. If it stays here, retry it. |
| Processing | Being parsed now. | Wait — large PDFs take longer than a CSV. |
| Completed | Parsed. Its transactions are in the app. | Nothing. |
| Failed | Parsing did not succeed. The row carries the reason. | Read the message, then retry. If it fails again, the file may be a format we cannot read — see below. |
| Quarantined | Every transaction in it already existed. | Nothing is missing: the originals are all still there. See Duplicates. |
A statement stuck in Pending or Processing can be retried — that is a supported case, not a workaround, because a queued job can occasionally be dropped. Completed is the one status that cannot be retried; re-running it would risk duplicating its transactions. To re-parse a completed statement, delete the file and upload it again.
Duplicate statements
Uploading the same statement twice is expected — bank exports overlap at period boundaries — so it is handled rather than blocked.
Some rows already exist. The new rows are added and the overlapping ones are skipped, so an overlapping export does not double your figures.
Every row already exists. The statement is marked Quarantined and the upload is undone: the stored file is removed and the pages it cost are refunded to your allowance. The statement row itself is kept, with an explanation, so the upload does not vanish silently. Re-uploading last month's file by mistake therefore costs you nothing.
Through the API, a duplicate upload returns 409 with the id of the statement that already covers
that period. Pass replace=true to supersede it deliberately.
Figures do not look right
Work down this list — the causes are ordered by how often they turn out to be the answer.
A statement has not finished processing. Check Files for anything not yet Completed. Analytics only counts what has been parsed.
The period is not what you think. Analytics screens share one period filter, and it defaults to a year back from your most recent statement date — not from today. A gap at the end of the range usually means no statements have been uploaded for that stretch.
Transactions are in the wrong category. Categorisation drives every analytics screen, so one miscategorised recurring payment moves several charts. Correct it in Transactions or adjust the rules in Categories; the analytics follow.
More than one currency is in play. Some screens keep currencies apart and some total amounts as recorded without converting them. Check the notes on the screen you are reading — Business summary is the one to watch, because it adds amounts across currencies and labels the result with a single currency code.
A balance looks wrong. Running balances come from the statement itself, where the bank supplied them. Analytics charts that show a cumulative line start from zero at the beginning of the selected period — that is a movement within the window, not your bank balance.
Upload problems
"File type not supported." Accepted formats are PDF, CSV, TSV, PSV/TXT, JSON, QIF, QFX, OFX, HTML, XLS/XLSX/XLSM, and scanned images (JPG, PNG, WEBP, GIF).
The file is too large. The limit is 100 MB per file. Split a very large export, or use CSV instead of PDF — it is usually far smaller.
A password-protected PDF. Remove the password before uploading; an encrypted PDF cannot be read.
A scanned statement produces few or no transactions. Scans go through OCR, so quality matters. A straight, high-contrast scan at 300 dpi reads far better than a photo taken at an angle. If your bank offers CSV, prefer it — it parses exactly and costs a single page.
Limits
| You see | Meaning |
|---|---|
429 on upload, or a refusal in the app | The monthly page allowance is used up, or you are adding a second account on Free. |
402 | The AI chatbot on the Free plan — it is the one paid-only capability. |
429 with Retry-After on the API | The per-key request rate limit. Wait the stated number of seconds. |
Allowances reset each billing period and do not carry over. Exceeding one refuses the request rather than charging you unexpectedly. See Plans & limits, including what counts as a page — every non-PDF format counts as one page regardless of how many rows it holds, which is the cheapest way to stay inside a small allowance.
Still stuck
Contact support with the statement's filename, its status, and the period you expected it to cover. If a figure looks wrong, the screen name and the period you had selected are the two things that make it reproducible.