Freshsales and CodeWords: keeping the CRM worth trusting
Enrichment that survives contact with real data, deal hygiene, handover between marketing and sales, and reporting that does not rely on everyone updating fields.
On this page
Every CRM has the same failure mode. The data is only as good as what people typed, people type the minimum, and within a year the reports are built on fields half the team fills in and half do not. Then somebody proposes a process to fix it, which works for six weeks.
Automation helps with this, and not by nagging. It helps by filling in what can be determined without asking anyone, by making stale records visible, and by reporting what actually happened rather than what somebody remembered to record.
What we'll cover
- Why CRM data degrades
- What the Freshsales API reaches
- Connecting it to CodeWords
- Eight automations worth building
- Enrichment that survives real data
- Building it so it survives
- Limits worth knowing about
- What to build first
- Frequently asked questions
Why CRM data degrades
Entry is a tax on the person who benefits least. A salesperson updating a field is doing it for a report somebody else reads. Predictably, it slides.
Duplicates arrive faster than anyone merges them. The same company as three records, spelled differently, each with part of the history.
Stage means different things to different people. Without a written definition nobody reads, two reps will place the same deal in different stages, and the pipeline report averages them into something meaningless.
Records go stale silently. A deal untouched for two months is probably not a deal, and it stays in the forecast because removing it requires a decision.
Product and billing reality never arrives. Whether the customer is actually using what they bought is in another system, and it is what most conversations actually need.
Only the third of those is really a management problem. The rest are automatable.
What the Freshsales API reaches
Contacts, accounts, and deals can be created, read, updated, and searched, including custom fields.
Lookup by email or by custom field matters, because it is how you find a record to update without creating another one.
Notes, tasks, and appointments can be created against records, which is where automated context belongs.
Sales activities can be recorded, which supports reporting on what actually happened rather than what was typed.
Filtered views can be read, letting an automation act on a segment your team already defined rather than reimplementing the filter.
Bulk operations exist for updating many records, which matters for anything backfilling.
Webhooks and workflow actions notify external systems on record changes, so Freshsales' own workflows can hand specific cases outward.
Connecting it to CodeWords
CodeWords connects to more than 3,000 integrations, and the connection is made once and reused.
- Open CodeWords and start a new automation.
- Describe what should happen in plain language to Cody, the automation builder, naming Freshsales and the systems that hold the truth you want reflected.
- Authorize the connection with an API key, scoped to what the automation needs.
- Describe the exceptions: a contact that matches two accounts, a deal with no owner, a field that is already filled in by a person.
- Test on a narrow filter — one owner, or one pipeline — before anything runs across the database.
You describe the outcome; Cody builds it, connects it, and deploys it. The free plan covers light use, with Pro at $39 per month and Business at $100 per month as usage grows; details are on the pricing page.
Eight automations worth building
Enrichment on creation. When a contact or account appears, fill in what can be determined: company size, industry, domain, location. The next section covers doing this without making things worse.
Product usage on the account. Write usage level, last active date, and feature adoption from your product database, so the person in the conversation knows what the customer actually does.
Stale deal detection. Deals with no activity for a defined period, reported to the owner and to the manager as a list rather than as individual nags. Most forecast inaccuracy is stale deals nobody closed out.
Duplicate detection. Probable duplicates by domain and fuzzy name match, reported for a person to merge rather than merged automatically. Automatic merging of CRM records is how history gets lost.
Handover context. When a lead converts, assemble everything known — the campaigns they touched, pages they viewed, what they downloaded — into a note on the record, so the first sales conversation starts informed.
Activity reporting from reality. Report on emails and meetings that actually happened, pulled from calendar and mail, rather than on activities somebody logged.
Renewal and risk surfacing. Combine contract dates with product usage and support signals to flag accounts worth a conversation before the renewal.
Reconciliation with billing. Accounts in the CRM that do not exist in billing, and customers in billing with no CRM record, reported weekly.
Enrichment that survives real data
Enrichment is the most commonly built and most commonly regretted CRM automation, because it is easy to make the data worse.
Never overwrite what a person entered. Fill empty fields. If somebody typed something, they may know more than your source does, and overwriting it silently destroys their work and their trust in the system.
Record the source and the date. A field filled by enrichment should be distinguishable from one a person confirmed, and you should be able to tell how old it is.
Match conservatively. An ambiguous match should be left alone and reported, not resolved to the most likely candidate. Wrongly enriching one company with another's details is worse than leaving it empty, because it looks authoritative.
Re-enrich on a schedule, not once. Company size and funding change. A field enriched two years ago and never revisited is confidently wrong.
Do not enrich fields nobody uses. Every field you populate is a field somebody must later keep correct. Enrich what your reports and your segmentation actually read.
Start read-only. Run the enrichment as a report for a week — what it would have written, against which records — and look at it. The error rate on your real data is always different from the vendor's claimed accuracy.
Building it so it survives
Make it safe to run twice. Look up before creating, always, and prefer updating by a stable identifier rather than searching by name.
Never merge records automatically. Report probable duplicates and let a person decide, because a wrong merge loses history that cannot be recovered.
Report the outcome. A daily line with counts enriched, skipped, and flagged makes silence meaningful.
Leave an audit note. When an automation changes a record, a note saying what and why makes the CRM comprehensible to the people relying on it.
Do not let automation move deal stages. Stage is a judgement about a relationship. An automation that advances deals produces a forecast that looks healthy and means nothing.
Limits worth knowing about
Rate limits apply per account, so bulk enrichment needs pacing and the bulk endpoints.
Custom fields must exist before they can be written, which catches automations that work in one environment and fail in another.
Search behaviour varies by field, and matching on name is unreliable in ways that matching on email or domain is not.
Deleted records may be recoverable for a period, which is worth knowing before an automation deletes anything, and worth knowing is not the same as relying on.
Personal data sits in every contact record. Copy only what the process needs, and remember that fields written into other systems become subject to deletion requests there too.
What to build first
Stale deal detection, as a read-only report to each owner and their manager. It needs no write access, it surfaces something the forecast is already lying about, and it is uncomfortable in a useful way rather than a punitive one if you report the list rather than the person.
Two habits make the difference. Run it alongside whatever review happens now for a cycle and compare, since the disagreements tell you whether your staleness threshold matches how the team actually works. And have it report even when the list is empty, because a silent report cannot be distinguished from a broken one.
Frequently asked questions
Will enrichment overwrite what my team typed?
Not if you build it correctly, and this is the single most important rule here. Fill empty fields only. A salesperson who finds their own note replaced by an automation's guess will stop trusting the CRM, and that is much harder to fix than any data quality problem.
Should an automation merge duplicates?
No. Report probable duplicates with the evidence and let a person merge. A wrong merge combines two companies' histories irreversibly, and fuzzy name matching is confidently wrong often enough that this is not a theoretical concern.
Can it move deals through stages?
It can, and it should not. Stage reflects a judgement about a relationship that only the person in it can make. Automated stage movement produces a pipeline that looks well-managed and forecasts nothing, which is worse than a messy pipeline people believe.
How do I get product usage into the CRM?
Write it onto the account record from your product database on a schedule. It is the highest-return CRM automation available, because the question "what is this customer actually doing" comes up in nearly every conversation and currently requires a different tab.
How do I avoid creating duplicates?
Look up before creating, match on something stable such as email or domain rather than company name, and treat an ambiguous match as a reason to stop and flag rather than to guess. Most duplicates are created by automations matching too loosely.
What is the right threshold for a stale deal?
Whatever your actual sales cycle suggests, which is usually longer than people guess. Set it generously to begin with, look at what it catches, and tighten it. A threshold that flags healthy deals trains everyone to ignore the report.
Can Freshsales' own workflows call my automation?
Yes, through webhook actions, and it is a tidy pattern: let the CRM decide which records need external handling using its own rules, and hand only those outward rather than polling everything.
How do I report on activity people did not log?
Pull it from where it actually happened — calendar for meetings, mail for emails — and record it as activity against the record. Reporting on logged activity measures diligence in logging rather than work done, and everybody knows it, which is why those reports are treated as fiction.
Should the automation create records from inbound leads?
Yes, with a careful lookup first. Most duplicate problems in a CRM start with an intake automation matching too loosely or not looking at all. Match on email and domain, and treat an ambiguous result as a reason to flag rather than to guess.
How often should enrichment re-run?
Quarterly for company attributes, which change slowly, and on every significant event for anything behavioural. Enriching once at creation and never again produces a database that was accurate the day each record was made and has been drifting ever since.
What is the single highest-value thing to write into the CRM?
Product usage. Whether the customer is actually using what they bought is the question that comes up in nearly every renewal, expansion, and support escalation, and it currently requires somebody to open a different system and interpret it.
How do I stop the team distrusting automated fields?
Mark them visibly as automated, never overwrite manual entries, and show the source and date. People distrust automation in a CRM when it silently changes something they typed, and once that trust is gone they start keeping their real notes somewhere else, which is much worse than the data problem you were solving.
What should the weekly report to managers contain?
Stale deals by owner, deals that moved, and anything in the forecast with no activity behind it. Reporting the pipeline without reporting its staleness is how forecasts stay optimistic for a quarter at a time.