Paste a wallet address. No key, no connection, nothing granted to us.
A wallet address is public. Every block explorer already shows its whole history to anyone who types it in, so reading one needs no credential from you — which means there is no credential of yours for anyone to lose. Paste it into the free scan, pick the network, press Run.
Live today: Ethereum, Base, Optimism, Arbitrum One, Polygon and Gnosis Chain. Bitcoin and Solana are next.
Most tools call two very different things "wallet sync". One is this: reading a public address, which is information the world already has. The other is an exchange API key, which is a credential that exposes your entire account and has to live somewhere. We shipped the first one first, deliberately, and the second one is not coming until there is a good answer to where that key lives. Nothing you paste here can move a coin, and no product that asks you for a seed phrase, a private key or a withdrawal-enabled key deserves the answer.
What happens when you press Run
Native coin transfers, token transfers and the gas on transactions you sent, pulled from an open block explorer on the network you picked. Keyless, and self-hostable if the public instance ever gets unreliable.
Every movement becomes a transfer in or out, carrying its transaction hash. Gas becomes its own fee line, including gas on calls that moved nothing. Nothing becomes a sale, because the chain never said it was one.
The address joins your exchange exports as one more source and the whole ledger is rebuilt at once. A withdrawal from your exchange that lands at this address stops being two half-truths and becomes one move.
Missing values fill from cited public daily closes. What is left over — a transfer with no visible other side, an unsolicited token — becomes a question with its consequences spelled out, never a number we invented.
The three things a chain import usually gets wrong
Gas is coin that left your wallet. An importer that folds it into the transfer amount, or drops it because the transfer had no "fee" column, leaves coins in your ledger that are not in your wallet — and every later disposal then understates the gain by exactly that basis. Here each gas payment is its own line, priced where we can document a price and booked at basis where we cannot, so it is never silently a gain and never silently missing. Gas on a contract call that moved no tokens is kept too: it still cost you. And gas is charged in the network's own coin — POL on Polygon, xDAI on Gnosis — so a Polygon fee never quietly eats an Ethereum lot.
Unsolicited tokens arrive at real addresses constantly, many of them built to be noticed. Recording them as income at fair value invents ordinary income on something you did not ask for and may not legally hold. Deleting them hides the disposal if you ever sell. We import them, mark them as receipts you have not classified, and list the symbols so you can dismiss them together — the same posture as every other unresolved thing in this engine.
This is the failure the whole product exists to correct, and importing a wallet is the fastest way to commit it. Moving your own coins from an exchange to your own wallet is not a taxable event, but read from the chain alone it looks exactly like one thing going out and another thing arriving. Every movement is imported as a transfer; the matcher resolves the ones your other sources can prove; the rest ask you. See what your broker reports for why the same mistake at scale is what makes 1099-DA basis blank in the first place.
The case this actually solves
Your exchange export shows 2 ETH bought for $4,000 and then withdrawn. Your wallet shows 2 ETH arriving from nowhere and later sold for $9,000. The export has a cost and no sale. The chain has a sale and no cost, so the gain reads as the entire $9,000 — and that is precisely the number a blank-basis 1099-DA will report.
The withdrawal matches the deposit, the transfer is not a taxable event, the original $4,000 carries across the move, and the disposal shows a $5,000 gain against documented basis with the transaction hash attached to it. Add the address to a saved scan and the whole ledger is rebuilt, not patched.
Every saved scan also produces a free Basis Passport — the same basis history as a portable, evidence-linked file you can take to another tool or to a preparer. Comparing options first? See how we line up feature by feature.
Questions
Do I have to connect an exchange account or give you an API key?
No, and that is the point of shipping this first. A wallet address is public information — every block explorer already shows its entire history to anyone who types it in. Reading one needs no credential, so there is no credential of yours for us to store, leak or misuse. Exchange API sync is a different thing entirely: it means holding a key that exposes your whole account, and we are not doing that until it lives somewhere that deserves it. Nothing you paste here can move a coin.
Can you move my funds if I paste my address?
No. An address is a public identifier, not a key. Reading it is exactly as capable of moving your money as reading your bank's street address is. If any crypto tax product ever asks you for a seed phrase, a private key or a withdrawal-enabled API key, close the tab.
What exactly gets imported?
Every native ETH transfer in or out, every ERC-20 token transfer in or out, and the gas paid on the transactions you sent — including gas on contract calls that moved no tokens at all, which is money that left your wallet and which most importers quietly lose. Each row keeps its transaction hash, so every number in the finished workpaper traces back to a line you can look up yourself.
Why does nothing from my wallet come in as a sale?
Because a chain records movement, not intent. ETH leaving your address might be a sale, a payment, a gift, or you moving your own coins to your own exchange account, and the chain cannot tell you which — only you can. Booking every outgoing transfer as a disposal invents proceeds and tax you may not owe. Ignoring it hides a disposal you do. So every movement enters as a transfer, the ones we can match against your other sources are matched automatically, and the rest become a question with your options and their consequences spelled out.
How is gas treated?
As what it is: crypto you spent. Paying a fee in ETH disposes of that ETH, so it consumes the lots it came from and is reported at the fair market value of the gas, which is the mainstream US treatment of spending property. If we cannot document a price for that day, we still consume the coins — pretending they are still in your wallet would leave basis behind that no longer exists and understate every later gain — but we book it at basis so it moves no tax in either direction, and we say so.
An address of mine is full of scam airdrops. What happens to those?
They are imported and named, not counted as income. A real address collects unsolicited tokens by the dozen, most of them designed to be noticed. Treating them as income at receipt invents tax on something you never asked for and may have no legal claim to; deleting them loses the disposal if you ever sell one. So they arrive as receipts you have not classified, and the scan lists which symbols they are so you can dismiss the lot in one look.
Which chains work today?
Six: Ethereum mainnet, Base, Optimism, Arbitrum One, Polygon and Gnosis Chain. Your address is the same string on all of them and usually holds different things on each, so you pick the network rather than us guessing — reading the wrong one would return a clean, confident, empty answer, and 'your wallet is empty' is the most damaging wrong answer available here. Bitcoin and Solana are next; paste one of those and you can leave an email to hear when it opens.
Gas on Polygon isn't ETH. Do you handle that?
Yes, and it is the kind of detail that quietly ruins a ledger. Gas on Polygon is POL and on Gnosis it is xDAI. A reader that labelled every fee 'ETH' would consume your Ethereum lots to pay a Polygon fee — a wrong number produced silently, which is the one failure this codebase does not accept. The native coin travels with the chain, so a Polygon fee disposes of POL and nothing else.
Can I combine a wallet with my exchange CSVs?
That is the case worth doing. Coins bought on an exchange, withdrawn to a wallet and sold from the wallet have their cost in one place and their sale in the other. Read apart, both are wrong — and the 1099-DA reports the sale with a blank basis, which is the overstatement this whole product exists to fix. Save your scan (free) and add the address; the ledger is rebuilt whole, the withdrawal matches the deposit, and the real basis carries across.
What are the limits?
One address and one network per source — add the same address again on another network if it holds coins on both — and a bound of a few thousand movements per read so a scan always finishes. If your address is busier than that we tell you the read was truncated rather than silently handing you a partial ledger — an incomplete import that looks complete is the one outcome worse than no import.
Is my address stored?
It is stored as the name of that source on your scan, the same way an uploaded file keeps its filename, so you can see what your ledger was built from. An unsaved scan and everything in it is deleted after seven days. Nothing is shared with the explorer beyond the address itself, which is what you would type into it anyway.
Try it on an address you already have
Free, no account, and the scan and everything in it is deleted after seven days if you do not save it.