addresses_geography records which wallets received a country and with what conviction — most wallets don’t, and that is signal, not missing data. At the transfer level, the corridor tables grade every dollar with a measurability value and an attribution tier, retaining the volume that cannot be placed so totals always reconcile. This page explains both.
Address-level measurability
Only ~25% of classified addresses carry a country inaddresses_geography. The rest are eligible but lack a confident signal — mostly unlabeled self-custody wallets whose counterparties and timing don’t yield an attribution. A small set (contracts, tokens, bridges, genesis/burn addresses) is structurally excluded.
Hosted vs unhosted wallets: why they’re different
Hosted (custodial) addresses are controlled by a centralized entity — an exchange holding funds on behalf of users. Why hosted geography is comparatively knowable:- Declared operating country — exchanges disclose their headquarters / primary jurisdiction
- Regulatory footprint — license requirements reveal operating countries
- Web traffic signals — where an exchange’s users browse from is observable
- Deposit patterns — where attributed wallets deposit from is observable on-chain
- No declared country — users don’t register with a jurisdiction
- Pseudonymous — no KYC
- Indirect signals only — geography must be inferred from counterparties, transaction timing, and wallet-relatedness clusters
- Multi-country usage — one wallet may be used from several countries (VPN, travel)
- Direct labels — a labeled wallet with a known country
- Flow-based propagation — a wallet related to labeled wallets (direct two-way transfers, shared funders, shared CEX deposit wallets) inherits their country, weighted by relatedness
- Timezone inference — hour-of-day activity distribution as a supporting signal
addresses_geography.reasoning column records, in plain language, exactly which signals drove each attribution (e.g. “Propagated from 20 related wallet(s) via shared funders within a 24-72h window.”).
Conviction levels
Attribution quality is a conviction tier (addresses_geography.confidence), not a probability:
addresses_geography.score is bounded to 0–1 (higher = stronger). The confidence tier is the safer filter, because it also accounts for how many independent signals corroborate the attribution. The corridor tables’ unhosted legs use only attributions with score > 0.5.Transfer-level tiers
The corridor tables resolve each leg of each transfer and grade the result. Legs resolve four ways:The exchange fan-out
An exchange leg is never assigned a single country — it is replaced by a weighted distribution (corridor_usd = transfer_usd × from_weight × to_weight). The weights blend web-traffic geography with on-chain deposit geography, calibrated against exchanges whose home country is known, and are renormalized to sum to exactly 1 — volume is conserved: nothing invented, nothing lost. A side effect is that n_transfers is fractional per row (a transfer fanned across 20 countries contributes weights that sum back to 1); sums remain correct.
How on-chain flows are used
On-chain deposit flows are the dollar-denominated corrector inside the fan-out weights. For every exchange, deposits from geographically attributed unhosted wallets give an observed country distribution of real money — a signal web traffic cannot provide (visits are not dollars, and traffic is distorted by VPNs and app-only users). But flow data has its own failure modes, so it is constrained three ways before it influences a weight:- Quality scaling. Only a minority of each exchange’s inbound flow comes from wallets we can attribute. An exchange’s flow signal is weighted by how much of its flow is attributable — exchanges with rich attribution lean meaningfully on flows; exchanges with thin attribution stay traffic-driven.
- Hub discounting. Countries whose flow share across all exchanges vastly exceeds their traffic share are hosting/institutional artifacts (datacenter and custodial wallets), not user geography — their flow contribution is damped.
- Ground-truth calibration. The blend parameters are fitted and validated on exchanges whose home country is known independently. Flows earn their influence by demonstrably improving home-country recovery over traffic alone — where they don’t, their weight goes to zero.
Tiers and the measurability grade
The leg pair determines the tier, and the tier maps tomeasurability:
The
x_* tiers are retained as rows, not dropped. SUM(usd) over any corridor slice without a measurability filter reconciles to total transfer volume — the not-measurable share is part of the answer, and corridors_coverage_daily exists to report it per chain and classification.Why this matters for your analysis
- Pick your grain deliberately. Region-grain results (
2r_regionincluded) are the most robust; exact country corridors (1_exactonly) are the highest confidence and smallest slice; one-sided flows (3_partial) power country in/out totals even when counterparties are dark. - Coverage differences are findings. A chain where 20%+ of volume is measurable (retail-heavy) is telling you something different from one near 0% (bot/DeFi churn). Check
corridors_coverage_dailybefore comparing chains. - Don’t mix attribution kinds. A country on an unhosted leg is an inferred user location; a region on an exchange fan is a distribution over a user base. The
tiercolumn keeps them separable — use it.
Next Steps
Table Reference
Full column-level schema for every table
Geographic Intelligence
Back to the geographic intelligence overview