How it works

How Intentio turns complex DeFi into clean, categorized books.

Point Intentio at an address and a date range; it pulls the on-chain transactions, works out what each one economically was — getting the complex ones right — and hands you clean, categorized rows (standard CSV / journal) to review and upload. Below is exactly how, on real mainnet transactions you can open on Etherscan.

The problem

Raw logs were never meant to be accounting records.

Take one real swap — 0x5cfc13de…191e13, a 138 USDT → 138 USDC rotation through 1inch. On-chain it emits 11 ERC-20 Transfer logs, routed through tokens the wallet never held. Booked naively, those legs look like real holdings bought and sold — doubling turnover and inventing gains. Lending and liquidity are worse: in an Aave action the affected account isn't even the token's sender, and a Uniswap V3 position is an NFT with its underlying routed through a manager.

0x5cfc13de…191e13block 25,343,453
naive11 Transfer logs to wrangle — routing noise looks like holdings
resolved138.095178 USDT+138.127962 USDC1inch v6

One economic event — 9 routing legs collapsed.

So teams export the raw data and clean it by hand, transaction by transaction, before it ever reaches their accounting service. That manual clean-up is what Intentio automates.

Reconstruction

Resolved from the mechanism, not the surface logs.

For each shape Intentio reads the protocol's own event and recovers the one true economic event. Here is each, on a real mainnet transaction:

resolvedUniswap V3 · liquidity

Provided 0.0171 WETH + 9,019 STRK — one position event, not two disposals

resolvedAave V3 · borrow

Borrowed 90,000 USDT — one line, not a phantom $90k inflow

And it shows its work. The evidence trail Intentio emits for that swap:

  1. RouterMatched known router matched: 1inch v6
  2. SubjectSent subject sent 138.095178 USDT
  3. SubjectReceived subject received 138.127962 USDC
  4. NoiseDiscarded 9 routing-noise transfers collapsed

Honesty

It abstains rather than guess.

Anything outside coverage is flagged abstained, with a reason, and kept in the output — never a confident-wrong number. A wrong number on a ledger is worse than a flagged one. Here is a real abstained row from the same batch as the swap above:

abstainedexpected 1 in + 1 out touching subject, got 1 out / 0 in (4 transfers)

Kept in the output with its reason — you review it and decide, instead of trusting an invented entry.

The moat

A reorg-aware, audit-grade ledger.

The recovered events feed a ledger that self-corrects when the chain reorgs. Two swaps are booked; then block 101 reorgs and its swap is no longer on the canonical chain — so it leaves the books automatically, kept in the audit trail as superseded:

BlockEconomic eventAt closeNow (after reorg)
100138.10 USDT → 138.13 USDCfinalfinal
101500.00 USDC → 499.80 USDTconfirmedreverted

The block-101 swap is removed automatically and marked reverted · superseded_by b2 in the audit trail — never silently stale, never silently erased. Every other on-chain accounting tool reconciles after the fact. (Live-node feed in progress.)

The handoff

Into the accounting tool you already use.

Intentio doesn't replace your accounting service — it sits in front of it. The resolved events export as a standard CSV / journal, ready to review and upload. The swap above becomes two clean movements; the abstained tx rides along, flagged:

date,tx_hash,type,asset,amount,counterparty,venue,status
2026-06-18,0x5cfc…1e13,disposal,USDT,138.095178,market,1inch v6,classified
2026-06-18,0x5cfc…1e13,acquisition,USDC,138.127962,market,1inch v6,classified
2026-06-18,0xadbc…50bc,—,—,—,—,—,abstained

Tool-specific import profiles come as we go. It's read-only: public addresses only, no wallet connect, no signing, no custody — and you keep the final policy and tax calls.