Skip to main content

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.

PyPI version License


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.com
  • cointracker_2026.csv — import directly at cointracker.io
  • pulse_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:


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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pulse_tax-0.1.0.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pulse_tax-0.1.0-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

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

Hashes for pulse_tax-0.1.0.tar.gz
Algorithm Hash digest
SHA256 849294796f731aba393c43124d4a1a0ff08226e78de978b903b64673fc92d971
MD5 6cf3d50f2a05f52c9567a969edd88a69
BLAKE2b-256 5dbdd04bb383e9be9d3c1ae2b81c6d4708f214993c0ab1f24f4bb69de43d59f0

See more details on using hashes here.

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

Hashes for pulse_tax-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f761cd0860c104a71cb8e11ecb2bd25f60e1ae629776058eb48c2dcfa8899f20
MD5 3401247d3c4b20f0d43a9ef6ef373416
BLAKE2b-256 f6616f72675079bbb5ff85b93b8be1d9586299597ffaea7bf3607a9a084fba42

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page