Troubleshooting
Last updated: 2026-08-26
Organised by the message the app shows. Every error in Holdbound is meant to say what happened and what to do next; this page adds the longer explanation. If something is not here, email support@holdbound.com or use Feedback inside the app.
Import: files
"This file was not recognised"
The column names do not match Binance, OKX, Coinbase, Kraken or the generic template.
- Make sure it is the transaction / ledger history, not an order list, PnL report or tax report. The guides for Binance, OKX, Coinbase and Kraken name the exact export.
- Exchanges change layouts; if you are sure it is the right file, send the header line only through Feedback and I'll add the variant in the next minor release.
- Meanwhile, convert it to the generic template.
"It looks like a … export, which does not contain what the app needs"
The app recognised a report it declines on purpose (Coinbase tax-center gain/loss, Coinbase Pro "Account" report, margin/futures statements). Those do not contain raw transactions. Export the one named in the exchange guide.
"This file has no rows" / "Only a header was found"
The export covered a period with no activity, or the generation failed silently. Re-export with a wider date range and check the file size before importing.
"This does not look like a CSV file"
You picked an XLSX, PDF or HTML. Export as CSV. If the file was a CSV but you opened and saved it in Excel, import the original download instead; Excel rewrites numbers and dates.
"Some text in this file could not be decoded"
The file is not UTF-8. Re-export, or open it in a text editor (not Excel) and save as UTF-8.
"The file is cut off at line N"
A quoted field never closes; the download was interrupted. Download again.
"This file is large"
Not an error. The browser may pause for a while on very large files. Splitting by year is faster.
Import: rows
"Every row was skipped"
The list under the message says why for each row. Common causes: wrong report type (see above); dates in a format the app could not parse (set the time zone / date order on the import step, or use ISO dates in a generic file); every row belongs to a margin or futures account (spot only).
"N rows skipped" on an otherwise fine import
Expected for: repeated headers inside the file, empty lines, zero-amount rows, margin/futures rows, Kraken pending rows (the settled row with the same reference is booked instead). Read the reasons; if a row you care about is there, it is usually a missing amount or date.
"You have already imported this file" / "N already imported (will be skipped)"
Safe. Transactions get a stable ID from their content, so overlapping exports never double count.
"Required columns are missing" (generic template)
At least timestamp, type, asset, amount must be present under those names or their aliases. Check for a stray space or an invisible BOM at the start of the header.
"Row N: … is not a date the app understands"
Use ISO (2024-03-01T12:34:56Z). Slash dates are read day-first by default; switch to month-first on the import step if your file is US-style.
"Row N: … is not a number"
Remove currency symbols and thousands separators; dot as decimal point.
"Row N: type … is not one of buy, sell, …"
The row was imported as other, which cost basis ignores. Fix the spelling in the file and re-import, then delete the other row in Transactions.
Numbers look wrong
"A sale of X is larger than what you held at the time"
The app knows fewer coins in that account than you sold. It does not guess a purchase for the missing part: that part is recorded with an unknown basis — no acquisition date, left out of the holding-period figures, and marked unknown in the Basis status column when you export realized gains. Its cost still counts as zero in the arithmetic, so the gain on that sale reads higher than it really was, and it stays wrong until the missing history is imported. Nine times out of ten:
- A transfer into this account is not paired. Open Transfers → Unmatched deposits / Needs your decision.
- A deposit or withdrawal export is missing. Binance trade history, OKX trading history and Kraken Trades do not include transfers; import the transaction-records / funding / Ledgers files.
- The coins were income (staking, airdrop) and came in as
otheror are missing. Add or edit the transaction asrewardwith the amount received. - Wrong time zone pushed a buy after the sale. Check the import time zone.
Gains far too high in general
Almost always unpaired transfers: each one looks like a sale with no proceeds on one side and a purchase with no cost on the other. Spend five minutes in Transfers. See Transfers and matching.
"No value for X on …" / rewards with zero cost
The export gave no value for that row. Edit the transaction and enter the value at the time; otherwise the cost is zero, which is conservative but may not be what your rules require.
Fees look odd / BNB balance keeps falling
Fees charged in a third coin (BNB on Binance, for instance) are recorded as a small disposal of that coin. Expected.
Two holdings for one coin (DOT and DOT.S, ETH and ETH2)
Kraken staking codes are folded into the plain coin automatically. If you still see both, one of them came from a generic file or another exchange with a different ticker; rename the asset in that file and re-import, or tell me through Feedback.
Prices
"Could not reach CoinGecko"
You are offline, or CoinGecko is not reachable from your network. Nothing else in the app needs the network; the last prices stay on screen. Try again later, or enter a price by hand (click the price cell).
"CoinGecko's free API is rate-limited right now"
The free API allows a limited number of requests per minute, shared by everyone on your IP. Wait the number of seconds shown and refresh again.
"N tickers need you to pick the coin"
Several coins share a ticker on CoinGecko. Pick the right one once; the app remembers.
"N unknown to CoinGecko" / "returned no price"
Unlisted, delisted or mapped to the wrong coin. Enter a manual price. Manual prices override fetched ones until you clear them.
Values in the wrong currency
Change the display currency in Settings, then refresh prices. Cost basis stays in the currency you paid; only current values change.
Storage and data
"This browser would not let the page store data (IndexedDB unavailable on file://)"
Some settings — strict privacy options, private windows — block the browser database (IndexedDB) for files opened from disk; Safari is where this comes up most, though default Safari worked in testing (August 2026). The app works for the session but keeps nothing. Export a backup before closing, or use Chrome, Edge or Firefox. Details in Backup and restore.
"The browser is out of storage space"
Export a backup now, then free space in the browser's site-data settings, then restore if anything was not saved.
"Stored data could not be read"
Rare; usually follows a browser crash. Restore your most recent backup. If you have none, send me the message through Feedback before doing anything else.
My data disappeared
Check the address bar: did you open the file from a different folder, or in a different browser? The database is attached to the file's location and to the browser. Move the file back, or restore a backup. See Backup and restore.
"This is not a Holdbound backup" / "from a newer version"
Only JSON files made by this app restore. A backup from a newer version needs the newer app file; download it from https://holdbound.com.
License
"Not accepted"
Missing characters at the start or end. Copy the whole key (CT1- … . …) from the order page or email. Still failing: email support@holdbound.com with the order reference.
"This perpetual key covers v1.x only"
You opened a v2+ file with a one-time v1 key. Your v1.x file still works with it; upgrade pricing is on the buy page.
"Trial ended" / Read-only, and what an ended update window does not do
Expected behaviour, not a fault: view and export everything, no new imports until a valid key is entered. This happens for a trial that ended without a purchase, and for a revoked key — nothing else. In particular, an update window that has run out does not do this: you keep the versions you already have, with every feature, for as long as you want them. See Trial, license and updates.
"License … was revoked"
After a refund, or because the key was shared publicly. Data untouched. Email support@holdbound.com if you think it is a mistake.
Feedback and updates
"Could not send"
Offline, or my server is down. Your message stays in the form; try later or email support@holdbound.com.
"Could not check for updates"
The check runs together with the price refresh and needs the network. Harmless; the changelog at https://holdbound.com/changelog always lists the latest version.
The page itself errored
"This page hit an error" / "The app could not start": your data is untouched. Reload. If it repeats, try another browser, and send me the message through Feedback (or by email if the app won't start) with your browser name and version.