How to Build a Round Robin in Salesforce


The goal of any B2B marketing team is to drive brand awareness, brand association and, ultimately push users to ask for a demo. Most companies fall into the bucket of having almost no leads, and focus purely on outbound efforts.

One customer of ours ran into the opposite problem. They were inundated with high quality leads were running into problems, primarily that reps were cherry-picking the best leads and many weren’t being touched at all.

This company asked us to help them solve two critical inbound problems:

  1. They wanted to reduce response time
  2. They want leads distributed evenly

What is a round robin and why do I use one?

Speed-to-contact is a key metric companies track for inbound leads. If your organization has a high volume of inbounds you’ll need a way to route leads among your available reps to reduce the lag time between submitting a contact-me form and the prospect being touched.

According to the the odds of connecting with a lead drops 100x if you touch them in 30 minutes vs 5 minutes. The dropoff rate on qualification is 21x if you touch a lead in 30 minutes vs 5 minutes.

It isn’t a surprise that hot leads are more likely to convert than cold leads but the takeaway is that getting leads to reps as soon as possible is key.

The most common practice we see, and recommend, is to put a round robin in place. A round robin will evenly distribute leads among your team, ideally taking into consideration which reps are out of office as well as any territory or account ownership.

Why do I use a round robin

Besides reducing the time it takes for a sales rep to touch an inbound prospect, a round robin helps avoid a problem every sales team faces: reps cherry picking.

This often happens when companies dump all inbound leads into a queue and let sales reps select the leads they want to target. On one hand, this allows reps to focus on the leads that make the most sense to them. On the other, this may mean that some leads are never touched and a lead you don’t touch will never become a customer.

The second reason to create a round robin is to create a level playing field among your reps. We’ve seen situations where certain SDRs stand out because they monitor the inbound lead queue, fishing for new inbounds, rather than focusing on their key role, which is outbound efforts to prospects. It can become hugely distracting, and frustrating, for reps to argue over who should own a new inbound rather than auto-routing them and avoiding that friction altogether.

Who should use a round robin?

Round Robins are used by sales teams to ensure leads are evenly distributed. Companies with a high volume of inbound leads need some sort of routing system in place. At a minimum, you want to make sure leads are routed to the reps in the appropriate territory as well as their vertical. Dumping leads into a single queue with a free-for-all model and no regard to territory/vertical will lead to lower conversion rates and unhappy prospects.

In an ideal scenario, a basic round robin would do the following:

  • Route leads randomly among your team members
  • Pause routing to reps who are out of office

Who Should Not Use a Round Robin?

Customers of Kicksaw often ask for a round robin to be put in place without a clear need. Leaders often hear that a round robin will reduce friction among their team and improve speed-to-contact, but it’s not a silver bullet.

If your sales motions are targeted as enterprise companies and you have few inbounds, the costs of building and maintaining a round robin will likely outweigh the benefits, at least in the short term.

Here’s a test to understand if a round robin makes sense: have you ever heard two, or more, reps arguing over ownership of an inbound?

If the answer is yes, you need a round robin as soon as possible. If not, you probably don’t need one.

How Does This Work Conceptually?

When a lead submits a contact me form on your website you would expect the following to occur:

  • Lead is created in Salesforce
  • Next up sales rep is assigned as owner
  • If no contact is made within X minutes, the lead is rerouted

What Tools Work Out Of The Box For a Round Robin?

There are many tools out there that can help route leads among your team. The most commonly used product we see for lead routing is LeanData. LeanData can be great if you need extra features like attribution but for 95% of our customers a custom-built lead routing process works well.

Our customer wanted flexibility to make changes to how leads were routed, wanted to avoid recurring cost and found that many of the most popular tools had features that didn’t apply to them.

For example, multi-touch marketing attribution is something lead routing tools offer that really don’t apply to most businesses. We tend to recommend a crawl > walk > run approach to administration and development in Salesforce and multi-touch attribution often feels like sprinting for most companies.

We bias action with a focus on shipping, testing and iterating.

What Sort of Skills Do I Need To Build a Round Robin in Salesforce?

Unfortunately, we haven’t seen many vendors who have build really solid, and scalable, round robin tools that natively work in Salesforce. The things we should expect a round robin to do(but rarely see) are:

  • Route to an account owner if an a matching account exists in Salesforce
  • Re-route if a lead is not accepted within an SLA
  • Route to the appropriate territory
  • Notify leadership if leads are being missed

An ideal round robin would cover all of those scenarios, and more. This means you’ll need to build a round robin from scratch. Luckily, the process is doable, even for junior admins.

At a minimum, you’ll need to know how to do the following in Salesforce:

  • Create process builder
  • Create an invokable flow
  • Create custom objects
  • Create custom fields
  • Create lead assignment rules
  • Create lead queues

Step 1: Design

Custom Object: Round_Robin__c

