Skip to content

Monthly

Get a monthly contacts clean-up list

Once a month you get the contacts that look duplicated and the ones with no email or phone number.

Runs
Monthly
Apps
Google Contacts
AI
Not needed
Access
read

Send this to your assistant

Create a ClickRuntime automation: on the 1st of every month, email me Google Contacts that share a name or email with another contact, and contacts with no email or phone.

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

After years of syncing phones, importing spreadsheets and saving email senders, a recruiter's Google Contacts holds 4,200 entries. Some people appear three times with slightly different spellings, others have only a first name and no way to reach them. When she needs a phone number for a candidate, she finds two entries, one of them out of date, and does not know which to trust.

Once a month, ClickRuntime reads all your contacts, groups them by normalized name and email to spot likely duplicates, and lists the contacts missing an email address or phone number. The report arrives by email as two tidy lists, so you can clean up in short sessions without searching for the problems yourself.

Teams that share a contacts directory use it to keep the data trustworthy.

What you get out of it

  • Duplicates are found for you

    Entries for the same person under slightly different spellings are grouped together. Merging them takes seconds in Google Contacts, and the confusion over which version is correct goes away. It also keeps phone sync tidy.

  • Gaps are visible

    Contacts with no email or phone are listed, so you know whom you cannot actually reach. You can fill in details when you next talk to them or remove entries that serve no purpose.

  • Cleanup in small steps

    A monthly list is short enough to work through in a few minutes. Contacts stay tidy without a painful annual cleanup day that nobody wants to do. Stress-free upkeep beats a yearly marathon.

  • Outreach reaches the right address

    When mailing lists and invitations are built from clean contacts, fewer messages bounce or go to outdated addresses. That protects your sender reputation and saves embarrassing resends. Fewer bounces also means your own messages are less likely to be flagged as spam.

  • Better data for other automations

    Birthday reminders, mail merges and syncs all depend on contact data being right. Clean contacts make everything built on top of them more reliable. That includes mail merges, birthday notices and synced phones, all of which quietly depend on tidy records.

How it works

What happens, step by step

  1. Once a month, ClickRuntime goes through all of your Google Contacts.

  2. It groups contacts that share the same email or a very similar name, to find likely duplicates.

  3. It also lists the contacts that have no email address or phone number.

  4. You get one email with both lists, ready for a tidy-up.

Before it runs live

  • Connect Google Contacts

What you get

RunsMonthly
Get a monthly contacts clean-up listtoday, 9:00Succeeded
Email · Contacts checkPossible duplicates: sam@northwind.example: Sam Lee, Sam L. No email or phone: Acme front desk

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 Google Contacts 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.
duplicate_incomplete_contacts_report.pyexample
from collections import defaultdict
from clickruntime import on_trigger, credentials, http, notify

@on_trigger
def run(event):
    headers = {"Authorization": f"Bearer {credentials.connection('google', 'work')}"}
    params = {"personFields": "names,emailAddresses,phoneNumbers", "pageSize": 1000}
    people, token = [], None
    while True:
        page = http.get("https://people.googleapis.com/v1/people/me/connections", headers=headers,
                        params={**params, "pageToken": token} if token else params).json()
        people += page.get("connections", [])
        token = page.get("nextPageToken")
        if not token:
            break
    groups, incomplete = defaultdict(list), []
    for p in people:
        name = p.get("names", [{}])[0].get("displayName", "(no name)")
        emails = [e["value"].lower() for e in p.get("emailAddresses", [])]
        for key in [name.lower()] + emails:
            groups[key].append(name)
        if not emails and not p.get("phoneNumbers"):
            incomplete.append(name)
    dupes = [f"{k}: {', '.join(v)}" for k, v in groups.items() if len(v) > 1]
    text = "Possible duplicates:\n" + "\n".join(dupes or ["none"]) + "\n\nNo email or phone:\n" + "\n".join(incomplete or ["none"])
    notify.email_me(f"Contacts check: {len(dupes)} duplicates, {len(incomplete)} incomplete", text)
    return {"duplicates": len(dupes), "incomplete": len(incomplete)}

FAQ

Common questions

How does it decide two contacts are duplicates?
It compares normalized names and email addresses, so John Smith and john smith, or the same email with different capitalization, are grouped. It reports likely matches for you to check, rather than merging anything, since two people can share a name.
Does it change or delete any contacts?
No. The report only reads your contacts and emails you lists. You make the changes in Google Contacts, where merging duplicates is built in. That keeps you in control, because only you know whether two similar entries are really the same person.
Can it include the contacts in my other Google accounts?
Each connection reads the contacts of the Google account it was authorized with. If you manage a personal and a work account, set up each separately and you get a report per account, which is easier to act on than one combined list.
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 (monthly). 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 “Get a monthly contacts clean-up list” from your assistant

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