Open-source CLI for crypto transaction reconciliation and tax reporting Status: Work in Progress
ExitBook helps you track cryptocurrency activity across exchanges and blockchains by importing raw data, processing it into a universal transaction format, and verifying balances against live on-chain state.
We're building the infrastructure to support:
- Fetching data in batches with cursor-based resumption
- Automatic failover across multiple data providers
- Live balance verification against blockchain state
- Handling both EOA addresses and contract interactions
| Chain Family | Sub-chains | Import Status | Balance Verification |
|---|---|---|---|
| Bitcoin | 4 chains | Partial | Partial |
| Cardano | 1 chain | Partial | Partial |
| Cosmos | 95 chains | Partial | Partial |
| EVM | 113 chains | Near Complete* | Partial |
| NEAR | 1 chain | Partial | Partial |
| Solana | 1 chain | Partial | Partial |
| Substrate | 89 chains | Partial | Partial |
* EVM supports both address and contract address tracking
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
| Exchange | CSV Import | API Import |
|---|---|---|
| Kraken | Working | 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
pnpm run dev import --exchange kraken --csv-dir ./exports/kraken
# Import from exchange API
pnpm run dev import --exchange kraken --api-key KEY --api-secret SECRET
# Import blockchain transactions
pnpm run dev import --blockchain bitcoin --address bc1q...
# Process raw data into universal format
pnpm run dev process
# 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# List available blockchains and providers
pnpm run dev list-blockchains
# Check system status
pnpm run dev status
# Clear processed data (keeps raw data)
pnpm run dev clearRequirements: Node.js ≥23, pnpm ≥10.6.2
# Install dependencies
pnpm install
# Build packages
pnpm build
# Run tests
pnpm test
# Try an import
pnpm run dev import --exchange kraken --csv-dir ./your-dataConfiguration: Add API keys to .env in project root (see CLAUDE.md for details)
apps/cli/ # Commander-based CLI entry point
packages/
blockchain-providers/ # Multi-provider blockchain data fetching
exchange-providers/ # Exchange API clients (ccxt-based)
ingestion/ # Import & process pipelines
accounting/ # Linking, pricing, cost-basis
data/ # SQLite repositories (Kysely)
core/ # Shared types and schemas
Design principles:
- Vertical slices per exchange/blockchain (co-locate importers, processors, schemas)
- Functional core with
Resulttypes (neverthrow) and Zod validation - Dynamic provider discovery via metadata registries
- Two-phase pipeline: import raw → process to universal format
- Complete balance verification for all chain families
- Transaction linking (correlate withdrawals with deposits)
- Cost-basis calculation (FIFO, LIFO, Specific ID)
- Multi-currency pricing pipeline
- Advanced gap detection and data quality checks
This project follows strict code quality standards. See CLAUDE.md for:
- Development workflows and testing patterns
- Adding new blockchain providers or exchange adapters
- Architecture patterns (functional core, Result types, vertical slices)
Run pnpm build and pnpm lint before opening PRs.
AGPL-3.0-only