- Sales
- v1.0.0
- revops
Resolve before creating CRM records
Use this skill before importing, enriching, or manually creating contacts and accounts in a CRM. Produces a create, link, review, or reject decision that prevents duplicates while preserving uncertain matches for human resolution.
SKILL.md
Use this before any workflow creates CRM records. Produce an evidence-backed identity decision for every proposed contact or account.
Normalize without destroying evidence
Retain the raw input, then derive normalized comparison values. Lowercase domains and emails, remove URL protocols and paths, standardize whitespace, and separate legal suffixes from company names. Do not strip meaningful subdomains, country distinctions, or name tokens merely to force a match.
Identify the strongest available keys. For people, prioritize verified email, provider identity, account relationship, full name, and role. For accounts, prioritize canonical domain, verified external identity, legal entity, address, and normalized name. A company name alone is weak evidence; a shared consumer-email domain is not account identity.
Search broadly, decide narrowly
Search active and archived records, alternate emails, former domains, aliases, parent-child relationships, and identifiers merged within the organization’s retention window. Search each strong key independently so a formatting error in one field does not hide an existing record.
Build candidate pairs and compare corroborating and conflicting evidence. Return one of four decisions:
- Link: one candidate is unambiguous and the new data belongs on it.
- Create: no credible candidate exists after all strong keys are searched.
- Review: multiple candidates remain or important evidence conflicts.
- Reject: the input lacks minimum identity evidence or violates an exclusion rule.
Use references/match-rubric.md for numeric scoring. The score supports the decision; it does not override a hard conflict.
Plan the action
For a link decision, specify which existing record receives each new value and whether the update fills a blank or replaces data. Do not overwrite a verified value with an unverified enrichment.
For a create decision, include the keys searched, search time, candidate count, proposed owner, source, consent or lawful-use context, and required relationships. Accounts should carry a stable domain where available. Contacts should not be created as ownerless, accountless records when those relationships are known.
For review decisions, show the smallest evidence set a human needs: candidate identifiers, matching fields, conflicts, recent activity, ownership, and downstream relationships. Do not ask the reviewer to rediscover the match.
Before applying the action, repeat the search. Another workflow may have created the record after planning. If a new candidate appears, invalidate the create decision and resolve again.
Read references/worked-resolution.md for common domain, email, and subsidiary cases.
Monitor the gate
Track proposed creates, prevented duplicates, ambiguous reviews, false links, false creates, and resolution time. Sample both approved creates and links. A gate that prevents duplicates by routing everything to review is not working; neither is one that boasts high automation while creating costly false links.
Investigate sudden increases by source. A spike often indicates a changed export format, upstream identifier loss, a new acquisition, or an integration searching a narrower population than it writes.
What good looks like
- Every create decision lists the keys and populations searched.
- Exact identifiers drive high-confidence matches, while names provide corroboration rather than proof.
- Conflicts such as different legal entities or verified emails force review.
- The action is re-resolved immediately before creation.
- New records arrive with ownership, provenance, and known relationships.
- Reviewers see actionable evidence rather than a vague “possible duplicate” warning.
The mediocre version checks only exact email or company name, ignores archived records, creates first and deduplicates later, or links records because a fuzzy score crossed a threshold despite contradictory evidence.
Rules
- MUST retain raw source values and record the search evidence.
- MUST re-run resolution immediately before creation.
- MUST require human review for conflicting strong identifiers or irreversible merges.
- NEVER match accounts on normalized name alone.
- NEVER replace verified data with weaker enrichment without approval.
- NEVER create records to evade an ambiguous match.
Files
3 files ship with this skill. They are installed beside the SKILL.md.
Resolve before creating CRM records
Imported from the GTM Skills library by Swan (https://www.gtmskills.com), skills/ryan-iyengar/resolve-before-create
at https://github.com/swan-gtm/gtm-skills/commit/5d786aad0c7b2ca59b1abf1f601f9407ca261996. Written by Ryan Iyengar (https://www.linkedin.com/in/ryaniyengar).
The skill is shared under the MIT License below; this notice must stay with any copy.
MIT License
Copyright (c) 2026 Swan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.