Settlement Reconciliation Template Generator

Reconciliation for x402 follows one ironclad rule:Only on-chain Transfer events are recognized; no manual reports are accepted.This tool gives you three things: a reconciliation CSV template, a ready-to-run on-chain USDC deposit scanning script for the Base mainnet, and a reconciliation guide you can hand directly to finance (with rules, tolerance thresholds, and discrepancy handling already defined).

Free · No login required Locally generated · Content is not uploaded Standard · Natural-month aggregation · 10th of the following month · Minimum $50 per settlement

1Settlement Entity and Cycle

2On-chain scanning parameters

Public nodes require a token to check archive status, soDo Not Scan from 0— Start from 2,000 blocks back from the chain head.

ResultsSettlement Criteria for This Period

Output 1Reconciliation CSV template

0 rows
—
With BOM, no garbled text when opened in Excel.

Output 2On-chain deposit scanning script (Node)

0 rows
—

Output 3Reconciliation Instructions for Finance

0 rows
—
We’ve Fallen into This Pit

1 · Only on-chain Transfer events are recognized—not reports.The sole basis for reconciliation is the Base Mainnet USDC contract Transfer Events, by topics[2](Receiving address) filtering. Any "I think this should be the value" is invalid.

2 · Do not scan from block 0.Public nodes require a token to query archive status; scanning from genesis block will inevitably fail. Correct approach:Roll back 2,000 blocks from the chain head.As a starting point, subsequently record lastScanned for incremental scanning.

3 · Chunking + rate limiting.eth_getLogs Querying too many blocks at once triggers rate limiting. In production, we use 400-block segments with 250ms intervals between segments, and configure multi-node failover (publicnode / base.org / drpc as fallbacks).

4 · Amount tolerance: ±$0.02.Match credited amount against payable amount using "approximate matching" (±$0.02); do not enforce strict equality—on-chain amounts are integers in smallest units, and rounding may introduce cent-level discrepancies.

5 · Stop the service before modifying the data file.The service holds the full DB in memory; heartbeat writes to disk every 30 seconds; modifying JSON at runtime is overwritten by stale in-memory values (this occurred once during our fee rate migration).