Guides / Signups & Auth

Get Notified When a User Signs Up via Clerk

4 min read·Signups & Auth

How It Works

Clerk fires a user.created webhook event every time a new account is created — via email/password, Google, GitHub, or any OAuth provider. We catch that event and send it to LogIt.

Prerequisites

  • A Clerk account with an application
  • A server endpoint to receive webhooks (Next.js, Express, etc.)

Install

bash
npm install logit svix

svix is used to verify Clerk's webhook signature.

Create the webhook endpoint

ts
// app/api/webhooks/clerk/route.ts (Next.js App Router)
import { headers } from "next/headers";
import { Webhook } from "svix";
import { init } from "logit";

const logit = init({ token: process.env.LOGIT_API_KEY! });

interface UserCreatedEvent {
  type: "user.created";
  data: {
    id: string;
    email_addresses: Array<{ email_address: string }>;
    first_name: string | null;
    last_name: string | null;
    external_accounts: Array<{ provider: string }>;
  };
}

export async function POST(req: Request) {
  const body = await req.text();
  const headersList = await headers();

  const wh = new Webhook(process.env.CLERK_WEBHOOK_SECRET!);
  const event = wh.verify(body, {
    "svix-id": headersList.get("svix-id")!,
    "svix-timestamp": headersList.get("svix-timestamp")!,
    "svix-signature": headersList.get("svix-signature")!,
  }) as UserCreatedEvent;

  if (event.type === "user.created") {
    const { id, email_addresses, first_name, last_name, external_accounts } = event.data;
    const email = email_addresses[0]?.email_address ?? "unknown";
    const name = [first_name, last_name].filter(Boolean).join(" ") || "Anonymous";
    const provider = external_accounts[0]?.provider?.replace("oauth_", "") ?? "email";

    await logit.now("signups", {
      event: "New user via Clerk",
      description: `${name} (${email}) — ${provider}`,
      icon: "👤",
      notify: true,
      tags: { provider },
      metadata: { clerkId: id, email, name },
    });
  }

  return new Response("ok");
}

Register the webhook in Clerk

  1. Go to Clerk Dashboard → Webhooks → Add Endpoint
  2. URL: https://yourdomain.com/api/webhooks/clerk
  3. Events: select user.created
  4. Copy the Signing Secret to CLERK_WEBHOOK_SECRET

Environment variables

bash
LOGIT_API_KEY=lk_live_xxxxxxxx
CLERK_WEBHOOK_SECRET=whsec_xxxxxxxx

Try LogIt free

7-day trial. No credit card required.

Start free