Weekly
Find duplicate records in Airtable
Each week you get a list of records that share the same email, so you can merge them.
- Runs
- Weekly
- Apps
- Airtable
- AI
- Not needed
- Access
- data.records:read (+write to tag)
Send this to your assistant
Create a ClickRuntime automation: every Monday at 9am, find records in my Airtable Contacts table with the same email address, ignoring case, and email me the duplicates.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Duplicates build up in any Airtable base that takes data from several sources. The same customer signs up twice with different capitalization, a contact is imported again after a trade show, or a company is entered as Acme Inc and ACME, Inc. Every duplicate distorts counts, sends two emails to one person and splits history across two records. Finding them by eye in a table of thousands is not realistic, and Airtable has no built-in scheduled duplicate check.
Once a week, the automation reads all records, normalizes the key field (lowercasing, trimming spaces and removing punctuation), groups records that share the same key, and emails you the groups. If you want, it can also tag the duplicates in the base so you can filter them and merge or delete.
It works best on CRM-style bases, mailing lists, inventories and any table where each real-world thing should appear once.
What you get out of it
Customers are not contacted twice
Removing duplicate contacts means one email per person. Fewer repeat messages means fewer annoyed recipients and fewer unsubscribes caused by sloppy data. Nothing damages trust in a brand faster than being emailed twice by it.
Counts and reports become accurate
Revenue per customer, number of leads and headcount are only right when each entity is one record. Cleaning duplicates before a quarterly review prevents embarrassing corrections. A report that double-counts customers will not survive a careful question.
History stays in one place
When two records for the same client are merged, notes, orders and conversations are together, so whoever picks up the account has the full story. That context makes follow-up calls better informed and shorter.
Small differences are caught
Normalizing spacing, case and punctuation finds duplicates that a simple exact match misses, such as trailing spaces or Inc versus Inc. Typical examples are an extra space after a name or a different capital letter.
Cleaning happens weekly, not once a year
Small batches of duplicates are quick to resolve. A weekly check stops a messy backlog from growing into a multi-day clean-up project. A weekly review takes minutes, not days. It keeps the base clean for everyone who uses it.
How it works
What happens, step by step
Once a week, the automation reads every record in your Airtable table.
It tidies up each email address, ignoring capital letters and extra spaces, so near-matches are caught.
Records that share the same email are grouped together.
You get an email listing each shared email and the records using it, ready to merge.
Before it runs live
- Connect Airtable
What you get
Build your own
Need it to work differently?
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 Airtable steps into one automation
Under the hood
The code that runs this automation
from collections import defaultdict
from clickruntime import on_trigger, credentials, http, notify
BASE_ID = "appXXXXXXXXXXXXXX"
@on_trigger
def run(event):
headers = {"Authorization": f"Bearer {credentials.connection('airtable', 'work')}"}
groups, params = defaultdict(list), {"fields[]": ["Name", "Email"], "pageSize": 100}
while True:
page = http.get(f"https://api.airtable.com/v0/{BASE_ID}/Contacts", headers=headers, params=params).json()
for r in page["records"]:
email = (r["fields"].get("Email") or "").strip().lower()
if email:
groups[email].append(r["fields"].get("Name", r["id"]))
if "offset" not in page:
break
params["offset"] = page["offset"]
dupes = {e: names for e, names in groups.items() if len(names) > 1}
if dupes:
notify.email_me(f"{len(dupes)} duplicate emails in Contacts",
"\n".join(f"{e}: {', '.join(n)}" for e, n in sorted(dupes.items())))
return {"duplicates": len(dupes)}FAQ
Common questions
Which field is used to decide that two records match?
Will it delete or merge duplicates automatically?
Does it work on very large tables?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Keep Airtable prices up to date
The prices and values in your table update on their own every hour.
See how it worksClean up and check Airtable fields
Image links become attachments and records with bad email addresses are flagged, every hour.
See how it worksSend a daily team reminder and log it in Airtable
Your team gets the same reminder in Slack each day, and every one sent is logged in Airtable.
See how it worksKeep exploring
Set up “Find duplicate records in Airtable” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.