How to Track Crypto Wallet Transactions in a Spreadsheet (2026 Guide)

Tracking wallet transactions in a spreadsheet takes four steps. Export one file per address per chain, then scale every token amount by its decimals. Split network fees out of the transferred value, and remove the transfers you made between your own wallets. Skip any one and the totals will be wrong.
The export itself is easy. What breaks the sheet is the file itself. A block explorer export is a ledger of blockchain events, not a tidy statement of what you sent and received.
This guide covers what to gather, how to build the sheet by hand, and where that route stops paying for itself. It is a data workflow, and it is not investment or tax advice.
What you need before you start
You need the complete list of addresses you control, and you need to know which chains each one has been used on. A missing address does not produce an error; it produces a quietly incomplete picture.
You also need to decide the unit of account before you start. Mixing native amounts and converted values in one column is the most common wrecking mistake.
Three things are worth settling first.
One file per address per chain. Block explorer exports are scoped that way. Two addresses across two chains is four files, and each needs a label column before they are combined.
Which event types you want. Normal transactions, internal transactions and token transfers are usually separate exports. Pulling only the first misses most token activity.
Your timezone. Timestamps are recorded in UTC. Convert once, at import, and record which timezone the sheet is in.
How to do it manually
Option 1: Export, label, then stack
Pull each export and immediately add two columns: the address it belongs to and the chain it came from. Do this before combining anything, because the columns are indistinguishable once stacked.
Keep the transaction hash. It is the only reliable key for spotting the same event appearing twice, and rebuilding a sheet without it means starting over.
This step is quick and it is where discipline pays. Everything downstream depends on knowing which row came from where.
Option 2: Normalise amounts and split out fees
Token amounts are stored on-chain as integers and must be scaled by the token's decimals value. The ERC-20 token standard describes that field. Eighteen decimals is common and it is not universal, so scaling everything by eighteen will silently inflate some balances by a factor of a trillion.
Network fees need their own column. On Ethereum, gas is paid in the native currency and is separate from whatever value the transaction moved. Adding a fee to a transfer amount misstates both.
Direction is derived, not given. Compare the from and to fields against your own address list and write In, Out or Internal into a column of your own.
Option 3: Handle the four cases that break the sheet
Four situations account for most wrong totals, and each needs a deliberate rule.
Internal transactions. Value moved by a contract rather than by a top-level transaction. These sit in a separate export and are invisible if you never pull it.
Failed transactions. A reverted transaction still consumes gas. The transfer did not happen and the fee did. Filter these out of transfer totals and keep them in fee totals.
One hash, several rows. A single swap can produce an outgoing token row, an incoming token row and a fee. Group by hash before counting anything, or the same event will be counted three times. Our guide to cleaning and deduplicating data covers the mechanics.
Transfers between your own wallets. These are movement, not activity. Match them by hash across your labelled files and exclude them, or your volume figures will be roughly double what they should be.
The shared ceiling. All three steps assume a fixed set of addresses. Add one wallet, or start using a new chain, and the export set changes and the whole normalisation has to be rerun.
Where the manual route slows down
The first build takes an afternoon and works. The problem is that it is not a one-off.
Every month means new exports, and every export means re-applying the same decimals, fee splits and self-transfer rules. None of that logic lives in the data, so it lives in your memory or in a tab nobody else understands.
Scope creep makes it worse. Two addresses is manageable. Six addresses across three chains is eighteen files. At that point people quietly stop updating the sheet and start guessing from a wallet interface instead.
There is a reconciliation cost too. Once the sheet and the wallet interface disagree, somebody has to work out which one is wrong. That investigation costs more than the original build.
The interface is not a substitute. It shows current balances, not what happened, and it will not tell you what you paid in fees last quarter.
How to track crypto wallet transactions with Powerdrill Bloom
Step 1: Upload your exports
Upload every export together rather than one at a time. Powerdrill Bloom profiles each file, so differing column names, mixed date formats and inconsistent amount precision are visible before anything is combined.
Step 2: Describe the normalisation in natural language
State the rules rather than building them. Ask for amounts scaled by each token's decimals, fees separated from transferred value, and failed transactions excluded from transfer totals.
Then ask the deduplication question directly. Ask which rows share a transaction hash, and which transfers move value between the addresses on your own list.
Step 3: Export the chart, report, or deck
Take out a normalised activity table, a chart of fees over time, or a short written summary of what moved and when.
Why this beats rebuilding the sheet every month
| Manual route | Powerdrill Bloom | |
|---|---|---|
| Token decimals | Look up and scale per token | Ask for amounts scaled by decimals |
| Fees vs transferred value | Separate column per export | State the rule once |
| Self-transfers | Manual hash matching | Ask which rows move between your own addresses |
| A new address or chain | Redo the whole normalisation | Add the file to the upload |
The last row is the one that decides whether the sheet survives. A workflow that breaks when you add a wallet will be abandoned within two quarters.
Common mistakes
Adding gas to the transfer amount. The fee and the value moved are different things. Combining them overstates outflows and makes fee analysis impossible later.
Assuming eighteen decimals for every token. Several widely held tokens use six. Applying one scaling factor across the sheet produces balances that are wrong by many orders of magnitude.
Dropping failed transactions entirely. They should leave the transfer totals and stay in the fee totals. Deleting the rows hides real spending.
Counting internal transactions twice. They arrive in a separate export and can overlap with what you already pulled. Group by hash before summing.
Forgetting an address. Totals will look plausible and be incomplete. Keep the address list in the workbook itself, not in your head.
Treating the sheet as a valuation. A record of wallet transactions describes movement, not worth. Pricing each row requires a separate decision about which rate and which timestamp to use.
Mixing timezones. Exports are in UTC. Converting some files and not others puts transactions in the wrong month, which quietly breaks every period comparison.
Conclusion
A wallet export is an event log, not a statement. Label every file by address and chain, then scale amounts by decimals and split fees out. Drop failed transfers from value totals, and remove movement between your own wallets.
Write the rules down beside the sheet, because a log of wallet transactions without its rules is not reproducible.
What makes it expensive is repeating all of that whenever a new address or chain appears. If that is where the time goes, try Powerdrill Bloom on the exports you already have. See also our guides to analyzing a crypto exchange CSV export and analyzing a crypto portfolio from a CSV, plus the CSV AI assistant page.
Frequently asked questions
How do I export wallet transactions to a spreadsheet?
Use the block explorer for each chain and export per address. Normal transactions, internal transactions and token transfers are usually separate downloads, so pull all three before combining them.
Why do my token amounts look wrong after importing?
Token amounts are stored as integers and need scaling by that token's decimals value. Eighteen is common but not universal, and applying the wrong factor changes a balance by orders of magnitude.
Should gas fees be included in the transaction amount?
No. Fees are paid in the chain's native currency and are separate from the value transferred. Keep them in their own column so transfer totals and fee totals stay independent.
How do I avoid double counting transfers between my own wallets?
Keep a list of every address you control, then match the from and to fields against it. Transfers where both sides are yours are internal movement and should be excluded from activity totals.
Do failed transactions matter?
Yes, for fees. A reverted transaction moves no value and still consumes gas, so exclude it from transfer totals while keeping the fee it cost you.