Skip to main content
Advanced Custom CSV Import

A Guide to Importing Unsupported Data via the Advanced Custom CSV

Patrick McGimpsey avatar
Written by Patrick McGimpsey
Updated over a month ago

If you ever encounter a scenario where you cannot find your desired exchange/wallet within the Crypto Tax Calculator platform, we still allow for seamless importing of data using our Advanced (Custom) CSV Template.


Step 1 - Complete the Advanced Custom CSV

1. Firstly, download the Advanced Custom CSV Template.
2. Now, obtain the data you would like to import. For example, "I'm trying to import transactions from XXX chain due to it being unsupported, so I would navigate to the blockchain explorer for XXX chain > paste my wallet address > and obtain a CSV export of my transactional history".

3. The below is a breakdown table of what each column reflects, with steps 4, 5, 6 and 7 showing how to fill the CSV with some example scenarios to hopefully give you an idea to complete your own;

Column

Description

Timestamp (UTC)

The default format is set as YYYY-MM-DD HH:mm:ss, however, you can also select different time formats by clicking on 'Advanced Options' when importing. (Check here for more details.)

Type

This is the type of transaction, e.g., buy, sell. You can read more about the valid transaction types below.

Base Currency

The base currency of the trading pair. For example, if you purchase ETH using USD, the base currency is ETH.

Base Amount

The amount (excluding fee), which corresponds to the base currency.

Quote Currency

The quote currency of the trading pair. For example, if you purchase ETH using USD, the quote currency is USD.

Quote Amount

The amount of quote currency that was traded, excluding fees.

Fee Currency

(Optional)

The currency in which the fee was paid.

Fee Amount

(Optional)

The amount of fees that were paid.

From

(Optional)

The name of the exchange/wallet you are transferring from. If left blank, it will default to the exchange/wallet name where you import the CSV.

Note - if manually importing for multiple exchanges/wallets, please ensure you have a CSV for each source rather than compiling everything into one file to avoid in-app source & destination confusion.

To

(Optional)

The name of the exchange/wallet you are transferring to. If left blank, it will default to the exchange/wallet name where you import the CSV.

Note - if manually importing for multiple exchanges/wallets, please ensure you have a CSV for each source rather than compiling everything into one file to avoid in-app source & destination confusion.

Blockchain

(Optional)

The blockchain where the transaction happened. This is particularly important for interacting with wallets that are imported on multiple chains.

Note - only the blockchains we support are valid. If an invalid blockchain is entered, this field will be ignored in the app.

ID

(Optional)

Any transaction ID that you would like to associate with this transaction for easy searching on the review transactions page. It should be unique where possible.

(Optional)

The price per unit of the 'Base Currency'. If left blank, the price defaults to market price.

(Optional)

This is the currency of the Reference Price Per Unit.

  • Only fiat currencies are valid. Cryptocurrencies (including stablecoins) in this column will be ignored.

  • Only use this when Reference Price Per Unit is filled.

  • If left blank but with Reference Price Per Unit filled, this defaults to USD.

NOTE❗- if you have no information to input for some columns, please do NOT delete any columns as this will cause a fail in import parsing error.

4. Trade Example - On March 2nd 2024 at 10:30:00, I bought 1 ETH with 3000 USDC, encountering a 1 USDC fee on Binance Exchange;

5. Transfer Example - On March 2nd 2024 at 11:00:00, I sent 1 ETH from Binance Exchange to my Metamask Wallet, encountering a 0.001 ETH fee;

6. Airdrop - On March 2nd 2024 at 13:30:00, I received 10000 ARB tokens from their airdrop, encountering a 0.001 ETH fee to claim;

7. Add Liquidity Example - On March 2nd 2024 at 14:00:00, I added 2 parts 0.5 ETH & 1500 USDC into the XYZ ETH/USDC Liquidity Pool encountering a 0.001 ETH fee, and obtained 0.0856 ETH/USDC LP Receipt Token;

7. Once completed, save your file and ensure it's in the file format of .csv (Comma Separated Value).



Step 2 - Importing the Custom CSV File

1. Navigate to the Integration page and click '+ Add integration';

2. You can either use the custom CSV for a new exchange/wallet or add the CSV file to an existing exchange/wallet for missing transactions;

Check here if you are adding missing transactions to the existing integration.

Navigate to the exchange/wallet and select 'Upload File'.

If the CSV file is for a new exchange/wallet, type the unsupported exchange/wallet name in the search bar and click 'Import CTC templated CSV for' located under 'RESULTS'.


3. Upload or drag & drop the file, and click the 'Import CSV' at the bottom.

4. You can see a green tick showing that the CSV file has been successfully uploaded.


Valid Transaction Types

