🎯Leads Manager
The Leads Manager is a CRM-style module for collecting, organizing, and acting on leads from any source. It features a Kanban pipeline board, webhook ingestion, dynamic custom fields, and direct broadcast messaging.
Table of Contents
Accessing the Leads Manager
Navigate to Leads in the sidebar. Requires the leads:view permission (available to Admin, Super Admin, and Marketer roles by default).
The first time you access the Leads page, a default pipeline with 6 stages is automatically created for your workspace.
Kanban Board
Leads are displayed as cards organized into columns, where each column represents a pipeline stage.
Moving leads between stages
Drag and drop a lead card from one column to another. The stage change is saved immediately and logged in the lead's activity timeline.
Searching and filtering
Use the search bar to filter leads by name, email, phone, or company. Use the source dropdown to filter by how the lead was created (Manual, Webhook, Import, API).
Creating Leads
Manually
Click Add Lead in the top-right corner. Fill in:
Name
Yes
Full name of the lead
No
Email address
Phone
No
Phone number (include country code for SMS/WhatsApp)
Company
No
Company name
Title
No
Job title or position
Tags
No
Comma-separated tags (e.g. hot, referral, enterprise)
The lead is placed in the first stage of the active pipeline.
Via Webhook
See the Webhooks section below.
Via API
Lead Details
Click any lead card to open the detail drawer. The drawer shows:
Lead Information - Name, email, phone, company, title, current stage, source, score
Custom Fields - All key:value pairs sent via webhook or API, displayed with their human-readable names
Notes - Internal notes with author and timestamp. Add notes from the text area at the top of the section
Activity Timeline - Chronological log of all actions: stage changes, assignments, notes, field updates, conversions
Tags - Visual tag badges
Custom Fields
Custom fields allow you to store any additional data with a lead. They follow the same pattern used in Contacts.
How it works
Custom fields are stored as JSON key:value pairs. Each field has:
A camelCase key used internally (e.g.
annualRevenue)A display name shown in the UI (e.g.
Annual Revenue)
Display names are stored in a special _displayNames metadata object within the custom fields.
Example structure
When leads arrive via webhook, unmapped fields are automatically converted to custom fields. The original field name from the webhook payload is preserved as the display name.
Pipeline Configuration
Click the gear icon in the header to open Pipeline Settings.
Default stages
New
Blue
Open
Freshly created leads
Contacted
Amber
Open
Initial outreach made
Qualified
Purple
Open
Lead meets qualification criteria
Proposal
Pink
Open
Proposal or offer sent
Won
Green
Won
Successfully converted
Lost
Red
Lost
Did not convert
Customizing stages
Rename any stage by editing the name field
Reorder stages using the up/down arrows
Change colors using the color picker
Set type to Open, Won, or Lost (affects reporting)
Add new stages with the "Add Stage" button
Remove stages (minimum 2 required)
Click Save to apply changes. Existing leads remain in their current stage.
Webhooks
Webhooks let you receive leads from any external source: landing pages, forms, CRMs, ad platforms, Zapier, Make, or any system that can send HTTP POST requests.
Setting up a webhook
Click Webhooks in the leads page header
Enter a name (e.g. "Landing Page Form") and click Create
Copy the generated webhook URL
The URL format is:
Sending data to the webhook
Send a POST request with a JSON body to the webhook URL. No authentication headers are needed - the API key in the URL acts as authentication.
Response:
Field mapping
The webhook processor maps incoming JSON fields to lead properties:
name
Lead name
Required. Falls back to email, phone, or webhook name
email
Lead email
phone
Lead phone
company
Lead company
title
Lead title
Everything else
Custom fields
Stored as key:value with auto-generated display names
In the example above, job_title, utm_source, utm_campaign, form_page, and budget would all be stored as custom fields with their original names preserved as display names.
Custom field mapping
You can configure custom field mappings per webhook to route incoming fields to specific lead properties. For example, map job_title to the title core field instead of storing it as a custom field.
Nested payloads
Nested JSON objects are automatically flattened. For example:
Produces custom fields: contact.first_name, contact.last_name, metadata.source.
Managing webhooks
Regenerate key - Creates a new API key (old URL stops working immediately)
Delete - Removes the webhook. Previously received leads are not affected
Stats - Each webhook shows total leads received and last received timestamp
Automations
Automations let you define "If/Then" rules that automatically send messages (WhatsApp, SMS, or Email) when a new lead arrives via a webhook. Each automation runs a waterfall of steps with optional delay between steps and fallback channels if a message fails.
Creating an automation
Click Automations in the leads page header
Click New to open the Rule Builder
Fill in the automation settings:
Automation Name
Yes
A descriptive name (e.g. "Welcome Sequence")
Description
No
What this automation does
Trigger on Webhook
Yes
Which webhook source triggers this automation
Safety Lock
No
Dedup window to prevent the same lead from triggering the automation twice (default: 5 minutes)
Active toggle
No
Enable or disable the automation (default: active)
Adding steps
Each automation has one or more steps executed in order. For each step, configure:
Channel
WhatsApp, SMS, or Email
Delay
How long to wait before sending: Immediate, 5 min, 15 min, 30 min, 1 hour, 2 hours, or 24 hours
Template
An approved message template for the selected channel
Fallback
Optional. If the step fails, automatically retry on a different channel (e.g. if WhatsApp fails, fall back to SMS)
Click Add Step to add more steps to the waterfall. Steps run in order from top to bottom.
Example: Welcome sequence with fallback
Step 1 - WhatsApp, Immediate, "Welcome_Template" with fallback to SMS
Step 2 - Email, 2 hours delay, "Follow_Up_Email"
When a lead arrives via the selected webhook:
A WhatsApp message is sent immediately using the Welcome template
If WhatsApp fails (e.g. lead doesn't have WhatsApp), the system automatically falls back to SMS
2 hours later, a follow-up email is sent
How the safety lock works
The safety lock prevents the same lead from triggering the automation multiple times within a set window. This is useful when the same webhook might fire multiple times for the same person (e.g. duplicate form submissions).
If a lead with the same phone or email arrives within the safety lock window, the automation is skipped and a "Safety lock" event is logged in the lead's activity timeline.
Managing automations
From the Automations list modal, you can:
Toggle active/inactive - Pause or resume an automation without deleting it
View stats - See how many times the automation was triggered, completed, and failed
Edit - Modify steps, name, webhook source, or safety lock settings
Delete - Remove the automation permanently
Automation activity timeline
Every automation action is logged in the lead's activity timeline in the Lead Detail view:
Automation triggered
bolt
The automation started for this lead
Step sent
check
A message was sent successfully
Step failed
error
A message failed to send (with error details)
Fallback
swap
The system fell back to an alternative channel
Automation completed
task
All steps finished
Automation skipped
block
The automation was skipped (safety lock or missing contact info)
For sent messages, the timeline also shows delivery status (Sent, Delivered, Read, or Failed) which updates automatically as status webhooks arrive from the messaging platform.
If a step fails, a Retry button appears in the timeline so you can manually re-attempt the failed step.
Message tracking
Automation messages use the same tracking infrastructure as Broadcast Campaigns. Each message sent by an automation creates a Broadcast Message record with:
Delivery status (Pending, Sent, Delivered, Read, Failed)
Error codes and messages for failures
Timestamps for each status change
This means automation messages appear in your existing broadcast analytics and reports — there are no separate reporting tables.
Broadcasting to Leads
Quick Send
Select leads and send a direct message via SMS, WhatsApp, or Email.
Open a lead's detail drawer or use bulk selection
Click Quick Send
Choose a channel (SMS, WhatsApp, Email)
Compose your message
Click Send
Requires the lead to have the appropriate contact info (phone for SMS/WhatsApp, email for Email).
Full Broadcast Campaign
For larger campaigns with templates, tracking, and analytics:
Select leads on the Kanban board
Click Create Broadcast Audience to export selected leads as a broadcast audience
Navigate to Broadcast > Campaigns to create a full campaign using the exported audience
This leverages the existing broadcast infrastructure with template management, variable mapping, delivery tracking, and analytics.
Converting Leads to Contacts
When a lead becomes a customer, convert them to a contact:
Open the lead's detail drawer
Click Convert
Enter a contact name (pre-filled from the lead) and optionally choose a platform
Click Confirm
The Convert button disappears immediately after clicking Confirm — you don't need to reload the page.
What happens during conversion
If a contact with the same phone number or email already exists in your workspace, the lead is linked to that existing contact instead of creating a duplicate.
If you accidentally click Convert more than once (e.g. double-click), the system safely returns the same contact — no duplicates are created.
The lead's name, email, phone, custom fields, and notes are carried over to the new contact.
The lead is marked as converted with a timestamp and a link to the contact record.
A "Converted" event is logged in the lead's activity timeline.
API Reference
Endpoints use service-specific prefixes (e.g. /v1/identity/leads, /v1/identity/lead-pipelines, /v1/identity/lead-webhooks, /v1/identity/lead-automations) and require a Bearer token (except the webhook ingest endpoint).
Leads
| Method | Endpoint | Description | | -------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------ | ------ | ------------------------------------------------------------------------- | | GET | /leads | List leads. Query params: search, stageId, pipelineId, source, assignedTo, tag, page, limit, sortBy, sortOrder | | GET | /leads/:id | Get lead with activity log | | POST | /leads | Create lead | | PATCH | /leads/:id | Update lead fields | | DELETE | /leads/:id | Soft delete lead | | PATCH | /leads/:id/stage | Move lead to stage. Body: { "stageId": "uuid" } | | PATCH | /leads/:id/assign | Assign lead. Body: { "assignedTo": "userId" } | | POST | /leads/:id/convert | Convert lead to contact | | POST | /leads/:id/notes | Add note. Body: { "value": "Note text" } | | POST | /leads/bulk-action | Bulk action. Body: { "action": "move_stage | assign | delete | tag", "leadIds": [...], "stageId?": "", "assignedTo?": "", "tags?": [] } |
Pipelines
GET
/lead-pipelines
List pipelines with stages
POST
/lead-pipelines
Create pipeline with stages
PATCH
/lead-pipelines/:id
Update pipeline and stages
DELETE
/lead-pipelines/:id
Delete pipeline (not default)
POST
/lead-pipelines/ensure-default
Create default pipeline if none exists
Webhooks
GET
/lead-webhooks
List webhook configs
POST
/lead-webhooks
Create webhook
PATCH
/lead-webhooks/:id
Update webhook config
DELETE
/lead-webhooks/:id
Delete webhook
POST
/lead-webhooks/:id/regenerate-key
Regenerate API key
Webhook Ingest (Public - no auth required)
POST
/webhooks/leads/:apiKey
Receive lead from external source
Automations
GET
/lead-automations
List all automation workflows
GET
/lead-automations/:id
Get automation workflow details
POST
/lead-automations
Create automation workflow. Body: { "name": "...", "webhookSourceId": "uuid", "steps": [...], "safetyLockMinutes": 5 }
PATCH
/lead-automations/:id
Update automation workflow
DELETE
/lead-automations/:id
Delete automation workflow
POST
/lead-automations/:id/retry/:leadId
Retry the last failed automation step for a lead
GET
/leads/:id/automation-timeline
Get automation events and delivery status for a lead
Broadcast Bridge
POST
/leads/broadcast/quick-send
Send message to selected leads
POST
/leads/broadcast/create-audience
Export leads as broadcast audience
Permissions
leads:view
View leads page and data
Admin, Super Admin, Marketer
leads:manage
Create, edit, delete leads and configure pipelines/webhooks
Admin, Super Admin, Marketer
Database Tables
leads
Core lead records with custom fields
lead_pipelines
Pipeline definitions per workspace
lead_pipeline_stages
Stages within pipelines
lead_webhooks
Webhook endpoint configurations
lead_activities
Audit log of all lead actions
lead_automation_workflows
Automation rule definitions with steps
Last updated
Was this helpful?
