Auth0 model

User signups

New users per day by how they signed up, and how many went on to verify their email and come back. The signup side of Auth0's Users page, as a time series.

Grain
one row per UTC signup day x connection x provider
Built from
  1. 2
    Raw tables
  2. 2
    Staging
  3. 1
    Core
  4. 1
    Analytics
Reads from Auth0
user_identitiesusers
Ships as
Weld and dbt SQL, open source on GitHub
core.auth0.user_signups
1-- core.auth0.user_signups
2-- New users per day by how they signed up, and how many went on to verify their
3-- email and come back. The signup side of Auth0's Users page, as a time series.
4--
5-- Grain: one row per UTC signup day x connection x provider.
6-- Depends on: staging.auth0.users, staging.auth0.user_identities
7--
8-- Built from the users table, not the log, so it covers your whole user base back
9-- to the first user rather than only the log retention window. Each user is placed
10-- on the connection of their primary identity (index 0), the one they were created
11-- with; later account linking does not move them.
12
13SELECT
14    u.created_date                                      AS signup_date,
15    i.connection_name,
16    i.provider,
17    ANY_VALUE(i.is_social)                              AS is_social,
18
19    COUNT(*)                                            AS new_users,
20    COUNTIF(u.is_email_verified)                        AS email_verified_users,
21    -- logins_count includes the login that created the account, so > 1 means the
22    -- user came back at least once.
23    COUNTIF(u.logins_count > 1)                         AS returned_users,
24    COUNTIF(u.last_login_at IS NULL)                    AS never_logged_in_users,
25    COUNTIF(u.is_blocked)                               AS blocked_users,
26
27    ROUND(SAFE_DIVIDE(COUNTIF(u.is_email_verified), COUNT(*)), 4) AS email_verified_rate,
28    ROUND(SAFE_DIVIDE(COUNTIF(u.logins_count > 1), COUNT(*)), 4)  AS returned_rate
29FROM {{staging.auth0.users}} u
30LEFT JOIN {{staging.auth0.user_identities}} i
31  ON  i.user_id = u.user_id
32  AND i.identity_index = 0
33WHERE u.created_date IS NOT NULL
34GROUP BY u.created_date, i.connection_name, i.provider

This model and the 3 it depends on. Deploy them together; refs like {{staging.…}} resolve to the matching folders in Weld, and the dbt view uses source() and ref().

Notes

How it counts. And where it stops.

Built from the users table, not the log, so it covers your whole user base back to the first user rather than only the log retention window. Each user is placed on the connection of their primary identity (index 0), the one they were created with; later account linking does not move them.

Raw tables it reads

  • raw.auth0.user_identities
  • raw.auth0.users

Put Auth0 in front
of your agents.

Connect Auth0, deploy the models, and ask questions in Claude, Cursor or ChatGPT. Free for 14 days, no credit card.