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.
eligible_users
=
all_users
−
email_unsubscribers
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.
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.
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.
email on file.email_consented = TRUE — explicit consent.phone on file.sms_consented = TRUE — explicit consent required (TCPA).email_consented = FALSEemail_consented_updated_at IS NOT NULL — actively flipped off.eligible_users can be inflated by bot traffic.-- 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;
-- 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;