Makani Tech: Build. Automate. Evolve.

7-Email SaaS Onboarding Drip with n8n, Clerk and Brevo (free workflow)

Every new Clerk signup gets a 7-email Brevo sequence that checks what the user has done before each email, and stops when they upgrade or unsubscribe.

FreeWorkflowBy Kishan Makani · updated 28 October 2026 · 6 min read

ClerkBrevon8n Webhook

Downloads

  • Download the n8n workflow (JSON)

    saas-onboarding-email-drip-clerk-brevo-n8n.json · n8n workflow · 55 steps · starts with Receive Clerk or App Event · uses Send In Blue · 85 KB

    Import into n8n: Create Workflow, then the menu, then Import from File.

How to import it into n8n
  1. In n8n, create a new workflow.
  2. Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
  3. Open each node with a warning and connect your own account: the file carries no passwords or keys.
  4. Run it once with Test workflow, check the result, then switch it to Active.

What this workflow does

Turn every new Clerk signup into a 7-email onboarding sequence in Brevo, one that reacts to what the user actually does. Before each email, the workflow re-reads the contact in Brevo. Users who have activated get product tips. The rest get gentle nudges. Users who upgrade, unsubscribe or finish the sequence leave it cleanly.

  1. Receive Clerk or App Event gets user.created from Clerk, or activated / upgrade_pro from your app. Workflow Configuration holds every value you need to set. Route Event sends each event down its own path.
  2. A signup is upserted in Brevo with PLAN FREE and IS_ACTIVATED false, added to the New Signup list and sent email 1.
  3. After each wait, a Get Contact node re-reads the contact. Activated After Welcome? and Activated After Email 3? choose the tips path or the nudge path.
  4. Every Left the Drip check stops the sequence when PLAN is PRO or the contact is blacklisted. Upgraded to Pro? then moves upgraded users to the Pro list, and removes unsubscribed users from the New Signup list.
  5. Every email has an Unsubscribe link. Unsubscribe Link Clicked blacklists the contact in Brevo and shows a confirmation page.
  6. After email 7, the contact moves to the Inactive list. If any node fails, Email Me About Failed Run emails you the error and a link to the run.

Who it is for

SaaS founders and small product teams who use Clerk for sign-in and Brevo for email, and who want a lifecycle drip without paying for a separate marketing automation tool.

What you need

  • n8n (Cloud or self-hosted)
  • Brevo account (the free plan works) with a verified sender
  • Clerk application with webhooks
  • n8n, cloud or self-hosted, reachable from the internet so Clerk and the unsubscribe links can reach the webhooks

The workflow, step by step

Step 1 · Incoming events

Clerk posts user.created. Your app can post activated or upgrade_pro. Route Event sends each one down its own path.

  • Receive Clerk or App Event (Webhook)
  • Workflow Configuration (Set)
  • Normalize Payload (Set)
  • Route Event (Switch)

Step 2 · Activated and upgrade events

Marks the contact as activated, or sets PLAN to PRO and moves them to the Pro list.

  • Activated: Mark Contact Activated (Brevo)
  • Upgrade: Set Plan to PRO (Brevo)
  • Upgrade: Remove from New Signup List (HTTP Request)
  • Upgrade: Add to Pro List (HTTP Request)

Step 3 · Welcome email

Creates the contact, adds it to New Signup, sends email 1 and checks back 2 days later.

  • Signup: Upsert Contact (Brevo)
  • Signup: Add to New Signup List (HTTP Request)
  • Prepare Email 1 (Set)
  • Send Email 1 (Brevo)
  • Wait 2d After Welcome (Wait)
  • Get Contact After Welcome (Brevo)
  • Left the Drip After Welcome? (IF)
  • Activated After Welcome? (IF)

Step 4 · Activated or not?

Top row: activated users get the tips email (5). Bottom row: everyone else gets email 3, then email 2 if they still haven't activated.

  • Prepare Email 5 (Set)
  • Prepare Email 3 (Set)
  • Send Email 5 (Brevo)
  • Send Email 3 (Brevo)
  • Wait 3d After Email 5 (Wait)
  • Wait 2d After Email 3 (Wait)
  • Get Contact Before Email 4 (Brevo)
  • Get Contact After Email 3 (Brevo)
  • Left the Drip Before Email 4? (IF)
  • Left the Drip After Email 3? (IF)
  • Activated After Email 3? (IF)

Step 5 · One more nudge

