utxoproof report local-first · static HTML · no JavaScript
DEMO — synthetic v8 account workflow. Chain transactions are seeded for illustration; not real holdings or tax advice.

Complete report

utxoproof full report 2023

The complete picture in one printable document: portfolio first, then tax, holdings, privacy, advisory and provenance detail. Print to PDF from your browser for filing or archiving.

Portfolio overview

The whole portfolio on one page: net worth, allocation across wallets, bank and exchange balances, credit-card liabilities, and the KYC split. Click an account for its UTXOs, then a UTXO for its provenance.

As of 2023-12-31 at 38143.33 EUR/BTC (bundled daily close). Click an account to drill into its UTXOs, then a UTXO for provenance.

107,056.89
net worth (EUR)
2.49000000
BTC held
94,976.89
BTC value (EUR)
12,080.00
cash (EUR)
66,097.38
BTC cost basis (EUR)
28,879.51
unrealized gain (EUR)
0%
bank-proven BTC value (0.00 EUR; candidates excluded)

Allocation

Multisig vault (36%)38,143.33Sparrow savings (35%)37,761.90Ledger main (18%)19,071.67KBC checking (12%)12,500.00DEGIRO (0%)0.00Kraken (0%)0.00KBC Visa (-0%)-420.00
94,977
100%
  • kyc — 94,977 EUR

BTC value by KYC status (EUR)

BTC/EUR daily close, last 12 months

2025-10-142026-10-12High 98,425Low 52,694BTC/EUR daily close, last 12 months

Daily close in EUR/BTC from the vendored history (Kraken native, blockchain.info x ECB before Oct 2024).

Holdings by tax behavior

94,977
90%
  • buy-and-hold — 85,822 EUR
  • accumulating — 9,154 EUR

Speculation beats buy-and-hold beats accumulating; seasoned means held ≥ 1 year

Holdings by funding channel

94,977
90%
  • exchange — 85,822 EUR
  • unknown — 9,154 EUR

How fiat entered the system: measured where evidenced, asserted where you tag it, unknown otherwise

Accounts

AccountTypeUTXOsBTCValue (EUR)Share
Multisig vaultwallet11.0000000038,143.3335.6%
Sparrow savingswallet20.9900000037,761.9035.3%
Ledger mainwallet10.5000000019,071.6717.8%
KBC checkingbank00.0000000012,500.0011.7%
DEGIRObroker00.000000000.000.0%
Krakenexchange00.000000000.000.0%
KBC Visacredit card00.00000000-420.00-0.4%

Tax report 2023

What you owe for the year. Every disposal is valued at moving-average cost, gains are classified (goede huisvader / speculator) with the reasoning shown, and communal surcharge is applied. Use the totals to fill your return — and verify them with a tax adviser before filing.
Realised gain / loss 2905.00 EUR 2 disposals
Tax (goede huisvader) 958.65 EUR before communal surcharge
Communal surcharge 67.11 EUR rate 7.00%
Total due 1025.76 EUR verify with a tax adviser

Generated 2026-11-05 17:02 UTC by utxoproof 0.1.0. Cost basis method: moving_average. Classification: goede huisvader. Communal surcharge rate: 7.00%.

Classification

Classification: goede_huisvader
Speculator score: 0 | Passive score: 0


This is a heuristic aid. Consult a Belgian tax adviser before filing.

Annual summary

ItemEUR
Realised gain/loss (2 disposals)2905.00
Tax (goede huisvader)958.65
Communal surcharge67.11
Total due1025.76

Disposals

DateTypeBTCPrice (EUR/BTC)Proceeds (EUR)Cost basis (EUR)Gain (EUR)Tax (EUR)
2023-03-20SELL0.5000000025000.0012495.0010005.002490.00821.70
2023-09-12SELL0.2500000023000.005750.005335.00415.00136.95

Holdings status

A snapshot of what you hold right now: inventory at moving-average cost, current value at the stated price, and the unrealized gain sitting in your wallets. Re-run with a fresh price any time.
Holdings 0.45000000 BTC as of 2026-11-05 17:02 UTC
Current value 17164.50 EUR 38143.33 EUR/BTC
Cost basis 10466.86 EUR average 23259.68 EUR/BTC
Unrealised gain / loss 6697.64 EUR bundled daily close

As of 2026-11-05 17:02 UTC at 38143.33 EUR/BTC (bundled daily close). Cost basis method: moving_average.

