Salesforce assignment rules assign to a user or a queue. They do not take turns. Anything that does is built on top, and each way has its own faults.
The options
- A flow with a counter. A record-triggered flow keeps a counter on a custom object and picks the next user. Cheap to build, and the one most teams start with.
- A queue with Omni-Channel. Leads sit in a queue and agents receive them. It balances by availability, not by strict turns.
- A routing app. LeanData and Traction Complete both offer round robin pools with their own member lists.
Where it goes wrong
- Two leads arrive at once. A counter read by two records at the same moment can give both the same person. It is the usual cause of uneven turns.
- The list holds people who left. The rotation keeps its own list. See round robin assigning to inactive users.
- Someone is away. A plain rotation sends leads to people on leave unless something marks them unavailable.
- Another system changes the owner. A second flow or rule takes the lead after the rotation. See a flow overriding the rule.
Check it yourself
SELECT OwnerId, COUNT(Id) FROM Lead WHERE CreatedDate = LAST_N_DAYS:30 GROUP BY OwnerId ORDER BY COUNT(Id) DESC
Compare the counts across people in the same rotation. A large gap with no reason, such as a part-time rep, points to one of the faults above. Then check that every owner in the result is an active user.
The routing health checklist17 questions, from the rules to the handoff.
Open it
Have it checked every night instead.
Routing Forensics connects as a read-only user and checks this, and the rest of your routing, against your real leads. Register interest and you will be first to get a free health report: what is leaking, where, and what it is worth.
The free scan cannot see this one: it reads assignment rules, flows and queues only. Connected, it is checked every night.