Open-source CLI for crypto transaction tracking and tax reporting
Crypto tax tools charge per transaction, hide their calculations, and some fabricate events to fill gaps in your data.
Exitbook doesn't do any of that. Every number traces back to a real import. Every calculation is visible. If data is missing, it tells you instead of guessing.
- Import — pull transactions from blockchains (by wallet address) or exchanges (by API key, or CSV for KuCoin).
- Normalize — convert everything into a universal transaction format.
- Link — detect transfers between your wallets. You review, confirm, or reject each suggested link.
- Price — attach USD prices to every inflow, outflow, and fee. Fill any gaps manually.
- Calculate — compute cost basis (FIFO, LIFO, or average).
- Check balances — after importing, run
balanceto verify Exitbook matches the chain. If balances are correct, the calculations built on top of them will be too. - Import all your wallets — transfers between your own wallets need both sides to link correctly. Missing a wallet means broken links.
- Pricing is intraday — USD prices are per-day, not per-second. Close enough for tax reporting.
| Chain Family | Sub-chains | Import Status | Balance Verification |
|---|---|---|---|
| Bitcoin | 4 chains | Complete (simple wallets) | Complete (simple wallets) |
| Cardano | 1 chain | Complete (simple wallets) | Complete (simple wallets) |
| Cosmos | 95 chains | Complete (simple wallets) | Complete (simple wallets) |
| EVM | 113 chains | Complete (simple wallets)* | Complete (simple wallets)* |
| NEAR | 1 chain | Complete (simple wallets) | Complete (simple wallets) |
| Solana | 1 chain | Complete (simple wallets) | Complete (simple wallets) |
| Substrate | 89 chains | Complete (simple wallets) | Complete (simple wallets) |
| XRP | 2 chains | Complete (simple wallets) | Complete (simple wallets) |
* EVM supports both address and contract address tracking
Note: All chains support complete import and balance verification for simple user wallets (EOA addresses). Complex wallet scenarios (multi-sig, smart contract wallets, cross-chain interactions) require additional work.
View all supported chains
Bitcoin family: bitcoin, dogecoin, litecoin, bitcoin-cash
Cardano: cardano
Cosmos chains: injective, osmosis, cosmoshub, terra, juno, secret, stargaze, and 88 more
EVM chains: ethereum, polygon, optimism, arbitrum, base, avalanche, beam, bsc, zksync, polygon-zkevm, linea, scroll, mantle, blast, and 99 more (see packages/blockchain-providers/src/blockchains/evm/evm-chains.json)
NEAR: near
Solana: solana
Substrate chains: polkadot, bittensor, kusama, acala, moonbeam, astar, and 83 more
XRP: xrp, xrp-testnet
| Exchange | CSV Import | API Import |
|---|---|---|
| Kraken | - | Working |
| KuCoin | Working | Working |
| Coinbase | - | Working |
ExitBook uses a multi-provider failover system to fetch blockchain data. Each blockchain family supports multiple data providers that implement different operations. The system automatically retries across providers if one fails.
| Operation | Description |
|---|---|
getAddressTransactions |
Fetch all transactions for an address |
getAddressInternalTransactions |
Fetch internal/contract transactions (EVM) |
getAddressBalances |
Get native token balance for an address |
getAddressTokenTransactions |
Fetch token transfers for an address |
getAddressTokenBalances |
Get all token balances for an address |
getTokenMetadata |
Retrieve token metadata (symbol, decimals, etc.) |
getAddressBeaconWithdrawals |
Fetch Ethereum beacon chain withdrawals |
hasAddressTransactions |
Check if address has any transactions |
Bitcoin Family (3 providers)
| Provider | Chains Supported | Operations | API Key Required |
|---|---|---|---|
| blockstream | bitcoin | Transactions, Balances, HasTransactions | No |
| mempool.space | bitcoin | Transactions, Balances, HasTransactions | No |
| tatum | bitcoin, litecoin, dogecoin, bitcoin-cash | Transactions, Balances, HasTransactions | Yes (TATUM_API_KEY) |
Note: Tatum provides coverage for the other Bitcoin-family chains where Blockstream/Mempool.space don't operate.
Cardano (1 provider)
| Provider | Operations | API Key Required |
|---|---|---|
| blockfrost | Transactions, Balances, HasTransactions | Yes (BLOCKFROST_API_KEY) |
Cosmos (1 provider)
| Provider | Chains Supported | Operations | API Key Required |
|---|---|---|---|
| injective-explorer | injective | Transactions, Balances | No |
Note: Only Injective is currently supported. Other Cosmos chains (Osmosis, Terra, etc.) planned via Mintscan.
EVM Chains (5 providers)
| Provider | Chains Supported | Operations | API Key Required |
|---|---|---|---|
| moralis | All 113 EVM chains | Transactions, InternalTxs, Balances, TokenTxs, TokenBalances, TokenMetadata | Yes (MORALIS_API_KEY) |
| routescan | Most EVM chains | Transactions, InternalTxs, Balances, TokenTxs | No |
| etherscan | ethereum | BeaconWithdrawals | Yes (ETHERSCAN_API_KEY) |
| thetascan | theta | Transactions, Balances, TokenBalances | No |
| theta-explorer | theta | Transactions | No |
Note: Moralis and Routescan provide multi-chain coverage. Etherscan/ThetaScan are chain-specific.
NEAR (1 provider)
| Provider | Operations | API Key Required |
|---|---|---|
| nearblocks | Transactions, TokenTransactions, Balances | No |
Solana (3 providers)
| Provider | Operations | API Key Required |
|---|---|---|
| helius | Transactions, Balances, TokenBalances, TokenTxs, TokenMetadata | Yes (HELIUS_API_KEY) |
| solana-rpc | Transactions, Balances, TokenBalances | No |
| solscan | Transactions, Balances | Yes (SOLSCAN_API_KEY) |
Substrate (2 providers)
| Provider | Chains Supported | Operations | API Key Required |
|---|---|---|---|
| subscan | polkadot, kusama | Transactions, Balances | No |
| taostats | bittensor | Transactions, Balances | Yes (TAOSTATS_API_KEY) |
Note: Only 3 of 89 Substrate chains currently have providers. Others require additional integrations.
Summary: 16 active providers across 7 blockchain families. 6 require API keys, 10 work without authentication.
Disabled providers: Alchemy (EVM), Blockcypher (Bitcoin - rate limits too low), Blockchain.com (Bitcoin - timeouts)
To view full provider details including rate limits: pnpm blockchain-providers:list
# Import from exchange CSV (KuCoin only)
pnpm run dev import --exchange kucoin --csv-dir ./exports/kucoin
# Import from exchange API
pnpm run dev import --exchange kraken --api-key KEY --api-secret SECRET
# Import blockchain transactions (simple wallets)
pnpm run dev import --blockchain bitcoin --address bc1q...
# Verify live balance
pnpm run dev balance --account-id <id># View transactions
pnpm run dev transactions
# View accounts
pnpm run dev accounts
# Manage prices
pnpm run dev prices enrich
pnpm run dev prices set <symbol> <amount> --date YYYY-MM-DD
# Export data
pnpm run dev export --exchange kraken --format csv --output ./report.csv
# Reprocess all raw data (clears derived data, rebuilds transactions)
pnpm run dev reprocess# List available blockchains and providers
pnpm run dev blockchains view
# Clear processed data (keeps raw data)
pnpm run dev clearRequirements: Node.js ≥24, pnpm ≥10.6.2
# Install dependencies
pnpm install
# Build packages
pnpm build
# Run tests
pnpm test
# Try an import (KuCoin CSV or Kraken API)
pnpm run dev import --exchange kucoin --csv-dir ./your-data
# or
pnpm run dev import --exchange kraken --api-key KEY --api-secret SECRETConfiguration: Add API keys to .env in project root (see CLAUDE.md for details)
Bug reports and feature requests: open a GitHub issue.
Contributions are welcome — see CONTRIBUTING.md for the process, coding conventions, and how to add new exchange or blockchain adapters.
AGPL-3.0-or-later