The lead capture step is rarely the bottleneck. The handoff is — getting a clean record into the CRM with enough context that sales doesn't have to re-research the prospect.
The four-step pipeline
- Validate and normalize the form payload
- Enrich with public firmographic data
- Upsert into the CRM with a deterministic key
- Notify the right Slack channel with the verdict
Why deterministic keys matter
If you key by email alone, every test submission creates duplicates. We key by a hash of normalized email + company domain, which gives clean dedup without surprises.
function leadKey(payload: Lead) {
const email = payload.email.trim().toLowerCase();
const domain = (payload.company ?? email.split("@")[1]).toLowerCase();
return sha256(`${email}|${domain}`).slice(0, 24);
}The Slack message is the product
Sales reads Slack, not the CRM. Spend the time making the notification useful: company size, their plan tier, the page they came from, and the one-line message they sent. Three reactions cover triage.
The full template is in our productized Inquiry-to-CRM Automation kit if you want a head start.
Sasha builds operational systems that quietly remove tedious work for clients.
Discussion (2)
Be kind. Be specific.- CLChris L.Mar 20, 2026
We did the deterministic-key change yesterday and our duplicate rate dropped to zero. Bless.
- HOHannah O.Mar 22, 2026
Curious how you handle GDPR consent in the enrichment step.
