Skip to main content
A consolidated reference for the categorical fields across the allium_identity.geo tables, plus coverage statistics, data-quality caveats, and query best practices. For full column lists see the Table Reference.

classification

The activity bucket carried through from the stablecoin transfer pipeline. Every transfer lands in exactly one:

subcategory

Second-level label, inherited from downstream classifiers. Varies by classification:
  • payments — purpose buckets: c2c_payment, b2b_payment, b2c_payment, c2b_payment, i2b_payment, i2c_payment, deposit_to_institutional, payment_processor_deposit
  • cex_flow — counterparty-typed exchange flows (sender type first; c = consumer, b = business, i = institutional, u = unclassified wallet, x = exchange): c2x/b2x/i2x/u2x deposits, x2c/x2b/x2i/x2u withdrawals, labeled verticals (df2x, ps2x, in2x, br2x, gm2x, tr2x and mirrors), and exchange↔exchange refined as x2x:intra_exchange (same entity — internal shuffling) vs x2x:inter_exchange (different entities)
  • organic_activity / store_of_value / investment_tradestore, trade, organic_unclassified
  • infra_automationinorganic, bridge, bot, admin
  • otherrouting (short_term_pair), mint/burn, micro_transfer (dust), none when no finer label matched

tier & measurability

How each corridor row’s geography was resolved, and how much to trust it (see Geo-Measurability for the full mechanism):

Geography keys (from_geo / to_geo / geo / counterparty_geo)

Leg types (from_leg_type / to_leg_type)

direction (country_flows_daily)

inbound — the row’s geo is the receiving end; outbound — the sending end. Domestic transfers (both ends the same geography) appear once per direction.

conviction tiers (addresses_geography.confidence)

The five-tier scale for address-level attribution. This is usually the field to filter on: it folds in how well-corroborated an attribution is, not just how strong the single best signal was.
addresses_geography.score is bounded to 0–1 (higher = stronger). confidence is not a pure re-bucketing of score — for propagated rows it also requires corroboration from multiple related wallets. Filter on the conviction tier when you want both strength and corroboration. The corridor tables’ unhosted legs use score > 0.5.

reasoning (free text)

addresses_geography.reasoning is not an enum — it is a human-readable explanation of the signals behind each attribution. Use it for auditing individual rows; don’t GROUP BY it.

primary_region

addresses_geography.primary_region uses Allium’s three-region grouping: apac, emea, americas (lowercase). The corridor region:* keys use the same regions.

Coverage

Geographic coverage is quantified, not assumed — and it differs by level: Address level. ~25% of classified addresses (~20M of ~80M) carry a country in addresses_geography. The rest are eligible but lack a confident signal; they are not “missing data.” Transfer level. The share of stablecoin volume carrying geographic signal (measurability != 'not_measurable') varies widely — and informatively — by chain. Indicative year-to-date figures: Always compute your denominator from corridors_coverage_daily rather than assuming one:
A low geo-signal share is not a data defect — it is a property of the chain’s activity mix. Ethereum’s uncovered volume is mostly DeFi protocol legs that have no geography; a bot-heavy chain’s uncovered volume is churn. The coverage table makes these regimes visible instead of hiding them inside averages.

Data Quality & Limitations

  1. The latest day is provisional. Corridor tables rebuild daily with a 3-day lookback; the most recent day may be partial until upstream pipelines complete, then self-corrects.
  2. Top-5 exchange geography is region-grain only. Country-level claims for the largest global exchanges would not be credible; their legs fan at region:* and grade partially_measurable.
  3. Fan-weighted counts are fractional. n_transfers distributes with the fan weights; sums reconcile to true counts, but a single row’s value is not a whole number of transfers.
  4. Unhosted attribution has known geographic biases. Countries hosting infrastructure or institutional wallets can be over-represented in exact corridors; region-grain aggregation is the robust presentation.
  5. Attribution coverage ≈ 25% at address level — see Coverage above.
  6. Country propagation is partial. Flow-based relatedness propagation runs on ethereum, polygon, base, solana, and tron (EVM chains surface as evm in addresses_geography).

Best Practices

1. Filter on measurability, and say which grain you used

Region-grain results are the most robust; state the tier mix when publishing numbers.

2. Never drop the x_* tiers from your denominator

SUM(usd) without a measurability filter reconciles to total transfer volume. If you only ever query the measurable slice, you can’t say what share of activity it represents.

3. Use geography keys exactly as stored

Corridor tables use ISO alpha-2 codes (US, SG) plus the special keys listed above. addresses_geography.primary_country uses short-form names (United States, South Korea).

4. Prefer conviction over a bare score threshold (addresses)

5. Case sensitivity

Address case varies by chain — preserve case when joining on address for Solana/Tron.

Support & Updates

For questions, data quality issues, or feature requests related to geographic intelligence:

Next Steps

Example Queries

Corridor matrices, country flow balances, payment-purpose geography

Geographic Intelligence

Back to the geographic intelligence overview