Skip to main content
All CollectionsSupport
How do I create a custom CSV?
How do I create a custom CSV?

Use a custom CSV for unsupported wallets and exchanges.

Morgan avatar
Written by Morgan
Updated over 4 months ago

This article goes over how to create a custom CSV to import transactions into ZenLedger. Custom CSVs are a good way to get unsupported coins, unsupported wallets, or lost/stolen transactions into ZenLedger. If you have any questions after reading this article on when you would use a Custom CSV or manual entry, please let us know by clicking on the support chat!

We recommend using Google Sheets., a free CSV editing software similar to Excel and Mac Numbers to create your custom CSV. Microsoft Excel is not recommended as it does some strange things with formatting cells.

If you only have one or two entries to make, we recommend adding them directly as a mnaual entry. Check out our Manual Entry Article for more information on how to add a transaction this way. However, if you have several, read on and watch our informative video for how to create a custom CSV!

Step-by-Step Video Instructions on How to Create a Custom CSV:

Notes:

  • The video says that SEND and RECEIVE are transaction types that are for wallets or exchanges you do not own. You can, however, use these types for Self-Transfer transactions. Once you import the CSV, these will match up as self-transfers or you can use the Resolution Center to match these transactions if not done automatically.

  • If your original spreadsheet from an exchange, such as Coinex, has information like transaction IDs or hashes, we do NOT need this. We only need the fields in the template filled out, exactly as we have described, for best results.

  • The timestamp on Column 1 must be on UTC. Put this in 24 hr time and no "AM/PM". You will have your best luck doing this in Google Sheets, which has an automatic option for the right timestamp under Format > Number > Date time (see screenshot below):

Detailed list of transaction types and definitions:

Header Row:

Timestamp

Time stamp should be in UTC, and 24 hrs format. The formats supported are yyyy-mm-dd hh:mm:ss and mm/dd/yyyy hh:mm:ss

Type

This identifies the type of transaction user is uploading. We support ‘buy', ‘sell,' ‘trade,' ‘receive', ‘send,' ‘Initial Coin Offering,' ‘margin trade', 'staking', 'fork', 'airdrop', 'payment', 'mined', 'gift sent', 'fee', 'staking reward''dividend received', 'interest received', 'misc reward', 'margin gain', 'margin loss', 'lost', 'stolen,' 'nft_mint',’donation_501c3’, 'staking lockup’ , 'staking return’,’nft_trade’

IN Amount

Incoming amount

In Currency

Incoming Token Currency ID

Out Amount

Outgoing amount

Out Currency

Outgoing Token currency ID

Fee Amount

Fee amount

Fee Currency

Fee Currency ID

Exchange (optional)

Exchange/wallet where the transaction took place

US Based

‘Yes’ if the exchange is located in US and ‘No’ if it is outside US.

Types Of Trades:

Type

Information

Buy

  1. In Currency should be Crypto

  2. Out Currency should be USD

  3. Out amount is exclusive of the fee amount. Cost basis = Outgoing USD + Fee

Sell

  1. Out currency should be Crypto

  2. In Currency should be USD

  3. In amount is exclusive of the fee amount. Proceeds = In amount

Trade

  1. Both In Currency and Out currency should be Crypto

  2. In and out amount are exclusive of the fee amount

Receive

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Send

  1. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

  2. Fee is imported. Sender addresses pay the fee.

  3. Out amount is exclusive of the fee amount. Proceeds = USD value of the Out amount

Initial coin offering

  1. It can be imported as trade

  2. Both In Currency and Out currency should be Crypto

Margin trade

  1. Both In Currency and Out currency should be Crypto

  2. In and out amount are exclusive of fee amount

Staking/Staking Reward

  1. Incoming reward obtained by staking a token

  2. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  3. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Fork

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Airdrop

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Payment

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Mined

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Gift sent

  1. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

  2. Fee is imported. Sender addresses pay the fee.

  3. Out amount is exclusive of the fee amount. Proceeds = USD value of the Out amount

fee

  1. Stand alone fees

  2. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

dividend received

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

interest received

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Misc Reward

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

margin gain

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

margin loss

  1. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

nft mint

Transaction in CSV

Transaction uploaded to Zenledger

  1. If Out Amount and Currency is left blank it is imported as Nft Mint Gas Only

  2. If Out Amount and Currency has amount and currency , it is imported as Nft Mint. Where,
    1 ETH is mint fee and 0.001 ETH is gas fee for the minting transaction .
    If NFT is minted with USD (unlikely but we support it) , it is imported as Nft Mint too.

    Nft minted with USD in CSV

    Transaction in Zenledger

  3. In and out amount are exclusive of the fee amount.

nft trade

Transaction in CSV

Transaction uploaded to Zenledger

  1. If Nft is being bought with crypto, we need to keep NFT in the In amount and currency section and crypto in Out amount and currency.

  2. If Nft is being sold for crypto, we need to keep crypto in the In amount and currency section and NFT in Out amount and currency.

  3. In and out amount are exclusive of the fee amount.

Donation 501c3

  1. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

  2. Fee is imported. Sender addresses pay the fee.

  3. Out amount is exclusive of the fee amount. Proceeds = USD value of the Out amount

Stolen

  1. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

  2. Fee is imported. Sender addresses pay the fee.

Lost

  1. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

  2. Fee is imported. Sender addresses pay the fee.

Staking Lockup

  1. Only Out Amount and Out currency columns are filled. In Amount and InCurrency can be left empty or , user can add USD if needed.

  2. Fee is imported. Sender addresses pay the fee.

Staking Return

  1. Only In Amount and In currency columns are filled. Out Amount and Out Currency can be left empty or, user can add USD if needed.

  2. Fee can be added to incoming transactions.In amount is exclusive of the fee amount.

Additional Information:

Type

Information

Self transfer/ Switch trade /Swap

These types are imported as Receive and Send. Once imported they are either auto-detected by the system or they can be manually marked.

Fiat

Custom CSV import only support USD as Fiat currency.

Keep in mind:

The IN and OUT are from the perspective of the wallet or account. So if I you are making a custom CSV for a wallet and you send 1 BTC to the wallet from Coinbase, and then 0.5 BTC out to Binance from your wallet, you would record “ 1.0 BTC IN, 0.5 BTC OUT.

Frequently made mistakes:

  1. Incorrect date format.

  2. File format should be in CSV.

  3. CSV format should be in UTF-8.

  4. Incoming and outgoing values in wrong columns.

  5. Incorrect header row or missing necessary columns.

You can always send us your file in the support chat or email to us at [email protected] if you get stuck, we're happy to help!

Did this answer your question?