Integrations / Auth & Identity / Clerk

๐Ÿ”

Clerk

Connect Clerk's user.created webhook to LogIt and get a notification the instant someone signs up โ€” with email, name, and OAuth provider.


Setup

In your Clerk dashboard, go to Webhooks โ†’ Add Endpoint and point it at https://yourdomain.com/api/webhooks/clerk.

Select the user.created event.

Install

bash
npm install logit svix

The svix package verifies Clerk's webhook signature.

Handler (Next.js App Router)

ts
// app/api/webhooks/clerk/route.ts
import { headers } from "next/headers";
import { Webhook } from "svix";
import { init } from "logit";

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

interface ClerkUserCreatedEvent {
  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 ClerkUserCreatedEvent;

  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 ?? "email";

    await logit.now("signups", {
      event: "New user signed up via Clerk",
      description: `${name} (${email})`,
      icon: "๐Ÿ‘ค",
      notify: true,
      tags: { provider },
      metadata: { clerkUserId: id, email, name, provider },
    });
  }

  return new Response("ok");
}

Environment variables

bash
LOGIT_API_KEY=lk_live_xxxxxxxxxxxxxxxx
CLERK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxx

Ready to connect Clerk?

7-day free trial. No credit card required.

Start free