Form-Fill Enrichment & Dedupe
Turn raw, messy form-fill leads into clean, enriched, de-duplicated records your CRM will actually thank you for - with a human approving every create, merge, and reject.
A private web app where you upload raw leads, watch them get normalized and enriched from the email domain, see duplicate and existing-account flags, approve create/merge/reject decisions, and export a clean CRM-ready CSV.
Before you start
- A raw leads CSV exported from your form tool (Marketo, HubSpot forms, Typeform, Gravity Forms, a webhook log - anything)
- An existing accounts/contacts CSV from your CRM to match against
- Free Vercel, Supabase, and Resend accounts (the plan walks you through each)
The problem this kills
Your web forms are open to the whole internet, which means your CRM is open to the whole internet. Every day you get a fresh pile of "Mickey Mouse," asdf@asdf.com, "Test Test," gmail addresses with no company, the same VP filling out three different forms, and accounts you already have under five slightly different spellings. Marketing ops spends hours hand-cleaning this junk - or worse, it flows straight into the CRM and quietly rots your routing, scoring, and reporting.
The painful part isn't any one bad record. It's that there's no consistent, reviewable process. People normalize "co." vs "Corp" vs "Corporation" differently. Nobody catches that j.smith@acme.com and john.smith@acme.com are the same human at the same company you already sell to. And merges happen by gut feel, with no record of who decided what.
This tool gives you a clean, repeatable pipeline: raw in, normalized + enriched + dedupe-flagged in the middle, and a human approving exactly what gets created, merged, or rejected before a single row touches your system of record.
What you'll build
A private internal web app, just for your team, that:
- Lets you upload a raw leads CSV (whatever columns your form spits out) and an existing accounts/contacts CSV to match against.
- Normalizes the messy fields - company name (drops "Inc/LLC/Corp" noise, fixes casing), job title (maps to a clean set), and country (maps "USA / U.S. / United States" to one value).
- Enriches from the email domain - infers the likely company, and flags free-mail (gmail/yahoo), role addresses (info@, sales@), and disposable/junk domains.
- Flags duplicates and existing accounts using a dedupe key you control (lowercased email + normalized company/domain), so you see "new," "duplicate of this batch row," or "matches existing CRM record."
- Presents a review queue where ops sees every record with its enrichment and match, and chooses Create / Merge / Reject - nothing is auto-merged, ever.
- Exports a clean, CRM-ready CSV in the exact columns your CRM import expects, carrying your decisions.
What's inside the Implementation Plan
The plan is a single markdown file you paste into Claude Code (a free AI coding assistant that runs in your terminal). It does the building; you answer questions and click around to test.
It opens by interviewing you about your business - your form fields and their exact names, your CRM's import columns, how you spell and normalize company names today, what counts as a duplicate in your world, and your messiest edge cases. It reflects a short tailored spec back to you and waits for your thumbs-up. So you get a tool shaped around your data and your rules - not a generic template you have to bend to fit.
From there it walks step by step: set up the app and login, build the data model from your answers, the upload + normalize + enrich + dedupe engine, the human review queue, the CRM export, and the audit trail. Every step ends with a copy-paste prompt.
The governance it includes (this is the point)
This isn't a throwaway script. The plan builds in the controls that make a tool safe to put real lead data through:
- Login so only your team can open it.
- Row-level security so each organization only ever sees its own data.
- A complete audit trail - who approved what, and when, for every create/merge/reject.
- A hard human-in-the-loop approval gate - the tool drafts the cleaned, enriched, matched batch; a person reviews and approves; only then does anything get committed to the export.
- Duplicate guards so the same lead (and the same uploaded batch) can't be processed twice.
Who it's for
Marketing ops, demand gen, and revenue ops people who are tired of "Mickey Mouse" leads and duplicate company records - and who want a clean intake process without begging engineering for a project. No coding background needed. If you can use a spreadsheet and follow instructions, you can build this.
You've got this - paste the first prompt.