Crypto Tax Calculator supports a number of transaction types. If you would like your manual import to be as automatically categorized as possible, you must make sure the type of the transaction matches one of the following;

  • Purchase of cryptocurrency, which increases the balance remaining and effects cost basis.

  • A sale of cryptocurrency which decreases the balance remaining and triggers a capital gain event.

  • A deposit of your local currency into the exchange. Note that if you deposit a currency other than your local currency, you need to have a corresponding buy transaction of that currency. (e.g. if your country setting is AU, there should be AUD->USD transactions imported as USD is foreign currency for AU.)

  • Use this if you cashed out from an exchange into your bank account.

  • Use this if you have disposed of cryptocurrency to cover fee transactions generated as a result of other transactions, e.g., gas fees paid during on-chain Ethereum swaps. If using this category, don't include this fee amount in the fee column.

  • You approved the use of a smart contract. This is taxed the same way as a Fee, a disposal event. This category is listed in the Miscellaneous Expense Report.

  • A transfer of cryptocurrency to a wallet or exchange. Increases the balance remaining on the receiving address and decreases the balance remaining on the from address. Does not increase your overall balance remaining. Does not trigger a capital gain event.

  • A transfer of cryptocurrency from a wallet or exchange. Increases the balance remaining on the receiving address and decreases the balance remaining on the from address. Does not decrease your overall balance remaining. Does not trigger a capital gain event.

  • Use this if you acquired a new cryptocurrency as a result of a chain split (such as Bitcoin Cash being received by Bitcoin holders).

  • This acts similar to a Sell. However you wish to label this as an expense. You can use this if you want to categorize an outgoing transaction as an expense (e.g. business paying out a salary). This category is listed in the Miscellaneous Expense
    Report.

  • Triggers a capital loss event with the sale price being zero.

  • Use this if you have lost the crypto, triggers a capital loss event similar to the stolen category.

  • Use this if you have sent your crypto / NFT to a burner address. It triggers a capital loss event similar to the stolen category.

  • Triggers an income tax event based on the market value at the time of receipt. Increase the balance remaining and is used for future cost basis calculations.

  • Similar to income but used for interest-bearing activities which don't suit other categories.

  • Use this if you received mining rewards (as a hobby).

  • Use this if you received a free token airdrop.

  • Use this if you earned interest from staking.

  • You deposited these coins into a staking pool. This acts similar to a withdrawal.

  • You have withdrawn these coins from the staking pool. This acts similar to a deposit.

  • Use this if you acquired a fee refund from trading and/or cryptocurrency as a cash-back (e.g., credit card payment).

  • Use this if you have received payments from secondary sales (e.g., being an NFT creator).

  • Use this if you spent crypto on personal use and you want to ignore this transaction for tax purposes. Warning, this is only valid in very specific individual circumstances. Check with your tax professional before using this option.

  • Use this if you have acquired cryptocurrency as a gift. If you have given a gift to someone else, use the sell category.

  • Use this If you have given a gift to someone else. This is similar to a sell.

  • Use this if you have received (acquired) a cryptocurrency or cash as a loan.

  • Use this if you have repaid a loan.

  • Use this if the lending platform you used has liquidated your collateral.

  • Used to transfer the cost basis from one blockchain to another.

    Note: A "bridge-in" must match a "bridge-out".

  • This acts similar to a 'buy'. A common use case is when a user is minting NFTs.

  • You have withdrawn these coins from a borrowing/lending platform. This acts similar to a deposit into your account.

  • You have set these coins aside as collateral for a loan. This acts as a withdrawal from your account.

  • You have added these coins into a liquidity pool

  • You have received tokens for adding coins into a liquidity pool.

  • You have removed these coins from a liquidity pool.

  • You have returned tokens for removing coins from a liquidity pool.

  • A failed transaction. This will be ignored from tax and balance calculations. (Note: Any fees incurred from creating the transaction will be accounted for.)

  • Mark the transactions as spam and ignore them from tax and balance calculations.

  • To account for a non-taxable transaction where one asset is traded for another. It works by assigning the cost basis and purchase date of the original asset to the new one. (NOTE: If you are a UK user using the HMRC inventory method, 'swap' is currently not supported. Please use 'buy/sell'.)

  • You received crypto on a blockchain from a trade initiated on a different blockchain. This is the incoming side of a cross-chain trade.

  • You traded crypto on one blockchain and sent it to another blockchain via a bridge. This is the outgoing side of a cross-chain trade.

Derivative Categories

  • Use this if you have performed margin, futures, derivates, etc. type trades and realized a profit from your trading activity.

  • Use this if you have performed margin, futures, derivates, etc., type trades, and realized a loss of your trading activity.

  • Use this if you have paid fees associated with a realized-profit or realized-loss trades.

  • You opened or increased a position by investing crypto from your account (for derivatives).

  • You closed or reduced a position and received returns into your account (for derivatives).

  • You opened or increased a position and received a position token (for derivatives).

  • You closed or reduced a position by returning the position token (for derivatives).

What is the Reference Price?