Email 2 for people who still haven't activated, then on to email 4.

  • Prepare Email 2 (Set)
  • Send Email 2 (Brevo)
  • Wait 2d After Email 2 (Wait)
  • Get Contact After Email 2 (Brevo)
  • Left the Drip After Email 2? (IF)

Step 6 · Emails 4, 6 and 7

A few days apart, with a check before each one. After email 7 the contact moves to the Inactive list.

  • Prepare Email 4 (Set)
  • Send Email 4 (Brevo)
  • Wait 3d After Email 4 (Wait)
  • Get Contact Before Email 6 (Brevo)
  • Left the Drip Before Email 6? (IF)
  • Prepare Email 6 (Set)
  • Send Email 6 (Brevo)
  • Wait 3d After Email 6 (Wait)
  • Get Contact Before Email 7 (Brevo)
  • Left the Drip Before Email 7? (IF)
  • Prepare Email 7 (Set)
  • Send Email 7 (Brevo)
  • Final: Remove from New Signup List (HTTP Request)
  • Final: Add to Inactive List (HTTP Request)

Step 7 · Leaving the sequence

Each check lands here if the contact upgraded or unsubscribed. Upgrades go to the Pro list, unsubscribes come off New Signup.

  • Upgraded to Pro? (IF)
  • Pro Exit: Remove from New Signup List (HTTP Request)
  • Unsubscribed: Remove from New Signup List (HTTP Request)
  • Pro Exit: Add to Pro List (HTTP Request)

Step 8 · Failure alert

If a run fails you get an email with the error and a link to the run.

  • When Workflow Fails (Error Trigger)
  • Email Me About Failed Run (Brevo)

The link in every email opens this webhook. It blacklists the contact in Brevo and shows a short confirmation page.

  • Unsubscribe Link Clicked (Webhook)
  • Unsubscribe Contact in Brevo (HTTP Request)
  • Show Unsubscribed Page (Respond to Webhook)

Setup

  1. Download the JSON below and import it in n8n (Create workflow > ⋯ > Import from File).
  2. Add a Brevo API credential to every Brevo node and every HTTP Request node, and verify your sender in Brevo.
  3. In Brevo, create the contact attributes FIRSTNAME, PLAN, IS_ACTIVATED, PRODUCT_NAME and CLERK_ID. Create three lists (New Signup, Pro and Inactive) and note their IDs.
  4. In Workflow Configuration, set these values: - productName, senderName and senderEmail. - newSignupListId, proListId and inactiveListId. - unsubscribeUrl, which is the Production URL of Unsubscribe Link Clicked.
  5. In Email Me About Failed Run, set your sender and the email address that should get alerts.
  6. In the Clerk dashboard, go to Webhooks. Point user.created at the Production URL of Receive Clerk or App Event.
  7. When your app sees activation or an upgrade, POST {"type":"activated","email":"..."} or {"type":"upgrade_pro","email":"..."} to the same URL.
  8. Test it: set the first Wait to 1 minute and POST {"type":"user.created","data":{"first_name":"Asha","email_addresses":[{"email_address":"[email protected]"}]}} to the Test URL. The contact should show up in New Signup and you get email 1. Click its Unsubscribe link: you see a confirmation page and get no more emails.

How to customise

The sample emails are written for a website-monitoring product named "Your Product". They are a starting point, not a fixed format. In each Prepare Email node you can change these: - The subject. - The HTML layout. - The logo, links and sign-off. - The tone and language.

The first name is already in each email as {{ $('Normalize Payload').item.json.firstname }}, and the Unsubscribe footer sits at the bottom of each email's HTML. Keep that footer when you replace the copy. You can also send Brevo templates instead, change the delays in the Wait nodes, add or remove emails, or add your own events in Route Event.

How a user leaves the drip

  • Unsubscribes: clicks the link in any email. The contact is blacklisted in Brevo, and the next check stops the sequence.
  • Upgrades: your app sends upgrade_pro, which sets PLAN to PRO and moves the contact to the Pro list. The next check stops the sequence.
  • Finishes: after email 7, the contact is moved to the Inactive list.

Guardrails

  • Public webhook: Clerk's signature isn't verified here. Keep this URL private, or add a Svix signature check before going live.

Troubleshooting

  • Credential errors after import: imported workflows never include credentials. Open each node marked red and select your own account.
  • Nothing runs on its own: test runs only fire once. Activate the workflow so the trigger keeps running.
  • Odd times or dates: set your timezone in Workflow Settings.

Want the members-only resources too?

A free account unlocks them all, including the ones shared in DMs.

Create a free account