Four required columns. The dollar cell is already the final basis or the net proceeds.

Not tax advice ยท last updated 25 October 2026

Generic CSV cost-basis mapper

A spreadsheet that is not River, Coinbase, Kraken, Cash App, Strike, Swan, or Gemini can still be read when the headers match the generic names, or when you rename them with a map. The result is a review with a tax pro. The map does not decide the tax treatment. It only tells the worksheet which cell is which.

Columns

Required: timestamp, type, asset, and quantity. Optional: quote_amount, quote_asset, fee_usd, external_id, account, and notes. quote_amount is used as written. For a buy or income it is the cost basis, already including fees. For a sell it is net proceeds. For an incoming transfer it is a declared basis, used only when that receive is not matched to a send. fee_usd is stored and is not added again.

Accepted type words include buy, purchase, sell, sale, send, withdrawal, transfer out, receive, deposit, transfer in, and income. Interest, mining, and referral keep those income categories. Other income words are category other. An unknown type is skipped.

The reconciler in the browser reads a file that already uses those header names. It does not offer a column picker. A renamed file is a command-line map. Known exchange headers still win unless you force the generic format. The shape of the map is in the project README. The calculator builds this same generic file from rows you type, and it does not upload them.

Naive timestamps are read as UTC. A blank dollar cell stays blank. BasisFix does not substitute zero. See missing basis.

How to map a generic CSV

  1. Put one row per event. The required headers are timestamp, type, asset, and quantity.
  2. Put the final USD basis or net proceeds in quote_amount. fee_usd is stored and is not added a second time.
  3. Use buy, sell, send, receive, or income. The words interest, mining, and referral keep those income categories.
  4. Drop the file on the reconciler when the headers already use those names. A renamed spreadsheet uses the command-line map.
  5. Review the warnings. An unknown type is skipped, and a blank dollar amount stays blank. This page is not tax advice.

Questions

Which headers are required?

timestamp, type, asset, and quantity. quote_amount is optional and, when present, is already the final USD basis or the net proceeds.

Does the browser page let me rename columns?

No. The reconciler reads the generic names as written. Renaming a spreadsheet is a command-line map. Known exchange headers are detected before the generic format.

Is the fee added on top of quote_amount?

No. fee_usd is recorded and is not added a second time. Put the economic USD amount in quote_amount.

Related drafts