Articles

Contact Enrichment: How We Fill 23 Fields Without Touching a Spreadsheet

Ibby SyedIbby Syed, Founder, Cotera
9 min readMarch 6, 2026

Contact Enrichment: How We Fill 23 Fields Without Touching a Spreadsheet

Contact Enrichment Automation

Elena spent three hours last Tuesday enriching 50 contacts. Open Apollo, search the name, copy the job title, switch tabs, paste into the CRM, go back, copy the company name, switch tabs, paste. Then phone number. Then LinkedIn URL. Then company size, industry, revenue range. Fifty contacts. Twenty-three fields each. That's 1,150 individual copy-paste operations. She counted.

I watched her do it for about ten minutes before I physically couldn't anymore. Not because she was doing it wrong. She was actually fast. Three hours for 50 contacts is above average. Most reps take four or five. The problem is that this work exists at all. We have API access to every data source she was manually browsing. The CRM has an API. Everything she touched that morning had a programmatic interface. She was the integration layer. A human being, functioning as middleware between two databases.

That was six months ago. Today the same 50 contacts take about 90 seconds. An AI agent takes the email addresses, hits the enrichment APIs, resolves conflicts between data sources, and pushes 23 clean fields per contact directly into HubSpot. Elena uses her reclaimed three hours to actually sell.

What "Enrichment" Actually Means

The word gets thrown around loosely, so let me be specific. Contact enrichment is taking a minimal identifier, usually an email address, and filling in everything else you'd want to know about that person and their company before reaching out.

Here are the 23 fields we enrich per contact:

The personal stuff: full name, job title, seniority level, department, phone number (direct and mobile), LinkedIn URL, and location. That's 8 fields. Most people stop here and call it enrichment. It isn't. It's just contact lookup.

Company-level data adds another 10: company name, domain, industry, employee count, revenue range, founding year, headquarters location, tech stack (the tools they use), recent funding, and company LinkedIn URL.

Then the fields that actually matter for selling: buying intent signals, hiring patterns in relevant departments, recent news mentions, competitor tools they use, and a fit score we calculate based on our ICP. That's 5 more.

Twenty-three total. Each one sourced, cross-referenced, and deposited into the right CRM field without anyone opening a browser tab.

The Accuracy Problem Nobody Talks About

Here's something the enrichment vendors don't love discussing. No single provider has accurate data for everything. We tested the four biggest providers (Apollo, ZoomInfo, Lusha, and Clearbit) against a manually verified set of 500 contacts. The results were uneven.

Email accuracy ranged from 72% to 91% depending on the provider. Phone numbers were worse: 58% to 79%. Job titles were surprisingly unreliable. People change jobs. LinkedIn gets updated before vendor databases do. We found 34% of job titles from one provider were outdated by at least one role change.

Company-level data was more consistent. Revenue ranges, employee counts, and industry codes were accurate 85-93% of the time across providers. But "accurate" has a catch. Two providers can both be "accurate" and still disagree because they bucket revenue differently. One says "$10M-$50M," another says "$25M-$100M." Both technically correct, just different granularity.

The fix is obvious but painful to implement manually: cross-reference multiple sources and pick the most recent. When Apollo says someone is a VP of Marketing and ZoomInfo says they're a CMO, check LinkedIn to break the tie. When Clearbit says 200 employees and Apollo says 350, take the one with the more recent data refresh.

A lead enricher and qualifier agent does this cross-referencing automatically. It hits multiple sources, compares timestamps, flags discrepancies, and picks the winner. When sources conflict on something that matters, like whether a contact is still at the company at all, it flags the record for human review instead of guessing. That flag alone saved us from sending 23 emails to people who had left their companies. Twenty-three embarrassments, avoided.

How Credits Actually Work (And Why They Matter)

Every enrichment provider runs on a credit system, and the economics are confusing on purpose.

Apollo gives you 50 credits per month on the free plan. Sounds generous until you realize that a single contact lookup can cost 1-5 credits depending on what data you pull. Export an email: 1 credit. Export a mobile number: 5 credits. Enrich all 23 fields on a single contact and you've used somewhere between 5 and 10 credits. Your 50 free credits cover 5-10 contacts. Not 50.

ZoomInfo doesn't publish credit costs on their website. You have to talk to sales. In our experience, per-contact costs range from $0.15 to $0.80 depending on data depth and contract size. A 10,000 contact enrichment job could run $1,500 to $8,000. That variance is wild.

Clearbit (now part of HubSpot) bundles enrichment into HubSpot pricing, which sounds free until you realize the enrichment quality dropped after the acquisition. We saw a 12% decline in email accuracy over six months. Free data you can't trust isn't actually free.

Lusha has a straightforward credit model. 5 credits per contact on the free tier, scaling down per contact as you buy more. Their phone number accuracy is the best we've tested at 79%, which tells you something about the overall state of B2B phone data. The best in class still misses one in five.

