Crm field audit
@revopslab/crm-field-audit
Audit the fields in any CRM export (HubSpot, Salesforce, or other CSV). Reports fill rates, placeholder junk like n/a and unknown, top values, and flags empty, sparse, constant, default-heavy, and likely duplicate fields, plus fill rates by owner or team. Ends with a cleanup plan: what to hide, merge, make required, or fix.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1---
- 2name: crm-field-audit
- 3description: Audit CRM fields from a CSV export (HubSpot, Salesforce, Pipedrive, or any CRM) to find which properties are actually used. Reports fill rate per field, placeholder junk (n/a, unknown, tbd), top values, inferred type, and flags empty, sparse, constant, default-heavy, and likely duplicate fields, with optional fill rates by owner or team. Use when the user says "which fields are unused", "clean up our CRM properties", "field fill rates", "audit our Salesforce fields", "too many custom properties", or before a CRM migration or redesign.
- 4license: MIT
- 5---
- 7# CRM field audit
- 9Every CRM collects fields nobody fills in. This kit measures what is really used, from an export, and turns it into a short cleanup plan. It never changes the CRM.
- 11## When to use
- 13- Before a CRM cleanup, migration, or new reporting project.
- 14- When reps complain about too many fields, or reports have holes.
- 15- To check whether a required field is really being filled, and by whom.
- 16- Not for deduplicating records (that is a different job) and not for deleting fields.
- 18## Inputs
- 201. **An export with all columns** at `data/<object>.csv`, one object per file (contacts, companies, deals or opportunities, tickets).
- 21 - HubSpot: export the view with "All properties" selected.
- 22 - Salesforce: a report with every field you care about, or a Data Loader export.
- 23 - Use a recent, representative slice (for example records created in the last 12 months) so old imports do not skew the result. Ask which.
- 242. Optional: the **key fields** the business depends on (`--key-fields "Industry,Amount,Owner"`), and a **group column** to compare fill by owner or team (`--group-by "Owner"`).
- 26## Steps
- 281. Confirm the object, the time slice, and the key fields with the user.
- 292. Run:
- 31 ```bash
- 32 node scripts/field-audit.mjs data/companies.csv --group-by "Owner" --key-fields "Industry,Employees,Owner" --sparse 10 --out out --name companies-field-audit
- 33 ```
- 353. Read `out/<name>.json`. Flags mean:
- 36 - `empty`: nothing in it. `sparse`: filled on under `--sparse` percent of records (default 10).
- 37 - `constant`: one value everywhere. Often a default or a field only one integration writes.
- 38 - `default_heavy`: one value is 90% or more of filled records. The default is doing the work, not people.
- 39 - `placeholders`: 5% or more of records hold n/a, unknown, tbd, test, and similar. These are counted as empty.
- 40 - `possible_duplicate`: similar names, or the same value on 95% or more of rows where both are filled.
- 414. Write `out/<name>-plan.md` with the plan format below. Group fields into: hide or archive, merge, fix the default, make required or automate, keep.
- 425. Present the summary and the plan. For anything in "hide or archive", remind the user to check workflows, reports, and integrations that use the field before removing it.
- 44## Output format
- 46```markdown
- 47# Companies field audit (12 records, 14 fields)
- 49| Action | Fields | Why |
- 50| --- | --- | --- |
- 51| Hide or archive | Legacy Score | Empty |
- 52| Merge | Industry (Custom) into Industry | Same value on 10 of 10 rows |
- 53| Fix the default | Lifecycle Stage | 91.7% "Lead" |
- 54| Clean values | Original Source | 5 of 12 are n/a or Unknown |
- 55| Make required or automate | Annual Revenue | Key field, 33% filled: enrich it |
- 57Fill by owner: Rep C 68.8% average vs Rep A 87.5%.
- 58```
- 60## Guardrails
- 62- Read-only. Never delete, hide, or edit fields or records. The plan is a recommendation for the CRM admin.
- 63- A low fill rate can be correct (a field only for one segment). Ask before calling it unused.
- 64- Exports contain personal data. Show field-level stats only; do not paste rows.
