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.
Metadata
Release files for pulse-tax 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pulse_tax-0.1.0.tar.gz | 17.6 kB | Without provenance | Details for pulse_tax-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pulse_tax-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for pulse_tax-0.1.0-py3-none-any.whl |
Total release size: 37.8 kB
Release files / pulse_tax-0.1.0.tar.gz
| Download URL | pulse_tax-0.1.0.tar.gz |
|---|---|
| Size | 17.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
849294796f731aba393c43124d4a1a0ff08226e78de978b903b64673fc92d971
|
|
BLAKE2b-256 checksum How to use checksums |
5dbdd04bb383e9be9d3c1ae2b81c6d4708f214993c0ab1f24f4bb69de43d59f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / pulse_tax-0.1.0-py3-none-any.whl
| Download URL | pulse_tax-0.1.0-py3-none-any.whl |
|---|---|
| Size | 20.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f761cd0860c104a71cb8e11ecb2bd25f60e1ae629776058eb48c2dcfa8899f20
|
|
BLAKE2b-256 checksum How to use checksums |
f6616f72675079bbb5ff85b93b8be1d9586299597ffaea7bf3607a9a084fba42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Security for pulse-tax 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.