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:

  1. 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.
  2. 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

FieldWhat to enterExample
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:

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:

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:

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:

  1. Checking the sender against a list of ~40 known builder addresses (instant)
  2. 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.

ApproachWhen income is reportedUsed 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

DataSourceAPI Key Required
Validator infoBeacon Chain API (PublicNode)No
CL withdrawalsEtherscan API v2Yes (free)
EL rewards & MEVEtherscan API v2Yes (free)
ETH pricesCryptoCompare APINo (optional)
Generate Your Report