Holdbound

Generic CSV template

Last updated: 2026-08-26

For any exchange or wallet the app does not recognise, put the transactions into this layout and import it. The app treats a generic file exactly like an exchange file: same pairing, same cost basis, same exports. You can also re-import the app's own "Export all transactions" CSV, which uses this format.

Download a ready-made file from inside the app (Import → Download generic template) or copy the header below.

timestamp,type,asset,amount,quote_asset,quote_amount,price,fee_asset,fee_amount,account,txid,note

Column order does not matter and names are case-insensitive. Only the first four are required. Keep the column called timestamp (not date or time), which is how the app tells this template apart from exchange files that happen to look similar.

Columns

ColumnRequiredWhat goes in it
timestampyesWhen it happened. ISO-8601 such as 2024-03-01T12:34:56Z or 2024-03-01 12:34:56 UTC. A value without a zone is treated as UTC unless you choose another zone on the import step.
typeyesOne of buy, sell, deposit, withdrawal, fee, reward, other. Friendly spellings are accepted: bought/purchase → buy; sold/sale → sell; receive/received/transfer in → deposit; withdraw/send/sent/transfer out → withdrawal; staking/interest/airdrop/income → reward. Anything else is imported as other with a warning.
assetyesThe coin that was bought, sold, moved or earned, e.g. BTC.
amountyesHow much of asset. Always positive; the type says which way it went. Fees are not included here.
quote_assetfor buy/sellWhat you paid with (buy) or received (sell), e.g. USD, USDT.
quote_amountfor buy/sellTotal paid (buy) or received (sell), excluding the fee. For a reward, optionally its value at the time; that becomes its cost basis.
pricenoPrice of one unit of asset in quote_asset. Worked out from the two amounts when empty.
fee_assetnoAsset the fee was charged in. Give both fee columns or neither.
fee_amountnoFee amount, positive. Buy fees are added to cost; sell fees reduce proceeds; a fee on a withdrawal helps pair it with the deposit on the other side.
accountnoWhich exchange or wallet. Overrides the account name you type on the import step, row by row, so one file can hold several accounts.
txidnoOn-chain hash or exchange reference. If the same hash appears on a withdrawal and a deposit, they are paired with certainty.
notenoAnything you like. Shows in Transactions.

Aliases the app also understands: date/datetime for timestamp; side/action for type; coin/symbol/currency for asset; quantity/qty for amount; total/cost/proceeds for quote_amount; fee for fee_amount; wallet/exchange for account; hash/reference for txid; memo/description for note.

Numbers and dates

Sample

timestamp,type,asset,amount,quote_asset,quote_amount,price,fee_asset,fee_amount,account,txid,note
2024-01-15T09:30:00Z,buy,BTC,0.25,USD,10500,42000,USD,10.5,Ledger wallet via Strike,,first buy of the year
2024-02-02T14:05:00Z,withdrawal,BTC,0.1,,,,BTC,0.0002,Strike,3f9c...e1,to cold wallet
2024-02-02T14:40:00Z,deposit,BTC,0.0998,,,,,,Ledger wallet,3f9c...e1,
2024-03-10T00:00:00Z,reward,ETH,0.012,USD,42,,,,Lido,,staking payout
2024-06-20T16:00:00Z,sell,BTC,0.05,USD,3300,66000,USD,3.3,Ledger wallet via Strike,,
2024-07-01T12:00:00Z,fee,ETH,0.0009,,,,,,Ledger wallet,,gas for wallet move

In this sample the withdrawal and deposit share a txid, so they pair on that alone; without it, they would still pair because the amounts differ only by the declared 0.0002 fee and the deposit arrives within the pairing window.

After importing: common questions

"Required columns are missing." At least timestamp, type, asset and amount must be present under those names or their aliases. Check for a stray space or BOM in the header.

"Unknown transaction type." The type value is not in the list above. The row is imported as other, which cost basis ignores. Fix the spelling and re-import; the corrected row replaces nothing, it is simply a new row, so delete the other one in Transactions.

A buy with no quote_amount. Buys and sells need the total. Rows without it are skipped and listed in the preview.

Same file, several wallets. Fill the account column per row; leave the account box on the import step as a fallback for rows where it is empty.