ItemValue
Holdings (BTC)0.45000000
Cost basis (EUR)10466.86
Average cost (EUR/BTC)23259.68
Current value (EUR)17164.50
Unrealized gain/loss (EUR)6697.64

All-time summary

Realised gains year by year plus what is still sitting in inventory at cost. The long view across all imported history.
Realised gains 2905.00 EUR all imported years
Remaining inventory 0.45000000 BTC unspent cost lots
Inventory cost 10466.86 EUR moving-average cost basis

Generated 2026-11-05 17:02 UTC by utxoproof 0.1.0. Realised gains per year plus remaining lot inventory (cost basis only).

Per-year realised gains

YearDisposalsGain (EUR)
202322905.00
Total2905.00

Remaining inventory

BTCCost basis (EUR)
0.4500000010466.86

Privacy report

Where your coins stand on KYC. Every unspent output is tagged from its lineage; transactions that first combine KYC and non-KYC inputs are listed as originating mixing events so you can explain them.
kyc 5 unspent outputs
non_kyc 0 unspent outputs
mixed 0 unspent outputs
unknown 0 unspent outputs

Generated 2026-11-05 17:02 UTC by utxoproof 0.1.0. Unspent outputs by KYC status; mixing events highlighted (amber = originating).

KYC summary (unspent)

StatusUTXOs
kyc5
non_kyc0
mixed0
unknown0

Mixing events

TxidInputsKYC inNon-KYC inValue (sat)Originating

Advisory

Decision support per UTXO, ranked by tax cost if sold today. Flags mark cheap sales, expensive holds, borrow and estate candidates, privacy risks and speculation taint. Advice, not instructions.
Tax cost if sold today 9530.24 EUR all unspent outputs
Estate candidates 57215.00 EUR seasoned, low-tax lots
Borrow candidates 94976.89 EUR collateral without a sale

As of 2023-12-31 at 38143.33 EUR/BTC (bundled daily close). Ranked by tax cost if sold. Selling everything today would cost 9530.24 EUR in tax.

Per-UTXO table

Flags = what to do (recommendations). Tags = what it is (classification).

UTXOAddressBTCHolding (days)Cost (EUR)Value (EUR)Gain (EUR)Tax if sold (EUR)KYCWhat to doWhat it is
3333333333333333333333333333333333333333333333333333333333333333:0bc1qz6z53ez8v3007uh2q37dp96kr3gwlmusarwlrca59n9j52nxhvps3gpd0h1.0000000047819233.2938143.3318910.046240.31kycborrow_candidate,estate_candidate,hold_recommendedbuy-and-hold,exchange
4444444444444444444444444444444444444444444444444444444444444444:0bc1q0gahzc3p0n8rlztt649kcanlhvwq8ekup7sjsy0.240000003025053.629154.404100.781353.26kycborrow_candidateaccumulating,unknown
2222222222222222222222222222222222222222222222222222222222222222:0bc1q9yscq3l2yfxlvnlk3cszpqefparrv7tk24u6pl0.7500000069725659.9928607.502947.51972.68kycborrow_candidate,sell_friendlybuy-and-hold,exchange
1111111111111111111111111111111111111111111111111111111111111111:0bc1qpux3z758ulsxg69eptaakukraanqwtdxe5yy4c0.50000000108016150.4919071.672921.18963.99kycborrow_candidate,estate_candidatebuy-and-hold,exchange

Summary

ItemEUR
Total tax cost of liquidating9530.24
Estate-candidate value57215.00
Borrow-candidate value94976.89

Provenance 3333333333333333333333333333333333333333333333333333333333333333:0

Chain of custody for one UTXO, oldest step first: every hop valued in euros at its date, KYC status per step, mixing highlighted, and the original source evidence linked. The document you hand over when asked where a coin came from.
Current amount 1.00000000 BTC 38143.33 EUR at 38143.33/BTC
KYC status kyc 100% of value
Days held 478 since earliest traced acquisition
Bank-proven coverage 0% weakest tier —

Current amount: 1.00000000 BTC (38143.33 EUR at 38143.33/BTC). KYC status: kyc (100%). Days held since earliest traced acquisition: 478. Advisory flags: borrow_candidate,estate_candidate,hold_recommended.

Saga coverage

0% of the target value reaches a bank statement through exact, approximate, or allocated links. Weakest tier in a covered path: —. Candidates never raise coverage.

