Read-only data quality audit of the connected CRM - field completeness per mapped property, duplicate candidates, stale records, enrichability estimate. Produces a report and a concrete fix plan, never writes anything - run it first when you don't yet know what's broken; the actual fixing happens in anysite-crm-enrich. Use when the user asks "what's the state of my CRM", wants a data quality report, duplicate check, or a safe first run after connecting a CRM. Requires an active CRM connection.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add anysiteio/agent-skills --skill anysite-crm-audit --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Anysite Crm Audit?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anysiteio-anysite-crm-audit)More formats (shields.io, HTML) on the badges page.
---
name: anysite-crm-audit
description: Read-only data quality audit of the connected CRM - field completeness per mapped property, duplicate candidates, stale records, enrichability estimate. Produces a report and a concrete fix plan, never writes anything - run it first when you don't yet know what's broken; the actual fixing happens in anysite-crm-enrich. Use when the user asks "what's the state of my CRM", wants a data quality report, duplicate check, or a safe first run after connecting a CRM. Requires an active CRM connection.
---
# CRM Audit
The safe first date with a user's CRM: read everything, write nothing, show what's broken
and what enrichment would fix. Also the natural funnel into `anysite-crm-enrich`.
## Prerequisites
Active CRM connection. No profile needed (works better with one — gap analysis follows the
mapped fields).
## Flow
### 1. Inventory
```
crm_get_schema(object_type="contacts") / (object_type="companies")
```
Use `properties` filtering when you only need specific fields — the full schema is large.
Then page through records:
```
crm_query_records(object_type=..., properties=[key fields], after=<cursor>)
```
Audit scope: whole portal if small; else the working list + a stated sample. Say which.
### 2. Analyze (all local — no further API calls)
- **Completeness:** % filled per mapped/target field (email, title, company, domain,
industry, size, linkedin_url). Rank by gap size.
- **Match-key coverage:** how many contacts have email / linkedin_url / neither (the
"neither" group is unenrichable and un-dedupable — flag it).
- **Duplicate candidates:** same normalized email; same domain with several company records;
same person name + company. Candidates only — never auto-merge.
- **Email ↔ employer mismatch:** contact's email domain vs their linked company's domain.
A mismatch has THREE causes needing different handling (all seen live): the person changed
jobs; the COMPANY rebranded/changed domain (old domain usually still receives mail — the
contact is fine); or the email is genuinely stale. Free discriminator already in the data:
if crunchbase under the domain-derived alias returns a different company NAME than the
LinkedIn page of that same domain — that's a rebrand, not a departure. FLAG ONLY, never
auto-fix in either direction — in two causes out of three there is nothing to "fix", and
"correcting" the company from the email domain overwrites good data with stale. Job-change
suspects go to anysite-crm-champions.
- **Staleness:** if `anysite_last_enriched_at` (or similar) is mapped — age distribution;
contacts with no activity fields; companies with dead domains (spot-check a few via
`webparser/parse` only if the user asks).
- **Association health:** contacts without a company link (visible as missing company
fields when queried).
### 3. Report
Lead with the 3 numbers that matter: enrichable-now count, duplicate-candidate count,
unenrichable count. Then per-field completeness table, then the fix plan:
- "N contacts have linkedin_url but no title → `anysite-crm-enrich` fills them (~cost)"
- "N companies missing industry/size → enrich via company lookup (~cost)"
- "N duplicate candidates → list for manual review (merging is a CRM-side operation)"
Cost estimates come from the anysite-mcp source map (credits per call × volume). Offer to
run the enrichment as the next step — do not run it from this skill.
## Hard rule
This skill performs zero writes: no upserts, no dry-runs, no "small fixes". Its value is
that it is provably safe to run on day one.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!