On a schedule, scans HubSpot, Salesforce, or Pipedrive via Connect and proposes dedupe, normalize, and enrich work you approve before anything writes.
Full install guide: Install an Eve agent.
CRM Hygiene Agent is an Eve agent that scans the CRM on a cron, drafts a cleanup batch for Slack or digest review, and writes only after you approve. It is for Eve developers running team operations. Preview every file on this page, then install with npx shadcn@latest add @evex/crm-hygiene-agent.
Scheduled CRM hygiene via Connect that proposes dedupe, normalize, and enrich batches for human approval before any write.
CRM Hygiene Agent is an eve agent that connects to one HubSpot, Salesforce, or Pipedrive account you already own. On each cron tick it reads contacts through Vercel Connect, drafts a dedupe, normalize, and enrich batch, and waits for you to approve before any CRM write.
You interact with it through environment variables and Slack or email. Set a Connect UID for the CRM you use, pick Slack Connect, Resend, or both, and trigger crm-hygiene-scan. The agent previews every digest and only delivers when confirmSend is true. CRM writes stay behind apply_hygiene_writes.
It is useful when you want scheduled cleanup without silent merges. Duplicate emails become a reviewable dedupe row. Name and phone formatting become normalize rows. Empty company or phone fields become enrich rows that copy from a sibling on the same domain. The append-only audit log records proposed, delivered, approved, written, and refused.
Two HubSpot contacts share ava@example.com. propose_hygiene_batch adds a dedupe row. Slack gets the draft batch. apply_hygiene_writes runs only after you approve with confirmWrite true.
A Salesforce contact has firstName ava and a ten-digit phone. The normalize proposal title-cases the name and prefixes plus on the phone. Nothing is patched until apply_hygiene_writes is approved.
A Pipedrive person on example.com has no company. Another person on that domain lists Acme. The enrich row copies Acme into the empty field and never overwrites a filled company.
Set CRM_HYGIENE_CRON to weekday mornings and Slack Connect. Operators get one draft batch in the Eve Slack channel. The cron path stops after deliver_hygiene_digest. Writes wait for chat plus approval.
Install with npx shadcn@latest add @evex/crm-hygiene-agent, copy .env.example, set one CRM Connect UID plus Slack or Resend, then POST to /eve/v1/dev/schedules/crm-hygiene-scan while iterating.
No. crm-hygiene-scan reads, proposes, and may deliver a digest after approval. apply_hygiene_writes is the only write path and is not called on cron. confirmWrite must be true after a later Eve approval.
No. CRM_HYGIENE_SLACK_CONNECT_UID and CRM_HYGIENE_SLACK_CHANNEL_ID are optional. When both are set, deliver_hygiene_digest posts the draft batch through the Eve Slack channel. That ping is not a CRM write.
Review the Slack or email digest, then call apply_hygiene_writes with the proposed batch and confirmWrite true. The tool always pauses for Eve approval. Without that grant the CRM client refuses POST, PATCH, PUT, and DELETE.
propose_hygiene_batch adds a dedupe row that keeps the fuller record as primary. The merge stays staged until you approve apply_hygiene_writes. There is no auto-merge and no silent overwrite.
npx shadcn@latest add @evex/crm-hygiene-agent