Skip to main content
Conversion tracking requires a Business plan subscription or higher.
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
A diagram showing how lead events are tracked in the conversion funnel

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.
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:
  1. Navigate to your workspace’s Analytics settings page.
  2. Toggle the Workspace-level Conversion Tracking switch to enable conversion tracking for the workspace.
Enabling conversion tracking for a workspace
This option will enable conversion tracking in the Dub Link Builder for all future links.
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:
const link = await dub.links.create({
  url: "https://dub.co",
  trackConversion: true,
});
Then, you’ll need to install the Dub client-side script and set up the necessary configuration for client-side conversion tracking:
1

Generate your publishable key

Before you can track conversions on the client-side, you need to generate a publishable key from your Dub workspace.To do that, navigate to your workspace’s Analytics settings page and generate a new publishable key under the Publishable Key section.
Enabling conversion tracking for a workspace
2

Allowlist your site's domain

Then, you’ll need to allowlist your site’s domain to allow the client-side conversion events to be ingested by Dub.To do that, navigate to your workspace’s Analytics settings page and add your site’s domain to the Allowed Hostnames list.This provides an additional layer of security by ensuring only authorized domains can track conversions using your publishable key.
Enabling conversion tracking for a workspace
You can group your hostnames when adding them to the allow list:
  • example.com: Tracks traffic only from example.com.
  • *.example.com: Tracks traffic from all subdomains of example.com, but not from example.com itself.
When testing things out locally, you can add localhost to the Allowed Hostnames list temporarily. This will allow local events to be ingested by Dub. Don’t forget to remove it once you’re ready to go live!
3

Install @dub/analytics package

Next, install the Dub analytics script in your application.You can install the @dub/analytics script in several different ways:You must configure the publishable key you generated in step 1 when installing the analytics script. Without this key, client-side conversion tracking will not work.
import { Analytics as DubAnalytics } from '@dub/analytics/react';

export default function RootLayout({
  children,
}) {
  return (
    <html lang="en">
      <body className={inter.className}>{children}</body>
      <DubAnalytics
        ...
        publishableKey="dub_pk_xxxxxxxx" // Replace with your publishable key
      />
    </html>
  );
}

Quickstart

Once the analytics script is installed, you can start tracking lead events in your application on the client-side. Here are the quickstart examples for tracking lead events:
import { useAnalytics } from "@dub/analytics/react";
import { useState } from "react";

export function SignUpForm() {
  const { trackLead } = useAnalytics();
  const [name, setName] = useState("");
  const [email, setEmail] = useState("");
  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();

    // Track the lead event
    trackLead({
      eventName: "Sign Up",
      customerExternalId: email,
      customerName: name,
      customerEmail: email,
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        value={name}
        onChange={(e) => setName(e.target.value)}
        required
      />
      <input
        type="email"
        value={email}
        onChange={(e) => setEmail(e.target.value)}
        required
      />
      <button type="submit">Sign Up</button>
    </form>
  );
}
Here’s the full list of attributes you can pass when sending a lead event:
PropertyRequiredDescription
clickIdYesThe 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.
eventNameYesThe 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).
customerExternalIdYesThe unique ID of the customer in your system. Will be used to identify and attribute all future events to this customer.
customerNameNoThe name of the customer. If not passed, a random name will be generated (e.g. “Big Red Caribou”).
customerEmailNoThe email address of the customer.
customerAvatarNoThe avatar URL of the customer.
modeNoThe 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.
metadataNoAdditional metadata to be stored with the lead event. Max 10,000 characters.
When to track leads You should track lead events after successful user actions such as:
  • User registration or account creation
  • Newsletter subscription
  • Contact form submission
  • Demo request or trial signup
  • Download of gated content
Ensure the event is triggered only after the backend confirms the action was completed successfully. This guarantees accurate lead data and prevents false or incomplete entries.
Client-Side Conversion Tracking Limitations:
  • Ad blockers – Users with ad blockers may prevent tracking scripts from loading.
  • JavaScript disabled – Events won’t be tracked if users have JavaScript disabled.
  • Network issues – Failed network requests won’t retry automatically.
  • Privacy concerns – Some users may block client-side tracking for privacy reasons.
For more accurate conversion tracking, consider using server-side conversion tracking

Deduplication behavior

Lead events are automatically deduplicated to prevent duplicate tracking:
  • Events are deduplicated based on the combination of customerExternalId (the user ID of the referred customer within your database) and eventName
  • If you send multiple lead events with the same customer ID and event name, only the first event will be tracked
  • Subsequent duplicate events will return null and won’t be tracked

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 line chart
  • Funnel chart: A funnel chart view visualizing the conversion & dropoff rates across the different steps in the conversion funnel (clicks → leads → sales).
Funnel chart view showing the conversion & dropoff rates from 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.
The Events Stream dashboard on Dub
I