Source UTXOShare of targetTier
3333333333333333333333333333333333333333333333333333333333333333:0100.00%unresolved

Provenance saga (all parents, oldest first)

StepDateBlockEventShareAttributed BTCFull BTCAttributed EURKYCEvidence
12022-09-09720000Exchange purchase (demo exchange purchase) source100.00%1.000000001.0000000019233.29kyc3333333333333333333333333333333333333333333333333333333333333333:0

Cross-domain evidence

Funding direction: bank debit → exchange EUR deposit → trade → BTC withdrawal → chain receipt. These are persisted evidence links; ambiguous legs stay unresolved.

No cross-domain evidence links yet. Supply --ledgers and bank statements (or run the dashboard with them) to rebuild the bank/exchange layers.

Candidate links (never asserted)

No candidate links. Unmatched or ambiguous funding has no asserted edge.

Unresolved / truncated legs

  • source 3333333333333333333333333333333333333333333333333333333333333333:0: no exchange withdrawal within ±3d at its sats

Branch detail (consolidations)

StepParent UTXOBTCShareKYC

Fan-out siblings

No sibling outputs in this ancestry.

Evidence references

Attachments

No attachments registered for this chain. Add scans or confirmations with utxoproof attach --file … --tx ….

Provenance 4444444444444444444444444444444444444444444444444444444444444444:0

Chain of custody for one UTXO, oldest step first: every hop valued in euros at its date, KYC status per step, mixing highlighted, and the original source evidence linked. The document you hand over when asked where a coin came from.
Current amount 0.24000000 BTC 9154.40 EUR at 38143.33/BTC
KYC status kyc 100% of value
Days held 1080 since earliest traced acquisition
Bank-proven coverage 0% weakest tier —

Current amount: 0.24000000 BTC (9154.40 EUR at 38143.33/BTC). KYC status: kyc (100%). Days held since earliest traced acquisition: 1080. Advisory flags: borrow_candidate,estate_candidate,sell_friendly.

Saga coverage

0% of the target value reaches a bank statement through exact, approximate, or allocated links. Weakest tier in a covered path: —. Candidates never raise coverage.

Source UTXOShare of targetTier
1111111111111111111111111111111111111111111111111111111111111111:1100.00%unresolved

Provenance saga (all parents, oldest first)

StepDateBlockEventShareAttributed BTCFull BTCAttributed EURKYCEvidence
12021-01-15665000Exchange purchase (demo exchange purchase) source100.00%0.240000000.250000007752.23kyc1111111111111111111111111111111111111111111111111111111111111111:1
22023-03-04760000Spend (payment + change)100.00%0.240000000.240000005053.62kyc4444444444444444444444444444444444444444444444444444444444444444:0

Cross-domain evidence

Funding direction: bank debit → exchange EUR deposit → trade → BTC withdrawal → chain receipt. These are persisted evidence links; ambiguous legs stay unresolved.

No cross-domain evidence links yet. Supply --ledgers and bank statements (or run the dashboard with them) to rebuild the bank/exchange layers.

Candidate links (never asserted)

No candidate links. Unmatched or ambiguous funding has no asserted edge.

Unresolved / truncated legs

  • source 1111111111111111111111111111111111111111111111111111111111111111:1: no exchange withdrawal within ±3d at its sats

Branch detail (consolidations)

StepParent UTXOBTCShareKYC

Fan-out siblings

StepSibling UTXOBTCKYC
11111111111111111111111111111111111111111111111111111111111111111:00.50000000kyc
24444444444444444444444444444444444444444444444444444444444444444:10.00900000kyc

Evidence references

Attachments

No attachments registered for this chain. Add scans or confirmations with utxoproof attach --file … --tx ….

Provenance 2222222222222222222222222222222222222222222222222222222222222222:0

Chain of custody for one UTXO, oldest step first: every hop valued in euros at its date, KYC status per step, mixing highlighted, and the original source evidence linked. The document you hand over when asked where a coin came from.
Current amount 0.75000000 BTC 28607.50 EUR at 38143.33/BTC
KYC status kyc 100% of value
Days held 697 since earliest traced acquisition
Bank-proven coverage 0% weakest tier —

Current amount: 0.75000000 BTC (28607.50 EUR at 38143.33/BTC). KYC status: kyc (100%). Days held since earliest traced acquisition: 697. Advisory flags: borrow_candidate,sell_friendly.

Saga coverage

