This feature is only available on Business plans and above.
When it comes to conversion tracking, a lead event happens when a user performs an action that indicates interest in your product or service. This could be anything from:
- Signing up for an account
- Booking a demo meeting
- Joining a mailing list

In this guide, we will be focusing on tracking new user sign-ups for a SaaS application that uses Appwrite for user authentication.
Prerequisites#
First, you'll need to enable conversion tracking for your Dub links to be able to start tracking conversions:
If you're using Dub Partners, you can skip this step since partner links will have conversion tracking enabled by default.
Option 1: On a workspace-level
To enable conversion tracking for all future links in a workspace, you can do the following: To enable conversion tracking for all future links in a workspace, you can do the following:
- Navigate to your workspace's Tracking settings page.
- Toggle the Workspace-level Conversion Tracking switch to enable conversion tracking for the workspace.

This option will enable conversion tracking in the Dub Link Builder for all future links.
Option 2: On a link-level
If you don't want to enable conversion tracking for all your links in a workspace, you can also opt to enable it on a link-level.
To enable conversion tracking for a specific link, open the Dub Link Builder for a link and toggle the Conversion Tracking switch.

You can also use the C keyboard shortcut when inside the link builder to
quickly enable conversion tracking for a given link.
Option 3: Via the API
Alternatively, you can also enable conversion tracking programmatically via the Dub API. All you need to do is pass trackConversion: true when creating or updating a link:
Then, you'd want to install the Dub Analytics script to your website to track conversion events.
You can install the Dub Analytics script in several different ways:
You can verify the installation with the following tests:
- Open the browser console and type in
_dubAnalytics– if the script is installed correctly, you should see the_dubAnalyticsobject in the console. - Add the
?dub_id=testquery parameter to your website URL and make sure that thedub_idcookie is being set in your browser.
If both of these checks pass, the script is installed correctly. Otherwise, please make sure:
- The analytics script was added to the
<head>section of the page - If you're using a content delivery network (CDN), make sure to purge any cached content
Configure Appwrite#
Next, configure Appwrite to track lead conversion events during the sign up process.
Create an Appwrite Cloud project
Head to Appwrite Cloud and create a new project.

Create a new API key with the sessions.write scope enabled and save the API key for later use. You can also copy your project ID and endpoint from the project's Settings page.

Then, in your Next.js app, install the Appwrite Node.js SDK.
Add environment variables
Add the following environment variables to your app.
Integrate Dub Analytics
Add the DubAnalytics component from the @dub/analytics package to your app’s root layout.
Prepare the Appwrite client and auth library
Create the Appwrite Session and Admin client (necessary for SSR apps, as explained in the Appwrite docs). Additionally, create a function to verify user login.
Set up Dub SDK
Create the Dub client and send leads to Dub using the dub.track.lead() function.
Send leads to Dub on user signup
In the /auth page, use the Appwrite Admin client to allow users to sign up. Post sign up, check if the dub_id cookie is present, send a lead event to Dub if found, and delete the dub_id cookie.
Here are the properties you can include when sending a lead event:
| Property | Required | Description |
|---|---|---|
clickId | Yes | The unique ID of the click that the lead conversion event is attributed to. You can read this value from dub_id cookie. If an empty string is provided (i.e. if you're using tracking a deferred lead event), Dub will try to find an existing customer with the provided customerExternalId and use the clickId from the customer if found. |
eventName | Yes | The name of the lead event to track. Can also be used as a unique identifier to associate a given lead event for a customer for a subsequent sale event (via the leadEventName prop in /track/sale). |
customerExternalId | Yes | The unique ID of the customer in your system. Will be used to identify and attribute all future events to this customer. |
customerName | No | The name of the customer. If not passed, a random name will be generated (e.g. "Big Red Caribou"). |
customerEmail | No | The email address of the customer. |
customerAvatar | No | The avatar URL of the customer. |
mode | No | The mode to use for tracking the lead event. async will not block the request; wait will block the request until the lead event is fully recorded in Dub; deferred will defer the lead event creation to a subsequent request. |
metadata | No | Additional metadata to be stored with the lead event. Max 10,000 characters. |
Example App#
To learn more about how to track leads with Appwrite, check out the following example app:
See how to track new user sign-ups with Appwrite and the Dub SDK.
View your conversions#
Once you've completed the setup, all your tracked conversions will show up in Dub Analytics. We provide 3 different views to help you understand your conversions:
- Time-series: A time-series view of the number clicks, leads and sales.

- Funnel chart: A funnel chart view visualizing the conversion & dropoff rates across the different steps in the conversion funnel (clicks → leads → sales).

- Real-time events stream: A real-time events stream of every single conversion event that occurs across all your links in your workspace.
