Tax exports

Five files, and every figure in them can be traced back to a block

The point of an export is not that it is a spreadsheet. It is that somebody who disagrees with a number in it can follow that number to the transaction, the exchange rate and the day it came from — and either check it or correct it.

What you get

Positions, activity, multipliers, gains, Koinly

All CSV. There is no JSON export and no “full” export, because a single file that means five different things is a file nobody can audit. The three row-per-event ones take a date range.

Positions

One row per position: tokens held, the multiplier now and at acquisition, effective shares, cost basis, value, and the dividend income accrued with no transaction behind it.

Activity

One row per on-chain event, with the transaction hash it came from and whether it is a taxable disposal — including “unknown”, which is a real answer and not a blank.

Multiplier ledger

Every recorded change to the hidden multiplier, with the block and the transaction that declared it. This is the file no other tool can produce, because nobody else kept the history.

Realised gains

One row per disposal, matched back to the purchases it consumed under the rule you chose, converted at the rate published on the day of that disposal.

Koinly import

The same events in the shape Koinly reads, so the work lands in the tool your accountant already uses instead of asking them to learn a new one.

Matching rules

Four rules for matching a sale back to a purchase, and you pick

The same trades produce different gains under each one, so the rule in force is stated on every export rather than quietly assumed. First in first out, last in first out, highest cost first, and average cost pooling — the last of which has no per-lot holding period, which matters wherever a long-term rate exists.

Converted on the day, not today

Every disposal is converted at the rate published for the date of that disposal, from European Central Bank reference rates recorded when they were read. Twenty quote currencies.

A gap stays a gap

Where a rate was never published — a weekend, a holiday — the export says so rather than carrying a neighbouring day forward and calling it the rate.

Unknown is a value

A movement whose counterparty you have not identified is exported as unknown, not as a disposal and not as nothing. Guessing either way is how a return becomes indefensible.

Accrued income is separated out

Dividend income that arrived through the multiplier has no transaction to attach to, so it is its own column rather than being folded into a gain it is not part of.