Nobody decides to have a dirty CRM. It accumulates: a lead typed on a phone, an import from a trade show, the same customer entered twice a year apart with two phone formats. Then a campaign goes out, half the emails bounce, and someone spends the afternoon fixing rows.
What it does
Every night, the workflow reads the day’s new leads and does the janitorial work nobody was ever going to do by hand. Names get title-cased, emails lowercased, phone numbers pushed into one international format. Each lead is checked against your master list; duplicates get merged into one row that keeps the best of both instead of stacking a third copy. And where the company field is blank but a website is known, it fetches the site and fills in a one-line description.
How it works
A schedule triggers the read. A code step does the normalizing (this is deterministic work, so it is code, not AI). Matching runs on email first, then phone. The optional AI step only touches genuinely blank fields and only states what the company’s own site supports. In the morning the master list is clean, and the incoming tab is empty.
Setup
- Import the workflow file into your n8n instance.
- Point the two Sheets nodes at your incoming-leads tab and your master list.
- Set your default country code so phone numbers normalize correctly.
- Connect an AI provider key for the fill-in-the-blanks enrichment step (optional; the cleanup works without it).
- Run it once on a messy test import and eyeball the merges before scheduling it nightly.
The template runs on n8n, any recent version, cloud or self-hosted. Every place that needs one of your accounts is marked with a note inside the workflow.
Get the workflow
Rather have this running in your business without touching a single node? That is the actual job. Write to hello@nurho.net or start with the ROI calculator to see if it is even worth automating.