Skip to content

Weekly

Find leads with missing details or duplicates

A weekly email of leads missing an email, phone or source, plus likely duplicates.

Runs
Weekly
Apps
Zoho CRM
AI
Not needed
Access
read

Send this to your assistant

Create a ClickRuntime automation: every Friday, email me Zoho CRM leads missing an email, phone number or lead source, and list leads that share the same email address.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Over a couple of years, a CRM collects leads with no phone number, no company, an email typed as gmial.com, and the same person entered three times by three reps. Campaign sends bounce, reps waste calls on dead numbers, and territory reports look wrong. Nobody schedules a cleanup because no one knows how big the problem is, so it grows until a migration or mailing exposes it.

Each week, all leads in Zoho CRM are read page by page and checked. Records missing key fields are flagged, and email addresses that appear on more than one lead are grouped as likely duplicates. A report lands in your inbox listing the counts and the specific leads to fix.

Operations owners and marketing teams that care about deliverability benefit most. The report works best as a standing agenda item for the weekly marketing and sales operations check-in.

What you get out of it

  • The size of the problem is known

    A weekly count of incomplete records shows whether data is getting better or worse. Decisions on cleanup effort rest on numbers, and the effort can be justified or shelved with evidence.

  • Email bounces drop

    Finding malformed or missing addresses before a campaign protects your sender reputation. Fewer hard bounces keep future mail out of spam folders and keep your sending domain trusted. Your domain reputation takes years to rebuild.

  • Duplicates are handled early

    Repeated emails are grouped for merging. Fixing three records now beats untangling three years of notes later, when nobody remembers which one the customer actually meant. Merges are quick when done early.

  • Reps get better data to work with

    Leads with company and phone filled in can be routed and called. Reps stop spending time on records that go nowhere, and territory reports stop lying about who owns what.

  • Clean data before big moves

    If you plan a CRM migration or a new marketing tool, weekly tidying means the final cleanup is a short job. You avoid the panic of discovering the mess during the move.

  • Accountability for data entry

    When the report names the records and the fields missing, people can see which source is creating bad data. A form that omits phone numbers is a fix, not an argument.

How it works

What happens, step by step

  1. Once a week ClickRuntime goes through every lead in your Zoho CRM.

  2. It notes any lead that is missing an email, a phone number or a lead source.

  3. It also finds email addresses shared by more than one lead, which are likely duplicates.

  4. You get one email with both lists, so you know exactly what to fix.

Before it runs live

  • Connect Zoho CRM

What you get

RunsWeekly
Find leads with missing details or duplicatestoday, 9:00Succeeded
Email · Zoho CRM lead data checkMissing fields (14): Dana Lee: missing Phone Shared emails (2): info@northwind.example: Sam Rivera, S. Rivera

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Run it at a different time, more or less often, or only on weekdays
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Zoho CRM steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
lead_data_quality_audit.pyexample
from collections import defaultdict
from clickruntime import on_trigger, credentials, http, notify

@on_trigger
def run(event):
    h = {"Authorization": f"Zoho-oauthtoken {credentials.connection('zoho', 'work')}"}
    leads, token = [], None
    while True:
        params = {"fields": "Full_Name,Email,Phone,Lead_Source", "per_page": 200, **({"page_token": token} if token else {})}
        r = http.get("https://www.zohoapis.com/crm/v8/Leads", params=params, headers=h)
        if r.status_code == 204:
            break
        leads += r.json()["data"]
        token = r.json()["info"].get("next_page_token")
        if not r.json()["info"]["more_records"]:
            break
    missing = [f"  {l['Full_Name']}: missing " + ", ".join(f for f in ("Email", "Phone", "Lead_Source") if not l.get(f))
               for l in leads if not all(l.get(f) for f in ("Email", "Phone", "Lead_Source"))]
    by_email = defaultdict(list)
    for l in leads:
        if l.get("Email"):
            by_email[l["Email"].lower()].append(l["Full_Name"])
    dupes = [f"  {e}: {', '.join(n)}" for e, n in by_email.items() if len(n) > 1]
    notify.email_me("Zoho CRM lead data check",
                    f"Missing fields ({len(missing)}):\n" + "\n".join(missing) + f"\n\nShared emails ({len(dupes)}):\n" + "\n".join(dupes))
    return {"missing": len(missing), "duplicates": len(dupes)}

FAQ

Common questions

What counts as a missing field?
A field is flagged if it is empty on the lead record. You decide which fields matter, such as email, phone, company or lead source, and only those are checked. Only the fields you choose are checked.
How are duplicates detected?
Leads sharing the same email address are grouped together, ignoring upper or lower case. Matching on phone or company plus name can be added if your data lacks emails. Matching on phone or company can be added for duplicates.
Does it change or merge any leads?
No. It only reports, so a person checks before merging or deleting. Changing records automatically could destroy history, which is why the output is a list for review. Nothing is merged or deleted by the report.
What permissions does it need?
read. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (weekly). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Find leads with missing details or duplicates” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.