Reference
Troubleshooting
Opening the app#
"Could not acquire the OPFS storage pool — is the app already open in another tab?" It is. The storage is exclusive to one browser context. Close the other tab and reload; a forgotten background tab is the usual culprit.
"…was written by a newer version of this app." Migrations only run forwards, so the app refuses to touch it rather than risk breaking it. Update the app; the file is unharmed.
"database … not found in storage" The name in the recents list no longer exists, usually because site data was cleared. Restore with Open .sqlite file….
Everything is gone. Browser storage was cleared or evicted. Open your save file again with Open .sqlite file…. To avoid a repeat, check that the Database tab says Storage: persistent, and use request persistence if it doesn't.
Saving#
The pill says "file changed on disk". Another copy of the app wrote the save file — usually the same database open on another computer, carried over by a synced folder. Reload from file takes it. If this browser has changes of its own, the startup screen asks which copy to keep the next time you open the database; see When both copies changed.
Saving is paused. A dialog says so in the middle of the screen, and the corner pill agrees. The browser asks for the write permission again once per session, unless you told it to remember the answer. Allow & save raises the browser's own prompt, and every change so far is written at once. If that click brings no prompt at all, this site has file saving blocked in the browser: Choose the file again… grants it back through the file picker.
Importing#
"The file is missing columns a row cannot be built without: …" The preamble likely changed length, so a junk line was read as the header. Try the per-file skip rows override under Advanced first. Only the date, title, amount and row-filter columns can raise this — an optional column the export left out imports fine.
The head says "not in this file: …" and the balance reads "balance not checked". This export omits an optional column the remembered layout names, most often the running balance — ING hides Saldo po transakcji when the statement is generated with the balance off. The rows import normally; only the continuity check is unavailable for that file.
Rows land in "parse errors". The offending cell is highlighted with the reason. Usually the wrong date format (DD-MM-YYYY vs DD.MM.YYYY is the classic) or the wrong decimal separator. Press e to walk the errors. Error rows are never written — press adjust on the review head to fix the reading and re-stage the same file.
Every row shows as a duplicate. The file was imported already. That is the system working.
Nothing shows as a duplicate, but this is a re-import. Almost certainly the wrong account — fingerprints are per account. Take the Re-stage into … button in the banner.
"The running balance breaks at line 88." The statement's own balance disagrees with the sum of its rows: something is missing, doubled or parsed wrong. Compare that line against your bank's statement.
The commit button is disabled. Either nothing is in the "will commit" bucket, or foreign rows are missing an exchange rate — the banner says which.
Rates#
"api.nbp.pl is rate-limiting this app." Wait it out. The delay honours what the server asked for and applies to every button, so nothing else re-triggers it.
"…would take 41 requests." Shorten the range, or untick a currency. Rates you already hold are never re-fetched, so several smaller fetches cost nothing extra.
"Fetched 0 rates." Not an error. NBP publishes nothing on weekends and holidays, and currencies outside table A are never published.
Categories and rules#
A keyword rule never fires. Three possibilities, in order of likelihood:
- A never-match term is blocking it — the row's provenance says so.
- Another rule with a lower priority number matched first.
- It is a shadowed duplicate of a rule matching the same text. The Categories tab banners these and can remove them.
The rule's hit count tells you which. Zero hits and no banner means nothing matched the text at all — check whether the word is really in the title rather than the counterparty name.
A rule was right but the rows are still uncategorized. Rules apply at import. For existing rows, press Apply rules to N uncategorized, or Retry auto-categorization on the Transactions tab. Neither touches rows that already have a category.
"12 transactions are in this category — recategorize them first." Deleting a category with rows is refused. Use merge to move them.
"This account has 340 transactions — delete its imports first." Same principle. Or, much more likely what you wanted, hide the account instead: it leaves every picker and changes no number.
The dashboard#
It says there is nothing, but I imported something. Check the currency, the account filter, the category filter, and Exclude investments. The empty message names the responsible filter, and the scope line under the tabs prints everything that is on.
A month I imported shows as empty. Check which month the ribbon has selected, and which year. Then check on the Import tab that the import went to the account and range you think it did.
The total doesn't match my bank statement. Expected: internal transfers are excluded, the statement includes rows you skipped, or you are reading Expense where the statement nets. See what counts as spending.