crypto-tax-export — Claude Code skill: crypto trade export for tax
Turns trade history into tax-ready CSVs for Koinly, CoinTracker, CoinLedger, TokenTax and IRS Form 8949.
npx skills add agiprolabs/claude-trading-skills --skill crypto-tax-export -a claude-codeWhat crypto-tax-export does
The skill classifies Solana transactions by tax treatment: Jupiter swaps, liquidity pool deposits and withdrawals, staking rewards, airdrops, token migrations. Failed transactions get dropped from the export, since no taxable event happened there.
Output comes in the column layout each tax tool expects — Koinly, CoinTracker, CoinLedger, TokenTax each have their own labels and fields, plus a simplified format for TurboTax and TaxAct. It also builds IRS Form 8949 with Part I and Part II and columns a through h. Cost basis runs on FIFO, LIFO, HIFO or specific identification. A reconciliation pass matches on-chain history against your trade journal and flags missing entries, duplicates and amount mismatches.
You need Python 3.10 and trade data from a journal, exchange export or on-chain history. On-chain reconciliation calls for Solana RPC or Helius API access; historical prices come from Birdeye or CoinGecko. The skill formats data and does the math only. It is not tax advice, so run the numbers past a qualified professional before filing.
What it helps with
- export trades as a CSV Koinly will accept
- sort Jupiter swaps and LP operations into tax categories
- compute cost basis with HIFO and produce Form 8949
- reconcile on-chain history against a trade journal and find gaps
- keep failed transactions out of the tax report
Example prompts for the agent
- export my 2025 trades in Koinly format
- compute cost basis with HIFO and build IRS Form 8949
- reconcile my Solana on-chain history with the trade journal and show mismatches
How to install crypto-tax-export
1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill crypto-tax-export -a claude-code2Manually: put the files in place
~/.claude/skills/crypto-tax-export/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/crypto-tax-export/
1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill crypto-tax-export -a codex2Manually: put the files in place
.agents/skills/crypto-tax-export/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill crypto-tax-export -a cursor2Manually: put the files in place
.cursor/skills/crypto-tax-export/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install agiprolabs/claude-trading-skills crypto-tax-export2Manually: put the files in place
.github/skills/crypto-tax-export/SKILL.md1Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill crypto-tax-export -a gemini-cli2Platform CLI
gemini skills install https://github.com/agiprolabs/claude-trading-skills --path skills/crypto-tax-exportManually: put the files in place
.devin/skills/crypto-tax-export/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add agiprolabs/claude-trading-skills --skill crypto-tax-export -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about crypto-tax-export
How do I install crypto-tax-export in Claude?
Run npx skills add agiprolabs/claude-trading-skills --skill crypto-tax-export -a claude-code. The skill file then lands at ~/.claude/skills/crypto-tax-export/SKILL.md.
What does crypto-tax-export do?
It exports trade history and tax calculations as CSVs for Koinly, CoinTracker, CoinLedger, TokenTax, TurboTax and TaxAct, and generates IRS Form 8949. It also classifies Solana transactions and reconciles them with your trade journal.
Which cost basis methods are supported?
Four: FIFO, LIFO, HIFO and specific identification. The last one requires lot tracking.
Source text
SKILL.md · MIT
---
name: crypto-tax-export
description: Export trade history and tax calculations in formats compatible with Koinly, CoinTracker, CoinLedger, TokenTax, and IRS Form 8949
license: MIT
metadata:
author: agipro
version: "0.1.0"
category: trading
---
# Crypto Tax Export
Export trade history and tax calculations for tax software and IRS filing. Handles Solana-specific transaction types (Jupiter swaps, LP operations, staking rewards, airdrops) and generates CSVs compatible with Koinly, CoinTracker, CoinLedger, TokenTax, TurboTax/TaxAct, and IRS Form 8949.
> **Disclaimer:** This skill provides data formatting and calculation tools only. It does not constitute tax advice. Consult a qualified tax professional for guidance on reporting cryptocurrency transactions. Tax laws vary by jurisdiction and change frequently.
## Prerequisites
- Python 3.10+
- Trade history data (from internal trade journal, on-chain history, or exchange exports)
- For on-chain reconciliation: Solana RPC or Helius API access (see `helius-api` skill)
- For cost basis: historical price data (see `birdeye-api` or `coingecko-api` skills)
## Capabilities
| Capability | Description |
|---|---|
| Multi-format CSV export | Koinly, CoinTracker, CoinLedger, TokenTax, TurboTax, TaxAct |
| IRS Form 8949 generation | Part I (short-term) and Part II (long-term), columns a through h |
| Solana tx classification | Jupiter swaps, multi-hop routes, LP deposits/withdrawals, staking, airdrops |
| Cost basis methods | FIFO, LIFO, HIFO, Specific Identification |
| Reconciliation | Match on-chain history against internal trade journal |
| Failed tx handling | Identify and exclude failed transactions (no taxable event) |
## Supported Export Formats
### Koinly CSV
Koinly expects a universal import format with these columns:
```
Date,Sent Amount,Sent Currency,Received Amount,Received Currency,Fee Amount,Fee Currency,Net Worth Amount,Net Worth Currency,Label,Description,TxHash
```
Labels: `swap`, `staking`, `airdrop`, `liquidity_in`, `liquidity_out`, `cost`, `gift`, `lost`.
### CoinTracker CSV
```
Date,Received Quantity,Received Currency,Sent Quantity,Sent Currency,Fee Amount,Fee Currency,Tag
```
Tags: `trade`, `staking_reward`, `airdrop`, `lp_deposit`, `lp_withdrawal`.
### CoinLedger CSV
```
Date (UTC),Type,Received Currency,Received Amount,Sent Currency,Sent Amount,Fee Currency,Fee Amount,Exchange/Wallet
```
Types: `Trade`, `Income`, `Gift Received`, `Mining`, `Staking Reward`, `Airdrop`.
### TokenTax CSV
```
Type,BuyAmount,BuyCurrency,SellAmount,SellCurrency,FeeAmount,FeeCurrency,Exchange,Group,Comment,Date
```
Types: `Trade`, `Income`, `Staking`, `Airdrop`, `Spending`.
### TurboTax / TaxAct CSV
Both accept a simplified Form 8949 format:
```
Description of Property,Date Acquired,Date Sold,Proceeds,Cost Basis,Gain or Loss
```
### IRS Form 8949
Part I — Short-term (held one year or less). Part II — Long-term (held more than one year).
Columns:
- **(a)** Description of property (e.g., "2.5 SOL")
- **(b)** Date acquired (MM/DD/YYYY)
- **(c)** Date sold or disposed of (MM/DD/YYYY)
- **(d)** Proceeds (sale price in USD)
- **(e)** Cost or other basis (purchase price in USD + fees)
- **(f)** Code, if any (per IRS instructions)
- **(g)** Adjustment amount
- **(h)** Gain or loss (d minus e, adjusted by g)
Check box: **(A)** if basis reported to IRS, **(B)** if not, **(C)** if Form 1099-B not received.
## Solana Transaction Classification
### Jupiter Swaps (Single-Hop)
A direct token-to-token swap. Classified as a **disposal** of the sent token and **acquisition** of the received token. Each side is a taxable event.
```python
tx = {
"type": "swap",
"sent": {"amount": 1.5, "currency": "SOL", "usd_value": 225.00},
"received": {"amount": 50000, "currency": "BONK", "usd_value": 224.50},
"fee": {"amount": 0.000005, "currency": "SOL", "usd_value": 0.00075},
"timestamp": "2025-03-15T14:30:00Z",
"tx_hash": "5abc...def",
}
```
### Jupiter Swaps (Multi-Hop)
A routed swap through intermediate tokens (e.g., SOL -> USDC -> BONK). Only the **initial send** and **final receive** matter for tax purposes. Intermediate hops are not separate taxable events.
### LP Deposits / Withdrawals
- **Deposit**: Sending tokens to an LP is generally treated as a disposal at fair market value.
- **Withdrawal**: Receiving tokens from an LP is an acquisition at fair market value.
- LP tokens received/burned may be tracked for cost basis continuity.
### Staking Rewards
Staking rewards (SOL validator rewards, liquid staking yield) are **income** at fair market value when received. Cost basis equals the FMV at receipt.
### Airdrops
Airdrops are **income** at fair market value when the recipient gains dominion and control. Some jurisdictions differ on when dominion is established.
### Token Migrations
A 1:1 token migration (e.g., protocol upgrade) is generally **not** a taxable event. The new token inherits the cost basis and holding period of the old token.
### Failed Transactions
Failed Solana transactions (status: failed, or inner instruction errors) are **not** taxable events. The transaction fee (SOL) may still be deductible as a cost of doing business in some jurisdictions. Always exclude failed txs from trade export.
## Cost Basis Methods
```python
from enum import Enum
class CostBasisMethod(Enum):
FIFO = "fifo" # First In, First Out (IRS default)
LIFO = "lifo" # Last In, First Out
HIFO = "hifo" # Highest In, First Out (minimizes gains)
SPEC_ID = "spec_id" # Specific Identification (requires lot tracking)
def compute_gain(
proceeds: float,
cost_basis: float,
adjustments: float = 0.0,
) -> float:
"""Compute gain or loss for Form 8949 column (h)."""
return proceeds - cost_basis + adjustments
```
## Reconciliation
Reconciling on-chain history with an internal trade journal catches:
1. **Missing trades** — on-chain tx not in journal (manual entry missed)
2. **Phantom trades** — journal entry with no matching on-chain tx
3. **Amount mismatches** — journal amount differs from on-chain amount
4. **Duplicate entries** — same tx recorded twice
Reconciliation workflow:
```python
def reconcile(
journal_trades: list[dict],
onchain_txs: list[dict],
tolerance: float = 0.001,
) -> dict:
"""Match journal entries to on-chain transactions.
Args:
journal_trades: Internal trade records with tx_hash field.
onchain_txs: Parsed on-chain transactions.
tolerance: Relative tolerance for amount matching.
Returns:
Dict with matched, missing_onchain, missing_journal,
mismatched lists.
"""
onchain_by_hash = {tx["tx_hash"]: tx for tx in onchain_txs}
matched, missing_onchain, missing_journal, mismatched = [], [], [], []
for trade in journal_trades:
tx = onchain_by_hash.pop(trade.get("tx_hash", ""), None)
if tx is None:
missing_onchain.append(trade)
elif abs(trade["amount"] - tx["amount"]) / max(tx["amount"], 1e-9) > tolerance:
mismatched.append({"journal": trade, "onchain": tx})
else:
matched.append({"journal": trade, "onchain": tx})
missing_journal = list(onchain_by_hash.values())
return {
"matched": matched,
"missing_onchain": missing_onchain,
"missing_journal": missing_journal,
"mismatched": mismatched,
"summary": {
"total_journal": len(journal_trades),
"total_onchain": len(onchain_txs),
"matched": len(matched),
"missing_onchain": len(missing_onchain),
"missing_journal": len(missing_journal),
"mismatched": len(mismatched),
},
}
```
## Quick Start
```python
from scripts.tax_exporter import (
generate_demo_trades,
export_koinly_csv,
export_form_8949_csv,
)
# Generate sample trades
trades = generate_demo_trades()
# Export to Koinly format
export_koinly_csv(trades, "koinly_import.csv")
# Export to Form 8949 format
export_form_8949_csv(trades, "form_8949.csv")
```
Run the demo directly:
```bash
python scripts/tax_exporter.py --demo
```
## Use Cases
### End-of-Year Tax Filing
Export all trades from your journal, reconcile with on-chain history, generate Form 8949 line items, and import into TurboTax or hand to your CPA.
### Tax-Loss Harvesting Review
Export with HIFO cost basis method to identify positions with unrealized losses that could offset gains before year-end.
### Multi-Platform Consolidation
Combine trades from multiple wallets and DEXs into a single Koinly or CoinTracker import file for unified portfolio tax reporting.
### Audit Preparation
Use reconciliation to verify completeness of your trade records against on-chain history. Produce a clean Form 8949 with supporting transaction hashes.
## Files
| File | Description |
|---|---|
| `references/planned_features.md` | Export format specs, Form 8949 mapping, Solana tx classification, reconciliation methodology |
| `scripts/tax_exporter.py` | Demo script: generate trades, export to Koinly CSV and Form 8949 CSV, show format differences |
## Related Skills
- `helius-api` — Fetch and parse Solana transaction history for reconciliation
- `birdeye-api` / `coingecko-api` — Historical price data for cost basis lookups
- `solana-onchain` — Wallet transaction analysis and classification
- `trade-journal` — Internal trade record keeping
© agipro · MIT · agiprolabs/claude-trading-skills