How It Works
What you need, how to use it, and how your rewards are calculated
What You Need
To generate a report, you need just two things:
- Your withdrawal address or validator index(es) — this identifies your validator(s) on the Ethereum network. You can find your validator index on beaconcha.in by searching for your address.
- A free Etherscan API key — needed to fetch your transaction data. Get one at etherscan.io/apis (takes 30 seconds, free tier is sufficient).
What to enter in the form
| Field | What to enter | Example |
| Withdrawal address |
The address that receives your CL reward sweeps |
0xAbC1...dEf4 |
| Validator index |
Your validator number (single or comma-separated) |
123456 or 123456, 123457 |
| Fee recipient (optional) |
Only needed if your EL rewards go to a different address than your withdrawal address |
0x9876...5432 |
Tip: If you enter a withdrawal address, the tool will find all withdrawals and block rewards for that address. If you enter validator index(es), it will resolve them to your withdrawal address automatically.
Withdrawal Address vs Fee Recipient
Ethereum validators have two addresses that can receive rewards:
- Withdrawal address — set in your validator's withdrawal credentials. Receives consensus layer (CL) reward sweeps automatically every ~5 days.
- Fee recipient address — set in your validator client configuration. Receives execution layer (EL) rewards: priority fees and MEV payments when your validator proposes a block.
For most solo stakers, these are the same address. In that case, you only need to enter the withdrawal address and can leave the fee recipient field empty.
However, if you use a different address as your fee recipient (for example, a hot wallet for immediate access to EL rewards), you should enter it in the optional fee recipient field so the tool can find those rewards too.
Common case: If you run multiple validators but one has a different withdrawal address while sharing the same fee recipient, you can enter the shared fee recipient address to capture all EL rewards in one report.
What the Tool Does
The tool tracks two types of staking income:
- Consensus layer (CL) withdrawals — periodic reward sweeps from the beacon chain to your withdrawal address
- Execution layer (EL) rewards — block proposal tips and MEV payments received at your fee recipient address
Each reward event is matched to the historical ETH price at the time it occurred, giving you an accurate fiat value for tax reporting.
Step by Step
1
Resolve validators
Your validator index, public key, or withdrawal address is resolved via the Beacon Chain API to identify which validators to track and their withdrawal address.
2
Fetch CL withdrawals
All beacon chain withdrawal events are fetched from Etherscan for your withdrawal address. For 0x01 (distributing) validators, this includes the automatic reward sweeps that happen roughly every 5 days.
3
Fetch EL rewards
Block proposals are fetched from Etherscan for your fee recipient address (or withdrawal address if no separate fee recipient is set). Detected via direct block rewards and MEV payments from known builder addresses.
4
Price matching
Historical ETH prices are fetched at hourly resolution from CryptoCompare. Each reward event is matched to the closest hourly price, giving you a fiat value accurate to within ~30 minutes.
5
Report generation
All events are compiled into a report with monthly breakdowns, totals, and per-validator statistics. You can view the summary on screen or download as Excel (.xlsx) or CSV.
Validator Types
0x01 Distributing Validators
The original withdrawal credential type. Max effective balance is 32 ETH. Any balance above 32 ETH is automatically swept to your withdrawal address roughly every 5 days. All withdrawals are income.
0x02 Compounding Validators
Introduced with the Pectra upgrade (May 2025). Rewards compound in the validator balance up to 2048 ETH effective balance. The tool automatically detects 0x02 validators and classifies withdrawals into three categories:
- Skimming (income) — automatic sweeps of balance exceeding the 2048 ETH cap. These happen automatically and are taxable income, similar to 0x01 validator sweeps.
- User-requested (not income) — you manually requested a partial withdrawal by sending a transaction to the EIP-7002 system contract. This is you taking out your own principal/accumulated rewards — the tool treats it as return of capital, not new income.
- Consolidation transfers (not income) — when you merge validators via EIP-7251, balance moves from a source validator to a target validator. The outgoing "withdrawal" from the source is just an internal transfer — no new ETH was earned.
Execution Layer Rewards
When your validator proposes a block, it earns execution layer rewards:
Local Block Rewards (Priority Fees)
When your validator builds its own block, the transaction priority fees are paid directly to your fee recipient address.
MEV Payments
Most validators use MEV-boost to outsource block building to specialized builders for higher rewards. The builder sends a lump-sum payment to your fee recipient address. The tool detects these by:
- Checking the sender against a list of ~40 known builder addresses (instant)
- For unknown senders: looking up the block's fee recipient to verify the payment came from whoever built the block (requires an extra API call per candidate)
Price Data
Historical ETH prices are sourced from CryptoCompare at hourly resolution. Each reward event is matched to the closest hourly price point.
Prices are cached locally after the first fetch, so subsequent reports for the same period load instantly.
Note: Prices represent a volume-weighted average across major exchanges. Small differences compared to other tools are normal due to different price sources and time resolution.
Methodology: Withdrawal-Based Reporting
This tool uses a withdrawal-based (cash-basis) approach: income is reported when ETH arrives at your execution layer address, not when it accrues on the beacon chain.
| Approach | When income is reported | Used by |
| Withdrawal-based (this tool) |
When ETH is swept to your address |
Cash-basis accounting |
| Accrual-based |
When rewards accumulate on beacon chain |
Some jurisdictions require this |
Date range: Both the start and end date are included. Selecting Jan 1 – Dec 31 captures the full year. Under the hood, the end date is extended to 23:59:59 UTC.
Important: This can cause small differences at month boundaries compared to accrual-based tools. The total over a longer period will converge, but individual months may differ by the amount of rewards that haven't been swept yet at month-end.
Data Sources
| Data | Source | API Key Required |
| Validator info | Beacon Chain API (PublicNode) | No |
| CL withdrawals | Etherscan API v2 | Yes (free) |
| EL rewards & MEV | Etherscan API v2 | Yes (free) |
| ETH prices | CryptoCompare API | No (optional) |