Automatically Lead Conversion

Share This Post

How to automatically convert leads when creating leads.

Step 1: Create Apex Trigger

Go to Setup -> Developer Console -> New -> File -> New -> Apex Trigger

trigger AutoLeadConvertedHandlerTrigger on Lead (after insert) {
    
    Set<Id> setOfLeadIds = new Set<Id>();
    if(Trigger.IsAfter && Trigger.isInsert){
        for(Lead lead : trigger.new){
            //You can check any condition in the Lead Source
            if(lead.LeadSource == 'Web'){
                setOfLeadIds.add(lead.Id);
            }
        }
        if(setOfLeadIds.size()> 0){
AutoLeadConvertedHandler.autoConvertLeads(setOfLeadIds);
        }
    }
}

Step 2: Create Apex Class

Go to Setup -> Developer Console -> New -> File -> New -> Apex Class

public class AutoLeadConvertedHandler {

    public static void autoConvertLeads(Set<Id> setOfLeadIds){
        LeadStatus convertLeadStatus = [Select Id,MasterLabel from LeadStatus where isConverted = true limit 1];
        List<Database.LeadConvert> massLeadConvert=new List<Database.LeadConvert>();
        for(Id currentLead : setOfLeadIds){
            Database.LeadConvert LeadConvert=new Database.LeadConvert();
            LeadConvert.setLeadId(currentLead);
            LeadConvert.setConvertedStatus(convertLeadStatus.MasterLabel);
            LeadConvert.setDoNotCreateOpportunity(false); // This line is used if you want to create opportunity on auto lead conversion then set False, Otherwise True.
            massLeadConvert.add(LeadConvert);
        }

        if(!massLeadConvert.isEmpty()){
            List<Database.LeadConvertResult> lcr=Database.convertLead(massLeadConvert);
        }
    }
}

Step 3: Create Apex Test Class

Go to Setup -> Developer Console -> New -> File -> New -> Apex Class

@isTest
public class AutoLeadConvertedHandlerTest {

    static testMethod void convertLeadPositiveTest() {
        test.startTest();
        Lead lead = new Lead();
        lead.FirstName = 'Trigger1';
        lead.LastName = 'Test1';
        lead.Company = 'Trigger Test1';
        lead.LeadSource = 'Web';
        insert lead; 
        System.AssertEquals (1, [Select Id,FirstName from Lead where Status='Closed - Converted' and  id=:lead.id].size());
        test.stopTest();
    }
    
    static testMethod void convertLeadNegetiveTest() {
        test.startTest();
        Lead lead = new Lead();
        lead.FirstName = 'Trigger2';
        lead.LastName = 'Test2';
        lead.Company = 'Trigger Test2';
        lead.LeadSource = 'Phone Inquiry';
        insert lead; 
        System.AssertEquals (0, [Select Id,FirstName from Lead where Status='Closed - Converted' and  id=:lead.id].size());
        test.stopTest();
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Subscribe To Our Newsletter

Get updates and learn from the best

More To Explore

Winter ’26 Flow Highlights

Salesforce never fails to amaze us with every seasonal release, and Winter ’26 is packed with exciting new Flow enhancements that make automation smoother, smarter,

Apex Best Practices: Do’s and Don’ts

Writing efficient, scalable, and maintainable Apex code is critical to the long-term success of your Salesforce org. Below are essential Apex best practices, explained with