Format reference
Solana Transaction CSV Format
The file uses the 12-column Koinly universal CSV format. Here is exactly what each column contains, what the data looks like, and how a tax tool reads it.
Last updated 6 October 2026
The 12 columns, in order
Date,Sent Amount,Sent Currency,Received Amount,Received Currency,Fee Amount,Fee Currency,Net Worth Amount,Net Worth Currency,Label,Description,TxHash
Date
TimestampConfirmation time in UTC, formatted YYYY-MM-DD HH:MM:SS. Determines the tax year and holding period.
Example: 2026-09-03 11:33:30
Sent Amount
DecimalQuantity that left the wallet, in the asset's own units. Empty on a pure deposit.
Example: 19999.000000000
Sent Currency
StringTicker for well-known assets, otherwise Koinly's three-part SYMBOL:MINT:SOL form so unrelated tokens never merge.
Example: SKR:SKRbvo6G...:SOL
Received Amount
DecimalQuantity that entered the wallet. Empty on a pure withdrawal.
Example: 4.005403686
Received Currency
StringSame format as Sent Currency.
Example: SOL
Fee Amount
DecimalNetwork fee, charged only when your wallet actually paid it. Appears once on a swap row. One-sided and fee-only activity gets its own cost row instead.
Example: 0.000005002
Fee Currency
StringAlways SOL on Solana.
Example: SOL
Net Worth Amount
DecimalDeliberately left empty. Your tax tool applies its own historical price for the date, which is more accurate than a value baked into the file.
Example: (empty)
Net Worth Currency
StringLeft empty for the same reason.
Example: (empty)
Label
StringKoinly tag inferred from the transaction type, where one applies: stake, reward, airdrop, cost, lost. Empty means no equivalent tag, not an error. Review these before filing.
Example: stake
Description
StringThe transaction type or source as reported on-chain. Context only, no effect on the import.
Example: SWAP, TRANSFER, STAKE_SOL
TxHash
String (base58)The transaction signature. Verify any row on Solana Explorer or Solscan. Tax tools also use it to deduplicate.
Example: 2fBUMUPP5U6q...
Sample output
A swap, a plain deposit, and a stake, as they appear in a real file:
Date,Sent Amount,Sent Currency,Received Amount,Received Currency,Fee Amount,Fee Currency,Net Worth Amount,Net Worth Currency,Label,Description,TxHash 2026-09-03 11:33:30,19999.000000000,SKR:SKRbvo6G...:SOL,4.005403686,SOL,0.000005002,SOL,,,,SWAP,2fBUMUPP5U6q... 2026-07-23 08:12:35,,,118560.912610,BONK,,,,,,TRANSFER,2eFMbaDrxTu3... 2025-09-22 07:29:15,10.002282880,SOL,,,,,,,stake,STAKE_SOL,3bUx2JtVcczC...
Note the third row. Moving SOL into a stake account is not a sale, so it carries the stake label. Without it, a tax tool reads a one-sided row as a disposal.
Tax tool compatibility
Koinly - imports as-is
The file is written to Koinly's universal CSV specification. Use the Custom CSV import, and the default column mapping matches. See the Koinly import guide.
CoinTracker and CoinLedger - conversion required
Both use their own column names, order and date handling. Do not upload this file unchanged. The CoinTracker conversion guide covers the mapping.
Excel and Google Sheets - opens directly
Standard comma-separated UTF-8 with a header row. Fields containing commas or quotes are quoted and escaped.
Frequently asked questions
Why does one swap produce a single row but some transactions produce several?
A simple swap has both a sent and a received asset, so it fits on one row. A transaction that moves several different assets at once needs one row per pairing, and same-asset movements within a transaction are netted first so the file never contains a swap of an asset for itself.
Why are the Net Worth columns empty?
On purpose. Koinly and similar tools apply their own historical price for each date, which is more reliable than a figure fixed at export time. Leaving the fields blank lets the importing tool value the transaction.
What does an empty Label mean?
That the transaction type has no matching Koinly tag, which is normal for ordinary transfers and swaps. Labels are only set where there is a clear equivalent, such as stake, reward, airdrop, cost or lost. Every label is an inference and should be reviewed before you file.
Why is a currency shown as a long three-part string?
Lesser-known SPL tokens are written as SYMBOL:MINT:SOL. The mint address in the middle keeps each asset unique, so two different tokens sharing a ticker cannot collapse into one another in your tax tool. Look the mint up on Solscan to identify it.
Can I upload this file straight to CoinTracker or CoinLedger?
No. The file uses Koinly's universal CSV column names and order. CoinTracker and CoinLedger need their own templates, so the columns must be converted first. Koinly's Custom CSV import accepts the file as it is.
Download your Solana transaction CSV
Preview your transactions free, then download the file described above. No login required.
Export Solana TransactionsWorks with Phantom, Solflare, Backpack, and any Solana wallet.