Collect crypto trade history from any exchange and export for tax reporting (Koinly, CoinTracker)
Project description
pulse-tax
Crypto tax reporting via PULSE Protocol — collect trade history from Binance, Bybit, Kraken, and OKX in one command. Export to Koinly, CoinTracker, or JSON.
The problem
You trade on 3 exchanges. Each one stores your history differently. Koinly, CoinTracker, and every tax accountant want a CSV. You end up logging in to each exchange, hunting for the export button, downloading 3 different CSV formats, and converting them manually.
With pulse-tax: one command.
Installation
pip install pulse-tax
Quick Start
1. Create config file
pulse-tax init
This creates pulse_tax_config.json. Edit it to add your API keys (read-only keys are sufficient — no trading permissions needed):
{
"binance": {
"api_key": "YOUR_BINANCE_API_KEY",
"api_secret": "YOUR_BINANCE_API_SECRET"
},
"bybit": {
"api_key": "YOUR_BYBIT_API_KEY",
"api_secret": "YOUR_BYBIT_API_SECRET"
},
"kraken": {
"api_key": "YOUR_KRAKEN_API_KEY",
"api_secret": "YOUR_KRAKEN_API_SECRET"
},
"okx": {
"api_key": "YOUR_OKX_API_KEY",
"api_secret": "YOUR_OKX_API_SECRET",
"passphrase": "YOUR_OKX_PASSPHRASE"
}
}
Remove exchanges you don't use.
2. Export
# Export 2026 trades to Koinly CSV
pulse-tax export --year 2026 --format koinly
# Export to CoinTracker
pulse-tax export --year 2026 --format cointracker
# Export to JSON (backup / custom processing)
pulse-tax export --year 2026 --format json
Output files are created in the current directory:
koinly_2026.csv— import directly at koinly.comcointracker_2026.csv— import directly at cointracker.iopulse_tax_2026.json— full structured data
Python API
from pulse_tax import TaxCollector, KoinlyExporter
from pulse_tax.collectors import BinanceCollector, BybitCollector
# Configure exchanges
collector = TaxCollector()
collector.add_exchange(BinanceCollector(api_key="...", api_secret="..."))
collector.add_exchange(BybitCollector(api_key="...", api_secret="..."))
# Collect
report = collector.collect(year=2026, verbose=True)
print(f"{report.total_trades} trades from {report.exchanges}")
# Export
csv = KoinlyExporter().export(report.trades, report.transfers)
with open("koinly_2026.csv", "w") as f:
f.write(csv)
Supported Exchanges
| Exchange | Trades | Deposits/Withdrawals |
|---|---|---|
| Binance | Yes | Yes |
| Bybit | Yes (spot + perps) | Yes |
| Kraken | Yes | Yes |
| OKX | Yes (spot + futures) | Yes |
Supported Export Formats
| Format | Service | How to import |
|---|---|---|
koinly |
Koinly | Imports > Add import > Universal CSV |
cointracker |
CoinTracker | Portfolio > Add transaction > CSV |
json |
Any | Custom processing |
Why PULSE?
pulse-tax is part of the PULSE Protocol ecosystem. PULSE provides a universal semantic interface for AI-to-AI and agent-to-service communication.
The same exchange adapters that pulse-tax uses for collecting history are also used by:
- pulse-binance for live trading
- pulse-bybit for Bybit integration
- AI trading agents built with pulse-anthropic (Claude) or pulse-openai (GPT)
Security Note
pulse-tax only needs read-only API keys. It never places orders, never withdraws funds. Create a separate read-only key on each exchange specifically for tax reporting.
License
Apache 2.0 — free forever, open source.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pulse_tax-0.1.0.tar.gz.
File metadata
- Download URL: pulse_tax-0.1.0.tar.gz
- Upload date:
- Size: 17.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
849294796f731aba393c43124d4a1a0ff08226e78de978b903b64673fc92d971
|
|
| MD5 |
6cf3d50f2a05f52c9567a969edd88a69
|
|
| BLAKE2b-256 |
5dbdd04bb383e9be9d3c1ae2b81c6d4708f214993c0ab1f24f4bb69de43d59f0
|
File details
Details for the file pulse_tax-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pulse_tax-0.1.0-py3-none-any.whl
- Upload date:
- Size: 20.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f761cd0860c104a71cb8e11ecb2bd25f60e1ae629776058eb48c2dcfa8899f20
|
|
| MD5 |
3401247d3c4b20f0d43a9ef6ef373416
|
|
| BLAKE2b-256 |
f6616f72675079bbb5ff85b93b8be1d9586299597ffaea7bf3607a9a084fba42
|