Skip to main content

How Koinly imports NFTs

Learn how Koinly treats NFT transactions, how different types of NFT-related activity looks in Koinly after importing, and how to fix the most common issues with NFTs.

Written by Jack

Non-fungible tokens (NFTs) became extremely popular in 2021 and still remain an important crypto niche, especially for digital art connoisseurs. This article explains how NFTs appear in Koinly and how to adjust your NFT transactions if needed.

Supported blockchains

Koinly will import NFTs when syncing:

  • Majority of EVM blockchains like Ethereum, Arbitrum, HyperEVM, etc.

    • Both ERC-721 and ERC-1155 are supported for most EVM chains

  • Solana

  • Tezos

  • Cardano (imported as standard tokens)

  • Bitcoin Ordinals and Runes

Unsupported blockchains

If Koinly doesn't support NFTs for a particular blockchain you used, you'll need to add these trades manually using our NFTx placeholders. See how in:

How NFTs are imported

For supported blockchains, NFTs will import similarly to "standard" cryptocurrencies, with some differences:

💲 NFTs don't have a known price

  • Koinly doesn't have a price feed for NFT collections

  • Since each NFT is unique, there's actually no such thing as a known price - assuming floor price would be inaccurate

  • Because of that, if the NFT is not merged automatically with another token, it will show a Market prices for XUZ are missing warning

🖼️ Popular NFT collections will show the NFT's image as the token's icon

🟦 Other NFTs and ERC-1155 tokens will have a generic blue "NFT" icon instead

Multi-NFT trades

If you traded more than one NFT in a single transaction, Koinly will import it as a Multi-trade: multiple deposits and withdrawals that are linked when it comes to the capital gains and cost basis calculation.

You can confirm that your trade was correctly identified as a many-to-one if:

  • All legs of the trade have the Multi-trade tag

  • Cost Analysis tab matches your expectations (e.g. value of sold crypto is distributed equally among acquired NFTs, establishing their cost basis)

ℹ️ Acquiring NFTs of different values in one transaction

If the market value of NFTs acquired wasn't equal, you can override it by manually changing the worth on each deposit

☝️ Manually merged multi-NFT trades

If you manually merge multiple NFTs with a single deposit, these will not form a Multi-trade - instead, the single side of the trade will be equally distributed between NFTs as trades, while the original transaction will appear as deleted

NFT Gallery

You can see a gallery of owned NFTs by switching to "NFTs" tab on your Koinly Dashboard. This is the only place where Koinly will show an estimate value of your NFTs (using the floor price for more popular collections) and a theoretical unrealized gains total.

Common questions and issues

NFT trades are not merged

Fixing the NFT transactions is usually quite simple.

  • NFT trade
    To fix an NFT trade, you just need to locate both legs of the trade (e.g. withdrawal of NFT and deposit of WETH) and merge them together

  • NFT off-chain trade
    If you have an NFT trade that has no corresponding withdrawal to merge with (e.g. because you paid for it using your credit card), then modify the worth (market value) of this transaction to match exactly what you paid for the NFT (inc. all fees paid), or what you received for the sold NFT

Custodial NFT marketplaces

For EVM blockchains, NFTs you list on various marketplaces don't leave your wallet, as you only sign an approval to spend the NFT from your wallet if it's sold.

For other blockchains like Solana, NFT marketplaces are often custodial - this means that NFT physically leaves your wallet when you list it, and it's sent to the contract address of the marketplace.

This different behavior requires some adjustments in Koinly:


When the NFT is listed (but not sold)

  • Tag the withdrawal of NFT as "Add to Pool"


When the NFT is delisted (returned without selling)

  • Tag the deposit of NFT as "Remove from Pool"


When the listed NFT is sold

  • Edit the deposit (of SOL) and turn it into a trade

    • Sending wallet: Pool wallet (same name but blue icon)

    • Sending amount: 1

    • Sending currency: the NFT sold (can be found by token ID from solscan)

Reporting NFTs as income

Some accountants believe that minted NFTs should be treated like created artwork and proceeds from selling them should be counted as your income (not capital gains), while the mint price should be treated as deductible cost.

If you want to follow this approach, it will require some manual adjustments:

  1. Locate an NFT mint transaction

  2. Split it if it's merged into an exchange

  3. Tag the withdrawal (cost of mint) as "Cost" (or any other cost-like tag you don't otherwise use to get the total easily)

  4. Ensure the deposit of NFT has a worth of $0

  5. Locate the sale transaction of the minted NFT

  6. Split it if it's merged into an exchange

  7. Tag the deposit (proceeds from sale) as "Other icome"

  8. Ensure the withdrawal of NFT has a worth of $0

Repeat these steps for every NFT you minted

Updating wallet with manual NFTs

If you created your wallet before Koinly started supporting NFTs for this blockchain and already used the manual approach (using NFTx placeholders) you can either:

  1. Delete the wallet and add it again

    • All your manual changes will be removed and Koinly will import NFTs automatically

  2. "Migrate" your manual NFTs

    • Add manual exchanges, selling your NFTx placeholder for the "proper" NFT Koinly imported

    • Tag the exchange as Swap to transfer the date of acquisition and cost basis directly to the new token, without realizing any gains

    • Check how to find your NFT is How to select a specific NFT

Changelog

  • 2026-06-17
    Added information about handling custodial marketplaces and how to treat minted NFTs as income

  • 2024-10-02

    Update to many-to-one NFT trades (if multiple NFTs were bought in one transaction): previously, token sold was split/distributed between each NFT after merging. Now these transactions remain as deposits/withdrawals with a special Multi-trade tag. This tag means that transactions are "linked" and cost basis tracked accurately (which can be confirmed on the "Cost Analysis" tab)

Did this answer your question?