Skip to content
Back to skills

Anysite Crm Audit

ASecurity

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.

  • 20 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 8, 2026
ai-agentsgoapi

Works with

  • cursor
  • api
  • mcp

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add anysiteio/agent-skills --skill anysite-crm-audit --agent claude-code

Installs 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 with every re-scan.

Security grade badge for Anysite Crm Audit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/anysiteio-anysite-crm-audit/badge)](https://www.skillsdirectory.com/skills/anysiteio-anysite-crm-audit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…