Why do duplicate companies keep showing up in my Airtable base?
Duplicates appear because the same company arrives from different sources with slightly different names and website formats. "Acme Inc," "acme," and "https://www.acme.com/pricing" all look different to a simple match. Without a normalized key, Airtable treats them as three companies, and every automation downstream inherits the confusion.
This tutorial is for a specific situation: a small team using Airtable as the company list behind outbound or lead routing, with records coming from forms, imports, and enrichment tools. Nobody owns data hygiene full time, and duplicates have started causing real problems.
You will build two things. First, a match key that turns messy websites and names into one consistent value. Second, a check that flags any new company whose key already exists. Then you will clean up the duplicates you already have.
What is a match key and why does it work better than the company name?
A match key is a cleaned, standardized value used only for comparing records. For companies, the website domain is usually the best basis, because names vary far more than domains do. Strip the protocol, the www prefix, and any path, then lowercase the result. Two records with the same key are almost certainly the same company.
Names are unreliable for matching. Legal suffixes, abbreviations, and typos make the same company look like several. Domains are more stable, though not perfect. Some companies use several domains, and some small companies have none. That is why the check flags possible duplicates for a person to review instead of merging them automatically.
I keep the match key in its own formula field and never edit it by hand. It is a machine-facing field, so I name it clearly as one, which is the same naming habit I described in how to name Airtable fields so automations do not break.
How do I build the domain match key formula?
Add a formula field that strips the website down to its bare domain using Airtable's REGEX_REPLACE, LOWER, and TRIM functions. Airtable's formula reference describes REGEX_REPLACE as substituting all matching substrings with a replacement value, which is exactly what removing the protocol, www, and path requires.
A formula that works for most inputs looks like this: LOWER(TRIM(REGEX_REPLACE(REGEX_REPLACE({Website}, "^(https?://)?(www[.])?", ""), "/.*", ""))). The inner replacement removes "http://", "https://", and "www." from the start. The outer replacement removes everything from the first slash onward. LOWER and TRIM finish the cleanup.
Test it on real messy values before trusting it. Paste a few awkward websites into test records, such as one with uppercase letters, one with a trailing path, and one with no protocol, and confirm the key comes out the same. Five minutes of testing here saves hours of cleanup later.
What about companies with no website?
Use a fallback key built from the company name. Lowercase it, trim it, and remove common legal suffixes such as Inc, LLC, and Ltd with SUBSTITUTE or REGEX_REPLACE. Then make the final match key use the domain when one exists and the name key when it does not, so every record still gets a comparable value.
The final field can be a simple IF: IF({Domain Key}, {Domain Key}, {Name Key}). Records matched on the name key are less certain than records matched on domain, so I add a small field that shows which basis was used. Reviewers then know to look more carefully at name-based matches.
Name keys will produce some false matches, especially for common words. That is acceptable, because the check only flags records for review. A person makes the final call, which is far safer than letting an automation merge two different companies that happen to share a name.
How do I flag a duplicate the moment a new company arrives?
Create an Airtable automation that runs when a record is created. Have it search the table for other records with the same match key. If it finds any, update the new record with a "Possible duplicate" status and a link to the existing record. Then route flagged records to a review view instead of into outbound or routing.
The automation needs a short delay or a condition that waits until the website field is filled, because records created by forms or imports sometimes arrive in stages. If the check runs before the website lands, the key is empty and nothing matches. A trigger on the website field being filled avoids that problem.
Downstream automations should skip flagged records. If a Zap or Make scenario sends companies to your CRM or an outbound tool, add a filter that ignores anything marked as a possible duplicate. That single filter stops most duplicate problems from spreading beyond Airtable.
How do I review flagged duplicates without slowing the team down?
Build a review view that shows only possible duplicates, sorted by newest first, with the match key, the basis, and the linked existing record visible. A person decides for each one: merge, mark as not a duplicate, or delete. Clear the queue on a fixed schedule so flagged companies do not sit unworked.
Add a "Not a duplicate" option and teach the automation to respect it. Some companies genuinely share a domain, such as subsidiaries on a parent site. Once a reviewer marks a pair as distinct, the check should not keep flagging them. Otherwise reviewers start ignoring the queue, and the whole system stops working.
If you already have a manual review step for leads, fold this into it. My manual lead review queue tutorial uses the same view and status pattern, and running one queue is easier than running two.
How do I clean up the duplicates already in the base?
Use Airtable's Dedupe extension on the match key field. Airtable describes it as helping you find and manage duplicate records in a table, with exact, similar, and fuzzy matching for text. Its documentation says you must review each set of duplicates individually, and that the primary record keeps its comments and revision history.
Airtable lists the extension for paid plans and notes it may be slow or unable to process very large bases. For a big table, work in batches by filtering a view first. Pick the primary record carefully in each set, because that is the one that keeps its history, and carry over any field values the others have that it lacks.
Before merging, check which records automations or syncs depend on. A record that holds a CRM ID or a sync key should usually be the primary. Merging away the record your CRM points to can break the link. I covered that risk on the CRM side in merging duplicate CRM contacts without breaking automations.
How do I know the duplicate check is working?
Track how many records get flagged each week, how many turn out to be real duplicates, and how many duplicates still reach your CRM. A steady flag count with a high confirmation rate means the key is doing its job. A rising count of duplicates in the CRM means something is bypassing the check.
A simple summary in Airtable, such as a count of possible duplicates by week, is enough. If the confirmation rate is low, the key is too loose, often because of name-based matching. If duplicates still appear downstream, look for an import path or automation that writes companies without passing through the check.
Revisit the formula when new sources arrive. A new enrichment tool or form can introduce a website format the key does not handle yet. A quick test on a few records from each new source keeps the check reliable.
What should you do next?
Add the domain key and name key formula fields, combine them into one match key, and test them on messy real values. Build the automation that flags new records with an existing key, add the review view, and filter flagged records out of downstream automations. Then clean existing duplicates with the Dedupe extension in batches.
Clean company data is the foundation of everything else in your go-to-market stack. Routing, scoring, and reporting all assume one company equals one record. This check makes that assumption true.
If you want help building data hygiene into your Airtable and CRM setup, reach out at pravinkumar.co. I build websites and the automations behind them for lead generation, and clean data is what keeps those automations honest.
Get found, cited and the back office automated
Let's make your site the source AI engines quote and wire up the systems behind it.
Read more blogs
Let's get your website found and cited by AI
Tell me what you're working on, whether AI search is skipping your product, your back office is buried in manual work, or you need a build that does both.