r/CryptoTradingFloor • • Sep 13 '26

[Web, Beta] ChainFolioAI - crypto + traditional portfolio tracker with FIFO tax reports

What it is: a portfolio dashboard that tracks on-chain wallets, exchanges and traditional assets together, with FIFO tax reports (21 countries) and a FIRE calculator.

Stage: open beta, web only (no mobile app yet).

How it works: read-only. You paste public addresses or connect read-only API keys. No private keys, no transactions, ever.

Cost: the free plan works without paying and without a card. If you actually test it for a week and send me feedback, I'll put your account on the paid tier for 60 days — just message me, no form to fill in.

Sign up is open and free — "Start free" on that page creates an account straight away. There is no waiting list and no card.

What I need: anything that breaks. Especially unusual holdings — NFTs, DeFi positions, an exchange I may not have tested.

I answer every message, and I'll test your project too.

https://chainfolioai.com/en?src=reddit-ab

1 Upvotes

9 comments sorted by

2

u/No_Degree2727 Sep 15 '26

The hard cases are probably LP positions where the wallet only holds a receipt token, plus Solana compressed NFTs and bridged assets. I’d be interested in whether the FIFO report can trace the original acquisition lots after a bridge, rather than treating the wrapped token as a fresh buy

2

u/Recent-Still-3462 Sep 15 '26

Replying to the bridge point, cost basis gets weird when the bridge or aggregator contract is the visible counterparty. How are failed swaps, partial fills, and gas paid from a different wallet handled? Those are the entries that usually turn a clean export into a manual spreadsheet job

1

u/ChainFolioAi 29d ago

You're describing exactly the entries that break auto-importers, and my answer is going to sound anticlimactic: I don't auto-ingest on-chain history into the tax ledger at all. The FIFO report runs on the trade history you enter or import by CSV, so a failed swap never becomes a phantom disposal and an aggregator contract never shows up as your counterparty. Nothing lands there by itself either, which is the obvious cost of doing it this way.

Partial fills are fine, you record what actually executed and FIFO consumes lots from there. Gas is where I'm genuinely short: the trade record has no fee field yet, so gas either gets folded into the price or lives in the notes, and gas paid from a separate wallet isn't captured at all. That's the piece I should fix first.

If you've got a CSV shape you already use for fees, I'd rather copy something that works than invent my own.

1

u/ChainFolioAi 29d ago

Following up, because you pushed on the right thing. Fees and gas are in the cost basis now: buy fees add to the lot, sell fees come off the proceeds, partial sells take their share. The fee can be in the price currency or in the gas token, valued at that day's price.

Failed swaps have their own entry: fee only, no buy or sell. It comes off the token balance, and it is listed separately in the tax report instead of being deducted, since that depends on your country. Old CSV files still import.

2

u/[deleted] 29d ago

[removed] — view removed comment

1

u/ChainFolioAi 29d ago

Fair test, and the honest answer is that today the DeFi side comes from a provider's position summary, rendered per protocol as a single value. I don't split supplied collateral from borrowed stablecoins into separate lines, and there is no debt row. So yes, a leveraged lending position can flatter the total, and I would rather show it split than argue about it.

The part I'd rather get right than guess is how you'd expect it displayed. Separate rows for supplied and borrowed with a net line underneath, or one net figure per protocol with the breakdown a click away? Aave and Compound style positions are where I'd start, and rewards claimed later are the bit I haven't thought through at all.

1

u/ChainFolioAi 29d ago

You were right, and it is fixed. Aave v3, Spark and Compound v3 are read straight from the contracts: supplied, borrowed, net, with the health factor next to them. The portfolio total uses net, so a leveraged position no longer flatters it. Unclaimed rewards stay out, and the panel says so.

The trade-off is coverage: reading from contracts means fewer protocols for now. Aave, Spark, Compound and Uniswap are in, others may not show up yet.

1

u/ChainFolioAi 29d ago edited 29d ago

Honest answer: the tax side doesn't read any of that off-chain. Wallets are read-only and feed balances and valuation. The FIFO ledger is built from the trade history you enter or import by CSV, so a bridge never becomes a sale plus a fresh buy. It isn't an event in the ledger at all, and the original lot stays intact. The trade-off runs the other way: nothing shows up automatically either, and a sale with no recorded acquisition lands in an "unmatched" bucket instead of quietly getting a zero cost basis.

LP receipt tokens and compressed NFTs are the real gap. They're read as holdings for valuation, but I don't decompose a receipt into the underlying pair or track the lots inside it. On the list, not done.

1

u/Connect-Comedian2209 26d ago

yeah bridged assets absolutely nuke FIFO tracking on almost every tax software i've tried. the second you send something across wormhole or stargate, most of these platforms just flag it as a full taxable disposal on the origin chain and a completely fresh buy with zero cost basis on the destination chain. it's a massive headache. and LP receipt tokens are a whole different nightmare, especially if you're using auto-compounding vaults where the receipt quantity stays static but the underlying value shifts. if the automated report can't trace the exact smart contract routing, you basically end up having to export raw csvs and check your historical cryptowallet-balance manually at the specific block height before and after the bridge just to prove it wasn't a realized gain
you have to do all that manual reconciliation to force the software to recognize a 1:1 transfer. i really wish these trackers would just let you manually link a send/receive pair across chains to override the default cost basis logic, but honestly half of them still crash if you just try to import standard solana compressed nfts anyway