Zodiac Tech CRM Docs

Lead routing, scoring & health

Automatic lead assignment, scoring rules that rank leads, and health badges that flag deals going cold before it is too late.

admin manager Medium ⏱ 12 min Updated 2026-10-05

Lead routing, scoring & health

Three quiet systems decide who gets each lead, which leads rise to the top, and which ones are quietly dying:

  1. Routing — automatic assignment of new leads to the right person.
  2. Scoring — points that rank leads by how promising they are.
  3. Health — a live badge (healthy / needs attention / at risk) on every lead, with the reason.

This guide configures all three. The result is visible on All Leads (health + score columns), Lead 360 (the guidance cards) and your dashboard's Needs your attention panel.

Who this is for

  • Admins — set up routing, scoring and thresholds once.

  • Managers — tune them as the team changes.

  • Difficulty: Medium

  • Time: 12 minutes

  • Prerequisites: Admin access (Settings → Leads & Sales). Lead auto-assignment needs at least one active team member.

Part 1 — Lead routing (auto-assignment)

1. Open Lead Assignment

  1. Go to Settings → Leads & Sales → Lead Assignment (/admin/lead-assignment-settings).

Expected result: the assignment settings page opens with a mode selector.

2. Choose a mode

  1. Pick one:
    • Off — every lead waits for a human to assign it.
    • Specific user — every new lead goes to one person.
    • Round robin — new leads alternate through the team members you select.
  2. For specific/round-robin, pick the person or the pool.
  3. Save.

Expected result: from now on, every lead that arrives without an assignee is routed by this rule. Leads created with an assignee already set (imports with an owner column, webhooks that specify one, manual entries where you picked someone) are never overridden.

Round robin with a small team Add only the people who genuinely respond fast — a round robin that includes someone on leave is worse than no rotation. Revisit the pool when the team changes.

Part 2 — Lead scoring

3. Open Lead Scoring

  1. Go to Settings → Leads & Sales → Lead Scoring (/admin/lead-scoring-rules).

Expected result: the list of scoring rules (a fresh install has none — scores simply stay 0).

4. Create rules

  1. Click New scoring rule. Each rule has:
    • Name — for your own clarity ("Has email").
    • Field — email, phone, source, status, first name, or last name.
    • Operator — equals, not equals, contains, present, absent, greater than, less than.
    • Value — what to match (not needed for present/absent).
    • Points — integer; positive to reward, negative to penalise (default 10).
    • Active toggle.
  2. Add rules like:
    • Email present → +20
    • Source contains "website" → +15
    • Status equals lost → −50
  3. Drag rules to order them (order affects evaluation sequence).

Expected result: every lead's Score column updates to reflect matching rules; the score is recomputed as the lead changes (completing tasks and other activity can move it too). Use the score filter on All Leads to work the best leads first.

Scoring vs health — the difference

Score Health
What it is A ranking number from your rules A live status from activity and time
Answers "How promising is this lead?" "Is this lead being handled?"
Example Email present +20, high deal value +30 "No contact in 7 days → at risk"

Part 3 — Health states (how they behave)

Health is computed automatically per lead — no setup needed — and appears as a badge wherever leads are listed (hover for the reason). The three states:

State Meaning (defaults)
Healthy Contacted recently, nothing overdue.
Needs attention Losing momentum — e.g. a new lead uncontacted for more than 2 hours, or no activity for 7 days.
At risk Clear neglect — e.g. a missed appointment that was never followed up.

The thresholds are platform-level defaults (uncontacted > 2h, stale > 7 days, missed-appointment grace 30 minutes with a 7-day lookback) — ask your platform admin if your business needs different values.

The dashboard "Needs your attention" panel

Your CRM dashboard has a panel that surfaces, with 60-second freshness:

  • Not contacted — brand-new leads nobody has touched.
  • Untouched for 24 hours — leads going stale.
  • High-value never called — deals at or above the high-value threshold (default ₹25,000) with no calls logged.
  • Overdue follow-ups — promises past due (before the start of today).

Each item links straight to the lead or the follow-up list.

Expected result: every morning you have a short, honest list of money that needs rescuing — before the customer disappears.

Expected result

New leads land on someone's desk automatically, the pile self-sorts by score, and nobody can say "I didn't know it was going cold" — the system flagged it days earlier.

Common mistakes

  • Round robin with one active member. Not a rotation — use specific user instead.
  • Assuming imports get re-routed. Leads with an assignee keep it. Fix by hand or via bulk Assign.
  • Negative scores without understanding order. Rules evaluate in order; keep the logic simple and test with a real lead.
  • Ignoring health because "the agent knows". Health is data, not blame — check it in weekly reviews (see Reports, Response Time).

Troubleshooting

Symptom Fix
New leads unassigned Mode is Off, no pool members selected, or the lead already had an assignee.
Score always 0 No active scoring rules, or none match. Add a broad rule (email present) and re-check.
Health badge shows on every lead That is the point — clear them by contacting leads and completing follow-ups.
High-value panel empty Check the threshold (default ₹25,000) — leads below it are excluded by design.

Technical details

  • Routing: App\Filament\Pages\Settings\LeadAssignmentSettingsPage writes tenants.settings['leads']['assignment'] (mode off|specific|round_robin + user id/pool). Consumption: App\Observers\LeadObserver::created() via LeadAutoAssigner — only when the lead has no assignee.
  • Scoring: App\Filament\Resources\LeadScoringRuleResource (plan feature lead_scoring); rules carry field/operator/value/points with sort_order.
  • Health: App\Services\Leads\LeadHealthService — states healthy / attention / at_risk with a human reason; rendered via the Lead::withHealthState() scope; thresholds in config('leadhub.ux.health') (stale_days, uncontacted_hours, missed_appointment_grace_minutes, missed_appointment_lookback_days).
  • Attention panel: App\Filament\Widgets\LeadAttentionWidget (60-second cache) — categories not_contacted, untouched_24h, high_value_never_called, overdue_follow_ups.
  • High-value threshold: config('leadhub.ux.high_value_deal_threshold') (default ₹25,000), also used by the High value saved view.

Was this page helpful?