The smart play is to not burn credits on contacts you'll never reach out to. Enrich in stages: basic firmographic data first (cheap, low credit cost), then deeper enrichment only on contacts that match your ICP. We reduced our credit consumption by 60% with this approach. An AI agent handles the staging automatically. Round one: name, company, title. Does this match our ICP? No? Stop. Yes? Round two: full enrichment, all 23 fields.

The Spreadsheet Trap

I need to address the elephant in the room. Half the sales ops teams I talk to are running their enrichment process through Google Sheets. And I get why. Sheets is flexible. Everyone knows how to use it. You can paste in a list, add columns, share it around.

But the moment your enrichment pipeline lives in a spreadsheet, you've created a job for yourself. Somebody has to deduplicate. Somebody has to format phone numbers consistently. Somebody has to spot-check that the data from last week's enrichment run didn't overwrite the manually verified data from two weeks ago. Somebody has to remember which contacts have already been enriched and which haven't. "Somebody" is always Elena.

We used to run a 14-column Google Sheet that we called "The Monster." It had tabs for each data source, a VLOOKUP hell that matched records across tabs, conditional formatting that highlighted conflicts, and a "notes" column where reps would write things like "this is wrong, I checked LinkedIn" and "DO NOT OVERWRITE." It was a masterpiece of human ingenuity. It was also completely unsustainable. When Elena went on vacation for a week, nobody touched it. When she came back, 200 new contacts were sitting in the CRM with zero enrichment.

The fix wasn't a better spreadsheet. The fix was removing the spreadsheet entirely. Contacts enter the CRM, trigger the enrichment agent, and arrive in the rep's queue fully populated. No export, no import, no copy-paste, no VLOOKUP, no Monster.

Building the Automated Pipeline

Our enrichment pipeline has four steps. None of them involve a human opening a browser.

Step one: trigger. A new contact enters HubSpot, either through form submission, manual entry, or list import. The only required field is email address.

Step two: enrich. The AI agent takes the email, hits Apollo's API first (our primary source), then cross-references with a secondary source for phone numbers and a web scrape for recent news. Total time per contact: 8-12 seconds.

Step three: qualify. Based on the enriched data, the agent scores the contact against our ICP criteria. Company size between 50 and 2,000 employees? Check. B2B SaaS or tech company? Check. Director level or above? Check. Each criterion is scored, and the contact gets an overall fit rating.

Step four: route. High-fit contacts go directly to a rep's queue with a notification. Medium-fit contacts go to a nurture sequence. Low-fit contacts get tagged but don't trigger outbound. The routing happens in the CRM automatically based on the enrichment data.

The whole thing runs without anyone watching it. We check the error logs once a week. Typical error rate: 3-4% of contacts fail enrichment, usually because the email address is malformed or belongs to a personal domain (gmail, yahoo) where business data doesn't exist.

What This Actually Saves

I track three numbers. Time: we went from 3 hours per 50 contacts to 90 seconds. That's a 99.2% reduction. Elena's words when she first saw it run: "I want those six months of my life back."

Money: our credit costs dropped 60% because we stopped enriching contacts that didn't match our ICP. We were burning credits on contacts from 5-person startups when our minimum company size is 50. Pure waste.

Data quality: our overall enrichment accuracy went from roughly 74% (single source, no cross-referencing) to 89% (multi-source with conflict resolution). That 15-point jump translated directly into fewer bounced emails and fewer "sorry, wrong person" replies.

The less quantifiable benefit is that reps now trust the data in the CRM. Before automation, enrichment quality was inconsistent. One rep enriched carefully. Another rushed through it. A third didn't bother. Now every contact gets the same treatment. When a rep opens a contact record, the data is there and it's reliable. They stopped prefacing calls with "let me just quickly check LinkedIn first."

The Providers We Actually Use

After testing everything, we settled on Apollo as our primary data source. Their coverage is the best across the mid-market B2B segment we sell into. API access comes at the Professional tier ($79/seat/month) and that's non-negotiable for automation. Without the API, you're back to manual.

For phone numbers specifically, we supplement with Lusha. Apollo's phone data is decent but Lusha's is measurably better for direct dials.

For real-time signals (funding rounds, hiring surges, leadership changes), we use web scraping through the AI agent rather than a static database. The data is fresher by days or weeks compared to any provider's database refresh cycle.

We don't use ZoomInfo anymore. The data quality is comparable to Apollo for our segment, and the price is 3-4x higher. Your mileage may vary. If you sell to the enterprise, ZoomInfo's depth on Fortune 500 companies is still unmatched. For mid-market B2B, it's hard to justify the premium.

Contact enrichment isn't glamorous. Nobody writes LinkedIn posts about how excited they are to populate CRM fields. But it's the foundation that everything else in sales sits on. Bad data means bad targeting means bad emails means no pipeline. The work has to happen. It just doesn't have to happen manually.


Try These Agents

For people who think busywork is boring

Build your first agent in minutes with no complex engineering, just typing out instructions.