← Back to list
💰

crypto-tax-export Checked

Export trade history and tax calculations in formats compatible with Koinly, CoinTracker, CoinLed…
💰 Finance & Trading skills By agiprolabs Version v1.0.0 Added 2026-09-20 Updated 2026-09-20 Source ↗
8.5Overall rating
2Views
5Downloads
366Stars

Installation

🤖 Install via AI

Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.

Install the "crypto-tax-export" skill by following the instructions at https://skill123.me/install/crypto-tax-export.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/crypto-tax-export.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 15 KB
📊 Static rating
8.5/10
Trigger
6.5
Structure
8.7
Workflow
8.0
Content
9.0
Engineering
10.0
Security
10.0

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

Export trade history and tax calculations in formats compatible with Koinly, CoinTracker, CoinLedger, TokenTax, and IRS Form 8949

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.

Documentation

Export trade history and tax calculations in formats compatible with Koinly, CoinTracker, CoinLedger, TokenTax, and IRS Form 8949

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).

View full documentation

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.


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


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:


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


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:


python scripts/tax_exporter.py --demo

Use Cases

### End-of-Year Tax Filing

Export all trades from you

Score breakdown

Trigger
6.5
Description states What (export trade history and tax calcs in named software/IRS-compatible formats) with strong keyword coverage (Koinly, CoinTracker, Form 8949); no when/when-not; Related Skills section provides routing.
Structure
8.7
267-line SKILL.md, one reference, one script; Files table maps roles; minor: demo_*.csv output samples live at package root rather than assets/.
Workflow
8.0
Task-oriented: format specs, classification rules, runnable export and reconciliation functions, --demo mode; reconciliation (matched/missing/mismatched with tolerance) is a genuine verification loop; use cases ground the workflow.
Content
9.0
Precise column-level specs and code with docstrings; classification rules are stated as rules, appropriately hedged with jurisdiction caveats.
Engineering
10.0
Valid frontmatter (name, description, plus license/metadata extras); script has shebang, demo mode, dependency-free stdlib csv usage; all referenced paths exist.
Security
10.0
6.0 manifest: data reads none; side effects limited to writing CSVs to user-specified paths (declared); network none; credentials none; persistence none. Capabilities match declared scope. Tax disclaimer present. No injection, no destructive commands.
Tax-export formatting skill: exact CSV column specs for Koinly/CoinTracker/CoinLedger/TokenTax/TurboTax plus IRS Form 8949 Parts I/II column mapping, Solana tx classification rules (multi-hop, LP, staking, airdrops, failed txs), four cost-basis methods, and a reconciliation workflow with tolerance matching. Prominent not-tax-advice disclaimer with consult-a-professional guidance - good compliance posture. Deductions: three demo CSV files sit in the package root instead of assets/; description lacks when/when-not. 6.0 manifest: no network at all; file writes limited to user-specified CSV output paths (declared core function); no credential access, no persistence; capabilities match declared scope.