basis // cost basis, reconstructed

Nine things your tax tool got wrong.

Basis reconstructs cost basis across 41 chains and 120 exchanges and shows the working for every number. If we cannot determine a basis we tell you, rather than quietly filling in zero.

reconciliation // 2024-25

chains indexed

41

exchange connectors

120

lines with a source

100%

basis we could not determine

flagged

numbers quietly guessed

0

Every figure above expands into the transactions behind it. Nothing on this page is an estimate we hid from you.

the nine

Nine numbered failures of every other tool.

Not opinions. Each one is a decision the software made on your behalf, without telling you, that changes what you owe.

01

Zero-basis fill.

Most tools silently set an unknown cost basis to zero, which turns a break-even trade into a taxable gain. We flag it, quantify it, and make you decide.

02

Bridges as disposals.

Moving the same asset across a bridge is not always a disposal. We track wrapped and bridged representations as one position and show the trail.

03

LP positions treated as a black box.

We decompose liquidity positions into their underlying tokens at entry and exit, including impermanent loss and accrued fees, per block.

04

Airdrops stamped at the wrong moment.

Tools price an airdrop at the block you claimed it, not the block it became yours. We record both, apply the rule your jurisdiction actually uses, and show which one moved the number.

05

Staking rewards rolled into one annual lump.

Rewards accrue per epoch and each accrual carries its own basis. We keep every one at its own timestamp and price, then let you collapse the view without losing the rows underneath it.

06

Gas written off as nothing.

A fee paid in the asset you are disposing of is itself a disposal, and a fee on an acquisition belongs in the basis. We allocate every unit of gas to the event that caused it.

07

Your own transfers read as sales.

A move between two wallets you control is not a taxable event, but a tool that only sees one side of it books a disposal. We match both sides across chains and label the internal transfer.

08

Reverted transactions counted as trades.

A reverted transaction still burns gas but moves no asset. Most tools either drop the fee or book a phantom trade. We keep the fee, discard the trade, and say so on the line.

09

One price feed stretched over every chain.

A token on an L2 at 03:14 is not the same print as the same token on mainnet. We source prices per venue, record which feed we used, and mark any figure that fell back to another.

02 // hard cases

How we handle the ones nobody handles.

LP positions, wrapped assets and bridges are where every other reconstruction quietly gives up. They are the first thing Basis was built to get right.

lp

Liquidity positions, decomposed per block.

them

One opaque LP token in, one opaque LP token out, and a gain invented from the difference.

basis

We resolve the position into its underlying tokens at entry and at exit, separate impermanent loss from accrued fees, and carry a basis for each leg at the block it moved.

wrap

Wrapping is not a sale.

them

wETH is booked as a different asset from ETH, so wrapping triggers a disposal you never made.

basis

Wrapped representations inherit the position and the basis of the asset they represent. The wrap appears in the trail as a wrap, not as a trade.

bridge

Bridges tracked as one position across chains.

them

The asset leaves one chain and arrives on another as a brand-new acquisition with no history.

basis

We match the outbound and inbound legs, keep the acquisition date and basis intact, and show both transaction hashes on the same line.

03 // missing data

What we do instead of guessing.

A gap in the data is a fact about your history, not a hole to be filled with a convenient number. Every gap in Basis is typed, visible and yours to resolve.

unknown basis

We mark the lot as undetermined and show what the figure would be under each assumption you could reasonably make. Nothing is filed until you pick one.

missing price

We use the nearest verifiable print from a named venue, record the gap in minutes, and label the line as sourced by proximity rather than exact match.

unknown counterparty

An address we cannot classify stays unclassified. We will not guess that it is your own wallet in order to make a transfer non-taxable.

incomplete history

We state the date range we can stand behind and the range we cannot, per chain and per account, before you ever see a total.

04 // audit trail

The audit trail behind every single line.

Every figure on the report expands into the transaction hashes, the price source, the timestamp and the rule applied. Print it and hand it to an accountant or an auditor without a covering explanation.

disposal 0.4211 eth

gain 233.71

tx in

0x9f3c 41ab e7d2 a12b · base · block 12,884,901

tx out

0x41de 9b02 cc17 5f80 · mainnet · block 19,441,207

timestamp

2024-03-14 09:41:07 utc (venue clock, not ours)

price

3,412.08 · coinbase spot · exact match, 0s drift

rule

uk s.104 pooling · 30-day window checked, no match

basis

1,203.44 · acquired 2021-11-08 · carried through 1 bridge

fees

gas 4.19 allocated to this disposal, not written off

This is one line of one report, expanded. Every other line expands the same way, including the ones that net to nothing.

05 // jurisdictions

Jurisdictions and methods supported.

UK share pooling with the 30-day rule, US FIFO/LIFO/HIFO and wash sale treatment, plus Germany, Australia, Canada and Ireland. Method locked per jurisdiction, not per user preference.

uk · s.104 pool + 30 day

us · fifo / lifo / hifo

de · 1 year holding

au · cgt discount

ca · adjusted cost base

ie · fifo + 4 week

Locking the method to the jurisdiction is deliberate. A dropdown that lets you pick the method with the smallest number is not a feature, it is a liability with a nice interface.

06 // keys and data

Your keys, your data, and what we can see.

Read-only API keys and public addresses only. We never ask for a seed phrase or a withdrawal permission, and the key form rejects any key with trading scope.

what basis can see

+

Public addresses you paste in, and their on-chain history.

+

Read-only exchange keys, scoped to trade and transfer history.

+

The reports you generate, until you delete them.

what basis never asks for

-

A seed phrase or private key. There is no field for one.

-

Withdrawal or trading permission on any exchange key.

-

Custody of anything. Basis reads; it never moves an asset.

07 // pricing

Pricing by transaction count.

Free under 100 transactions. 89 to 10,000. 249 to 100,000. 599 above that, including a call with a human who has actually filed one of these.

free

under 100 transactions

Full reconstruction, full audit trail. Not a trial.

89

per tax year

to 10,000 transactions

Every chain and exchange connector included.

249

per tax year

to 100,000 transactions

LP decomposition and bridge matching at volume.

599

per tax year

above 100,000 transactions

Includes a call with a human who has actually filed one of these.

One price per tax year, per person. No per-chain surcharge, no paywall on the audit trail, and no upsell standing between you and a number you can defend.

08 // start

Import your first wallet.

Paste one address. Basis reconstructs what it can, tells you plainly what it cannot, and shows the working for both. Under 100 transactions it stays free, permanently.

Import your first wallet

read-only · no seed phrase · deadline in view

basis

Crypto tax software that shows its working. Not tax advice; the audit trail is so your adviser does not have to take our word for it either.