Clerk new organization notifications on your phone.

Get a push notification when a new organization is created in your Clerk application, with its name and slug.

organization.createdBackend & authSign-ups & users
How it works

Three steps to your first push

STEP 01

Install the recipe

One click in Studio gives you a personal webhook URL.

STEP 02

Paste your URL into Clerk

Add it as a webhook for organization.created.

STEP 03

Get a push on your phone

With the text, sound and buttons from the recipe.

Setup

How to set up the Clerk organization.created webhook

  1. Click Install in Studio and sign in. The recipe is added to your account and you get a personal webhook URL.
  2. In the Clerk Dashboard, open Webhooks and click Add Endpoint.
  3. Paste your webhook URL as the Endpoint URL and subscribe to organization.created.https://••••••••/•••••••• your personal URL, shown after install
  4. Click Create. The endpoint's Testing tab can send an example event.
  5. In the Clerk Dashboard, open **Webhooks → Add Endpoint** and subscribe to **organization.created**. You need Organizations turned on for your application. Webhooks are set up per instance, so add the endpoint to your production instance.
  6. Use the endpoint's **Testing** tab and **Send Example** to try it.
  7. Clerk sends webhooks through Svix and signs every delivery (`svix-id`, `svix-timestamp`, `svix-signature`), but JustPush doesn't check that signature yet, so keep your endpoint URL private.
The code

What runs when the webhook arrives

Studio calls handleRequest(request) with the incoming webhook and sends the message it returns. It's yours after install; change anything.

transform.js
1// Clerk → organization.created
2// Fires when a user creates an organization in your app, or one is created in the Clerk
3// Dashboard or API.
4// Docs: https://clerk.com/docs/guides/development/webhooks/overview
5
6// Only link to real http(s) URLs.
7function link(url, cta) {
8 return typeof url === "string" && /^https?:\/\//.test(url) ? [{ cta, url }] : []
9}
10
11// A trimmed string, or null.
12function text(value) {
13 return typeof value === "string" && value.trim() ? value.trim() : null
14}
15
16function handleRequest(request) {
17 const body = request.body && typeof request.body === "object" ? request.body : {}
18 const org = body.data && typeof body.data === "object" ? body.data : null
19
20 // Guard: only organization.created, so other Clerk events on this integration stay quiet.
21 if (body.type !== "organization.created" || !org) {
22 console.log(`Ignoring Clerk "${body.type ?? "unknown"}" event`)
23 return null
24 }
25
26 const name = text(org.name)
27 const slug = text(org.slug)
28 const label = name && slug && slug !== name ? `${name} (${slug})` : name ?? slug ?? "An organization"
29 const count = org.members_count
30 const members = Number.isInteger(count) && count > 0 ? `${count} ${count === 1 ? "member" : "members"}` : null
31
32 return {
33 title: "🏢 New organization",
34 message: [label, members].filter(Boolean).join(" · "),
35 topic: "Clerk",
36 priority: 0, // Normal: usually a new team or customer account, rarer than a single sign-up
37 // "~" opens the Dashboard's current application; the deep link isn't in Clerk's webhook docs.
38 buttons: text(org.id)
39 ? link(`https://dashboard.clerk.com/~/organizations/${encodeURIComponent(org.id)}`, "View organization")
40 : [],
41 }
42}
Payload

The Clerk organization.created webhook

This is what Clerk sends to your URL for organization.created. It is a sample, trimmed to the fields recipes use.

organization.created · sample.json
1{
2 "data": {
3 "id": "org_29w9IfBrPmcpi0IeBVaKtA7R94W",
4 "name": "Acme Inc",
5 "slug": "acme-inc",
6 "object": "organization",
7 "has_image": false,
8 "image_url": "https://img.clerk.com/example",
9 "created_at": 1790670591514,
10 "created_by": "user_29w83sxmDNGwOuEthce5gg56FcC",
11 "updated_at": 1790670591514,
12 "members_count": 1,
13 "public_metadata": [],
14 "private_metadata": [],
15 "admin_delete_enabled": true,
16 "max_allowed_memberships": 5
17 },
18 "type": "organization.created",
19 "object": "event",
20 "timestamp": 1790670591835,
21 "instance_id": "ins_123",
22 "event_attributes": {
23 "http_request": {
24 "client_ip": "192.0.2.10",
25 "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
26 }
27 }
28}
FAQ

Clerk new organization notifications: questions

Does this work on iPhone and Android?

Yes. Install the JustPush app from the App Store or Google Play and sign in. Every phone signed in to your account gets the notification.

Do I need to write code?

No. Install the recipe in Studio, paste your webhook URL into Clerk and you are done. The code is there if you want to change the text, the sound or the buttons.

Can I change what the notification says?

Yes. After install the recipe's code is yours. Edit it in Studio and test it against the sample payload before you save.

What does it cost?

JustPush is free for 30 days. After that it's $19.99 a year, or $39.99 once. There is no extra charge for recipes.

Ready when you are

Clerk on your phone in two minutes.

Install the recipe, paste one URL, done. Free for 30 days, no credit card required.