0% of the target value reaches a bank statement through exact, approximate, or allocated links. Weakest tier in a covered path: —. Candidates never raise coverage.

Source UTXOShare of targetTier
2222222222222222222222222222222222222222222222222222222222222222:0100.00%unresolved

Provenance saga (all parents, oldest first)

StepDateBlockEventShareAttributed BTCFull BTCAttributed EURKYCEvidence
12022-02-02700000Exchange purchase (demo exchange purchase) source100.00%0.750000000.7500000025659.99kyc2222222222222222222222222222222222222222222222222222222222222222:0

Cross-domain evidence

Funding direction: bank debit → exchange EUR deposit → trade → BTC withdrawal → chain receipt. These are persisted evidence links; ambiguous legs stay unresolved.

No cross-domain evidence links yet. Supply --ledgers and bank statements (or run the dashboard with them) to rebuild the bank/exchange layers.

Candidate links (never asserted)

No candidate links. Unmatched or ambiguous funding has no asserted edge.

Unresolved / truncated legs

  • source 2222222222222222222222222222222222222222222222222222222222222222:0: no exchange withdrawal within ±3d at its sats

Branch detail (consolidations)

StepParent UTXOBTCShareKYC

Fan-out siblings

No sibling outputs in this ancestry.

Evidence references

Attachments

No attachments registered for this chain. Add scans or confirmations with utxoproof attach --file … --tx ….

Provenance 1111111111111111111111111111111111111111111111111111111111111111:0

Chain of custody for one UTXO, oldest step first: every hop valued in euros at its date, KYC status per step, mixing highlighted, and the original source evidence linked. The document you hand over when asked where a coin came from.
Current amount 0.50000000 BTC 19071.67 EUR at 38143.33/BTC
KYC status kyc 100% of value
Days held 1080 since earliest traced acquisition
Bank-proven coverage 0% weakest tier —

Current amount: 0.50000000 BTC (19071.67 EUR at 38143.33/BTC). KYC status: kyc (100%). Days held since earliest traced acquisition: 1080. Advisory flags: borrow_candidate,estate_candidate.

Saga coverage

0% of the target value reaches a bank statement through exact, approximate, or allocated links. Weakest tier in a covered path: —. Candidates never raise coverage.

Source UTXOShare of targetTier
1111111111111111111111111111111111111111111111111111111111111111:0100.00%unresolved

Provenance saga (all parents, oldest first)

StepDateBlockEventShareAttributed BTCFull BTCAttributed EURKYCEvidence
12021-01-15665000Exchange purchase (demo exchange purchase) source100.00%0.500000000.5000000016150.49kyc1111111111111111111111111111111111111111111111111111111111111111:0

Cross-domain evidence

Funding direction: bank debit → exchange EUR deposit → trade → BTC withdrawal → chain receipt. These are persisted evidence links; ambiguous legs stay unresolved.

No cross-domain evidence links yet. Supply --ledgers and bank statements (or run the dashboard with them) to rebuild the bank/exchange layers.

Candidate links (never asserted)

No candidate links. Unmatched or ambiguous funding has no asserted edge.

Unresolved / truncated legs

  • source 1111111111111111111111111111111111111111111111111111111111111111:0: no exchange withdrawal within ±3d at its sats

Branch detail (consolidations)

StepParent UTXOBTCShareKYC

Fan-out siblings

StepSibling UTXOBTCKYC
11111111111111111111111111111111111111111111111111111111111111111:10.25000000kyc

Evidence references

Attachments

No attachments registered for this chain. Add scans or confirmations with utxoproof attach --file … --tx ….

Descriptor check

Self-check that this tool derives the same addresses as every other BIP84 wallet: descriptors and first addresses are recomputed live from the spec test vector and must match it exactly.

Addresses below are derived live by utxoproof.descriptors from the BIP84 spec-vector account xpub (zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs, fingerprint 73c5da0a). They must match the BIP84 vectors exactly.

Descriptors (Bitcoin Core import)

ChainDescriptor
externalwpkh([73c5da0a/84h/0h/0h]zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs/0/*)
changewpkh([73c5da0a/84h/0h/0h]zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs/1/*)

First addresses (mainnet)

PathAddress
m/84'/0'/0'/0/0bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
m/84'/0'/0'/0/1bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g
m/84'/0'/0'/0/2bc1qp59yckz4ae5c4efgw2s5wfyvrz0ala7rgvuz8z
m/84'/0'/0'/1/0bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el