A round robin is an object we use to store a grouping of assignees. For example, maybe you have a round robin for North America, APAC and EU/UK. Each one of those groupings would be a round robin.

  • Fields:
    • Name
      • (Text)
    • Is_Active__c
      • (Checkbox)

Custom Object: Round_Robin_Assignee__c

Under each round robin you’ll have assignees. A given sales rep could be tied to multiple round robins and a single round robin can have many assignees.

  • Fields
    • Name
      • (Text)
    • User__c
      • (Lookup, User) – [Required]
    • Is_Active__c
      • (Checkbox)
    • Last_Assigned__c
      • (DateTime)
    • Round_Robin__c
      • (Master-Detail, Round_Robin__c)

Lead Queue: Round Robin

For each Round Robin you’ll want to create a Lead Queue in Salesforce with the exact same name. We’ll use this to look up the appropriate round robin assignee.

Lead Assignment Rule: Round Robin

Lead Assignment Rules are invoked when a new lead is created. You add filter criteria that fit your team’s structure. In the example we need a Lead Assignment rule for North America, APAC, EU/UK

North America: Lead.Country = ['United States', 'Canada', 'Mexico']
APAC: Lead.Country = ['Japan', 'China', 'Singapore', ...]
EU/UK: Lead.Country = ['United Kingdom', 'France', 'Germany', ...]

The assignee for each should be the each of the Lead Queue’s you created in the last step.

Activate your assignment rule.

Process Builder

In this step you’ll build a round robin on the lead object which is listening for new leads created. If that lead was assigned to one of the queues, we want to invoke a flow.

  • Name: Lead PB
  • Criteria:
    • Record is created

Node 1:


BEGINS([Lead].OwnerId, "00G")
//This indicates the lead owner is a queue


  • Launch flow with variables assigned
RRName = Round Robin Name
RecordId = Id

Flow: LeadRoundRobin

For this flow, we need to take the name of the Lead.Owner, which would be a queue in this case. Once we have that we’ll want to look up the next Round Robin Assignee(ORDER BY Last_Assigned_Date__c ASC, Return 1 record). Once the Assignee has been selected, we’ll set the owner of the lead to that user and set that Round_Robin_Assignee__c.Last_Assigned_Date__c = NOW(). That assignment moves the user to the back of the queue. Finally, we’ll want to send an email to that user.

  • Input Variables
    • RRName
      • (Empty string)
    • RecordId
      • (Empty string)
  • Find Record
Find Round_Robin_Assignee__c WHERE Round_Robin__r.Name = RRName and Is_Active__c = True
  • Update Record
Record Owner = Assignee.Id
  • Update Round Robin Assignee
Last_Assigned__c = NOW()

In short:

  • Look up Round Robin Assignee
  • Assign Lead to Assignee
  • Set Last Assigned Date to NOW()
  • Notify Assignee

Step 2: Build

  • Create Round Robin Object
  • Create Round Robin Assignee
  • Create Flow
  • Create PB

Step 3: Test

  • Create a lead
  • Review Lead History
    • Was Owner changed?
  • Look up Round Robin Assignee
    • Is Last_Assigned__c = NOW()
  • Create a second lead
    • Confirm routing

Step 4: Deploy

  • Create change set
    • Change set components
      • Object:
        • Round Robin + related fields
        • Round Robin Assignee + related fields
      • Flow
        • LeadRoundRobin
      • Process Builder
        • Lead PB
  • Push/Validate/Deploy change set
  • Insert Round Robin records
  • Insert Round Robin Assignee records
  • Activate Process Builder

Step 5: Test Again

  • Insert lead
    • Confirm lead assignment changed
    • Confirm Round_Robin_Assignee__r.Last_Assigned__c is set

What Now?

After having built and deployed several round robins on behalf of customers we’ve learned how to build these efficiently as well as many of the pitfalls. Some of the most common questions related a round robin are:

Can we re-route a lead if it isn’t accepted?

This question comes up often: In short, if a user sets the lead status to Unqualified or Rejected within 30 minutes the user should be moved to the top of the Round Robin.

To do this you would create a process builder on Leads which is invoked if the Status is set to Unqualified or Rejected.

When that happens a flow would be launched to look up Round_Robin_Assignee__c where id = User.Id.

That flow would then need to set Last_Assigned__c to NULL which would effectively put the user at the top of the list for the next lead.

We’d also recommend adding alerts for Sales Ops to review any rejected leads and make changes where appropriate.

Can we integrate this with slack?

There are many ways to achieve this:


Custom build


What if the email of the lead bounces?

New leads in the system aren’t always fully qualified(or real) and often you’ll need to route an additional lead to a rep. Just like disqualified leads you could create a process so that if an email bounces you invoke the same process builder for rejected leads by setting the lead status to Bounced.

How Can Kicksaw Help?

We’ve completed this project at least a dozen times in the past two years and have developed an internal Standard Operating Procedure (SOP) to get this done quickly.

If you’re looking for expert guidance on how to build this, or anything is in Salesforce please email us at or fill out the form at the bottom of the page!