Skip to content
  • Get started
  • Switch to Kinde

Migrate to Kinde from Supabase

Migrate your users from Supabase Auth to Kinde. Supabase stores passwords as bcrypt hashes, and Kinde supports bcrypt natively — your users can sign in with their existing passwords with no reset required.

  • A Kinde account with Admin access
  • Kinde account configured to match your current auth provider - see before you migrate
  • Supabase account with SQL editor permissions

Key considerations

Link to this section
  • bcrypt passwords are fully supported — Kinde imports bcrypt hashes directly. Users keep their existing password.
  • Export via SQL — Supabase Auth data lives in the auth.users table, which isn’t exposed via the standard API. You export users by running a SQL query in the Supabase dashboard.
  • Social/OAuth identities are separate — users who signed in via Google, GitHub, etc. are stored in the auth.identities table. These users can be imported by email and will be prompted to re-link their social login on first sign-in.
  • raw_user_meta_data varies by app — the structure of this field depends on what your app stores. Check it in the SQL editor before building your export query.

Migration guide

Link to this section

1. Export users from Supabase

Link to this section
  1. Sign in to your Supabase dashboard and select your project.

  2. Go to SQL Editor in the sidebar.

  3. Run the following query:

    SELECT
    id,
    email,
    encrypted_password AS hashed_password,
    CASE WHEN email_confirmed_at IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS email_verified,
    raw_user_meta_data->>'first_name' AS first_name,
    raw_user_meta_data->>'last_name' AS last_name
    FROM auth.users
    WHERE email IS NOT NULL;
  4. In the results panel, set the row limit to No Limit so all users are returned.

  5. Select Export and choose Download CSV.

2. Prepare the CSV for Kinde

Link to this section

The SQL query exports columns that mostly match Kinde’s expected names. Rename the one that differs and add the hashing_method column.

Supabase columnRename toNotes
emailemailRequired — primary sign-in identifier
ididKeep as-is
email_verifiedemail_verifiedKeep as-is — TRUE or FALSE
first_namefirst_nameKeep as-is
last_namelast_nameKeep as-is
encrypted_passwordhashed_passwordbcrypt hash — preserves existing passwords
(new column)hashing_methodAdd this column and set every row to bcrypt

For the full list of supported CSV fields — including organizations, roles, and permissions — see Prepare your CSV in the bulk import guide.

Your final CSV should look like this:

id,email,first_name,last_name,email_verified,hashed_password,hashing_method
abc-123,bills@company.com,Bill,Smith,TRUE,$2a$10$examplehash,bcrypt
def-456,carlosg@company.com,Carlos,Garcia,TRUE,$2a$10$examplehash,bcrypt

3. Import into Kinde

Link to this section
  1. In Kinde, go to Users, then select Import users.
  2. Select Custom CSV.
  3. Follow the on-screen prompts to upload your file.
  4. Review any errors reported after import. Fix the CSV and re-import to resolve them.

See the bulk import guide to learn more.

4. Test the migration

Link to this section
  1. Sign in to Kinde with a user from your Supabase export.
  2. Verify they can sign in with their existing Supabase credentials.
  3. Notify users of any changes to their sign-in experience before going live.

If you need help with your migration, contact Kinde support.