Exchange Rate

v2 · 2026-05-13 Marketing permissions per 100 site users — cumulative across all users ever created, and broken down by daily signup cohort. 11 sites.

Aggregate exchange rate · 11 sites
0.98per 100
Across 11.2M eligible users, sites collect roughly 1 permission per 100 signups in aggregate. Unweighted site-average is 0.86 / 100 — Triumph's scale pulls the weighted rate up.
Eligible users
11,235,105
Total permissions
110,378
Sites
11
The cumulative formula
email permissions  +  SMS permissions
eligible_users
=
0.0098≈ 0.98 / 100
where eligible_users = all_users email_unsubscribers
What goes into the rate
numerator · denominator · unit
Numerator

Total permissions

Email permissions plus SMS permissions — each one is an explicit consent (consented = TRUE) from a user to be reached on that channel. No null-state shortcuts.

A user who granted both permissions contributes 2 to the numerator — one per channel.

Denominator

Eligible users

The pool of users who are reachable in principle — i.e. haven't actively unsubscribed. Breaks down as:

eligible_users = all_users email_unsubscribers

Unsubscribers (email_consented = FALSE with a non-null updated_at) are removed so opted-out churn doesn't drag the rate down.

Reported as

Per 100 users

The raw fraction is small (single-digit per 100), so we report rate × 100. Computed with SAFE_DIVIDE, which returns NULL rather than erroring when a site has no eligible users yet.

Who counts as what
permissions are strict · only active unsubs leave the pool

SMS permission

  • Has a phone on file.
  • sms_consented = TRUE — explicit consent required (TCPA).
  • No null-state shortcut. SMS marketing never assumes consent.

Email unsubscriber

  • email_consented = FALSE
  • email_consented_updated_at IS NOT NULL — actively flipped off.
  • Subtracted from the denominator (the user existed but is now unreachable by email).
Cumulative — per-site ranking
11 sites · sorted by permissions per 100 users
scope
For now this only includes Connect customers with exchanges live.
Cumulative eligible_users can be inflated by bot traffic.
#
Site
Email
SMS
Eligible
Rate distribution
Rate
01
Final Boss Sour
NaVnjma
2,521
2,148,428
4.53per 100
02
JP Organic Coffee
jaoQNYL
1,084
101,475
2.11per 100
03
Isshiki Matcha
jaoQpmL
2
42,630
0.99per 100
04
Storelli
Jdm7jxv
203
870,452
0.73per 100
05
EarPeace
yvelp9a
158
298,511
0.45per 100
06
Shiree Odiz
yveyXOv
0
102,827
0.31per 100
07
Viajecito
ALOWrbL
0
93,768
0.23per 100
08
Danforth Pewter
Dvqyq3v
234
517,863
0.045per 100
09
Spritz Flower
gdJw2Za
0
12,952
0.031per 100
10
Triumph
oaAz1v9
161
6,699,539
0.029per 100
11
Ron Ayers
gdJwe0a
0
346,660
0.0075per 100
μ
Unweighted site average
11 sites
0.86per 100
Daily signup cohorts — last 14 days
2026-04-30 → 2026-05-13 · scope: users created that day
caveat
Cohort permissions are counted as of now, not as of cohort day.
Site
y-max
14-day signup cohort · per 100
14d avg
The queries
cumulative · daily cohort
exchange_rate_cumulative.sql
-- Cumulative exchange rate for a single site.
-- Scope: every user ever created. Counted as of now.

WITH base AS (
  SELECT
    COUNTIF(email IS NOT NULL AND email_consented = TRUE)  AS email_permissions,
    COUNTIF(phone IS NOT NULL AND sms_consented   = TRUE)  AS sms_permissions,
    COUNTIF(email_consented = FALSE
            AND email_consented_updated_at IS NOT NULL) AS email_unsubscribers,
    COUNT(*) AS all_users
  FROM `user`
  WHERE website_id = 'NaVnjma'  -- Final Boss Sour
)
SELECT
  all_users,
  email_unsubscribers,
  all_users - email_unsubscribers AS eligible_users,
  email_permissions,
  sms_permissions,
  email_permissions + sms_permissions AS total_permissions,
  SAFE_DIVIDE(
    email_permissions + sms_permissions,
    all_users - email_unsubscribers
  ) AS exchange_rate,
  SAFE_DIVIDE(
    email_permissions + sms_permissions,
    all_users - email_unsubscribers
  ) * 100 AS permissions_per_100_users
FROM base;
exchange_rate_daily_cohort.sql
-- Daily cohort exchange rate for a single site, last 14 days.
-- Scope: users whose created_at falls on day D. Permissions counted as of now.
-- Recent days under-state the rate (cohorts haven't matured).

SELECT
  DATE(created_at) AS cohort_date,
  COUNT(*) AS all_users,
  COUNTIF(email_consented = FALSE
          AND email_consented_updated_at IS NOT NULL) AS email_unsubscribers,
  COUNT(*) - COUNTIF(email_consented = FALSE
                       AND email_consented_updated_at IS NOT NULL) AS eligible_users,
  COUNTIF(email IS NOT NULL AND email_consented = TRUE) AS email_permissions,
  COUNTIF(phone IS NOT NULL AND sms_consented   = TRUE) AS sms_permissions,
  SAFE_DIVIDE(
    COUNTIF(email IS NOT NULL AND email_consented = TRUE)
    + COUNTIF(phone IS NOT NULL AND sms_consented = TRUE),
    COUNT(*) - COUNTIF(email_consented = FALSE
                         AND email_consented_updated_at IS NOT NULL)
  ) * 100 AS permissions_per_100_users
FROM `user`
WHERE website_id = 'NaVnjma'
  AND created_at >= CURRENT_DATE() - INTERVAL 14 DAY
GROUP BY cohort_date
ORDER BY cohort_date DESC;