Connect Clerk to start branded emails when someone signs up, joins an organization, starts a Clerk Billing subscription, or joins your waitlist. Clerk signs each webhook, and Brew turns 13 event types into automation triggers.
Clerk remains responsible for sign-in, organizations, and billing. Brew only listens for events. It cannot change users, create organizations, or charge subscriptions.
organization.created carries no email address. Brew looks up the creator's user ID among the identities it has already seen in earlier Clerk events on the current connection. If it finds a real email, the event proceeds. If not, Brew records the event as an unresolved recipient, creates no contact, and starts no automation.
Subscribe to user.created as well, so Brew can learn creator addresses. For an email that must reach a person every time, use organizationMembership.created, which carries the member address.
Brew supports these 13 event types:
Each verified event with a real email address creates or updates a Brew contact, matched by email, whether or not an automation uses the event. When the data is present, Brew sets first and last name and clerk_user_id.
user.created also sets clerk_username, clerk_image_url, clerk_signed_up_at, and clerk_last_sign_in_at. Invitation and membership events set clerk_organization_id, clerk_org_role, and clerk_org_role_name. Invitations add clerk_org_invitation_status, and memberships add clerk_organization_name and clerk_organization_slug.
Billing events set clerk_subscription_status and clerk_plan_name, and some add clerk_plan_slug, clerk_subscription_period_end, or clerk_is_trialing. paymentAttempt.created sets clerk_last_payment_attempt_status and clerk_last_payment_attempt_at. waitlistEntry.created sets clerk_waitlist_status.
Use the selected event's declared payload schema for merge tags. Every event includes email, firstName, lastName, and createdAt. Other fields depend on the event, such as planName, planAmount, roleName, organizationName, and grandTotalFormatted. planAmount and grandTotalAmount are in the smallest currency unit, so 2000 is $20.00 in USD. Timestamps are Unix seconds.
Clerk object IDs, such as user, organization, and subscription IDs, are not merge tags. The user ID lands on the contact as clerk_user_id.
A Clerk account does not establish consent for marketing email. Record consent at sign-up and check it before promotional sends.
Not reliably. Brew receives paymentAttempt.created only, not later updates to the attempt. Its status field can read pending, paid, or failed, but a payment that fails after the attempt is created reaches Brew as an unsupported event. For missed payments, use subscriptionItem.pastDue. For a total in email copy, grandTotalFormatted holds a pre-formatted value such as $22.00.
Receiving an event and sending an email are separate steps. Confirm a matching automation is Live, then check its filters, execution history, recipient eligibility, and sending domain. A Send Example delivery verifies the webhook but never starts an automation, and an organization.created event without a known creator is recorded as unresolved.