The Reference Price Per Unit is the price per unit of the Base Currency. For example, if the Base Currency is 'ETH', and you purchased it for 100 AUD instead of the market price, you should fill in the columns as below:

  • Reference Price Per Unit: 100

  • Reference Price Currency: AUD

If you only fill in the following;

  • Reference Price Per Unit: 100

  • Reference Price Currency: (blank)

The ETH price will be calculated as 100 USD.

The Reference Price Currency needs to be local currencies. Cryptocurrencies (including stablecoins) in this column will be ignored. If the Reference Price Currency is not defined, then we default to "USD". The value will be converted to your local currency in CTC once the CSV is imported. For more details about the foreign currency rates, please check this guide.

What about Trades?

You can import your trades via the Advanced CSV Template by utilizing the buy and sell transaction types where appropriate. For example, if you traded ETH/USDT, then the Base Currency is ETH, and the Quote Currency is USDT. Based on the trade type you executed, you must choose between the buy or sell transaction type. See below for an example;

  • You traded the ETH/USDT currency pair and swapped 1 ETH <-> 2000 USDT.

  • If you actually sold 1 ETH and bought 2000 USDT you should set the Type as sell, the Base Currency as ETH, the Base Amount as 1, the Quote Currency as USDT, and the Quote Amount as 2000.

  • If you actually sold 2000 USDT and bought 1 ETH, you should set the Type as buy, the Base Currency as ETH, the Base Amount as 1, the Quote Currency as USDT, and the Quote Amount as 2000.

Make sure you add any fees in the Fee Currency and the Fee Amount columns where appropriate. Please note that the Base Amount and Quote Amount do not include any fees!

Advanced Options

The advanced options drop-down menu allows you to assign the currencies and select custom date formats for your CSV;

Manually Assign Currencies

You can select the tickers that appear on your CSV that you would like to assign to a specific currency. Any tickers not specified will be assigned by their market cap ranking where possible;


Manually Select Date Format

You can select the date format which appears on your CSV. If left unspecified, the date we recognized will only default to YYYY-MM-DD HH:MM:ss;

Frequently Asked Questions (FAQs)

Q1: My CSV fails to import. What's wrong with it?

There are a number of reasons why your CSV fails to import.

Issue

What to do?

Deleted columns

It is important to keep all columns, even if some are optional and not filled in. Deleting any column could cause the import to fail.

Incorrect timestamp format

Double-check your timestamp and ensure that it follows our supported timestamp format. Check all supported timestamp formats here.

Invalid transaction type

Review the transaction types you used and ensure you use only valid ones. The data will not be imported if you use an invalid transaction type. Click here for the list of valid transaction types.

Required columns are not filled in

The custom CSV import requires the first four columns to be filled in: Timestamp (UTC), Type, Base Currency, and Base Amount. The data won't be imported if any of these columns are missing.

Q2: Can I use any timestamp format?

The default format is set as YYYY-MM-DD HH:mm:ss. You can also select different time formats by clicking "Advanced Options" when importing. Click here to see the list of other supported timestamp formats.


​Q3: The timestamp on my CSV is on my local time or a different time zone. Is it okay to use that?

The Advanced Custom CSV should be in Universal Time Coordinated (UTC). After importing your file, the timestamp will automatically adjust to your CTC account's local time setting. If your CSV is in a different time zone, please adjust your timestamp to UTC to ensure your data will have the correct local time once imported.

Q4: Do I need to fill in all of the columns?

Some columns are optional; you will see the word 'optional' on their headers. These columns are not mandatory to be filled in.

  • For non-trade transactions, you must fill in the first four columns:

    • Timestamp (UTC)

    • Type

    • Base Currency

    • Base Amount.

  • For trade (buy and sell) transactions, you must fill in the first six columns:

    • Timestamp (UTC)

    • Type

    • Base Currency

    • Base Amount

    • Quote Currency

    • Quote Amount.

Q5: Fee columns are optional. Should I include the fees?

The Fee Currency and Fee Amount columns are optional, as not all transactions include a fee. However, filling out the fee columns is important if your transactions have a fee. This ensures that your fees are accounted for accurately, which is essential in determining your balances and gains/losses.

​Q6: My transactions should show as 'Trade', but it's not working.

When making a trade transaction, it is important to correctly fill in the first six columns. These columns include Timestamp (UTC), Type, Base Currency, Base Amount, Quote Currency, and Quote Amount. Please ensure that all of these columns are filled in accurately.

If your trade transaction includes a fee, add the details in the Fee Currency and Fee Amount columns. Please note that the Base Amount and Quote Amount do not include any fees.

Please check this section for an example of how to fill in the CSV for trades.

Q7. I don't want to import my CSV file as a custom/manual/new source. Can I import it to an existing integration?

Absolutely, yes! You can import the custom CSV to an existing integration. The Advanced Custom CSV can be used in any of our existing integrations.

Did this answer your question?