Contact-level targeting
How identity enrichment turns a 30% match rate into 90%+, and what that does to your ad budget.
Contact-level targeting means uploading the exact contacts you want to reach as a custom audience to an ad platform, using enriched identity data so the platform can actually find them.
If you've read my article on contact-level advertising, you know the concept: paid ads delivered to specific named contacts.
Contact-level targeting is the technical layer that makes it work.
Without it, you upload your contact list and half of it disappears. The platform can't match your business data to its users.
With it, match rates go from 20-40% to 70-99%.
This article covers why native uploads fail, how identity enrichment fixes the matching problem, what match rates look like by platform, and the effective CPM math that changes how you think about ad budgets.
The identity mismatch.
Your CRM stores business data. Work email. Job title. Company name.
Ad platforms store personal data. The email you used to sign up for Facebook. Your phone number linked to Google. The personal email on your LinkedIn profile.
These are two completely separate data sets. And they almost never overlap.
The personal email problem.
I created my Facebook and Instagram accounts years before I met Jack and started ContactLevel.
I signed up with a personal email. A Gmail address I've had since I was a teenager.
If you upload dag@contactlevel.com to Meta Ads Manager, Meta has no idea who I am. There's no social profile assigned to that email. The match fails. I disappear from your audience.
To find me, you need to give Meta data that links to my personal account. Usually that's the personal email I signed up with.
But which one? I have more than 10 personal emails. (I used to milk free trials when I was broke.)
And it's not just emails.
I've used different phone numbers over the years. I've logged into platforms from multiple devices. I have different identifiers on LinkedIn than I do on Google.
One data point isn't enough. You need to build a full picture of who I am online.
An online identity.
What a native CSV upload gives you.
When you export contacts from your CRM and upload a CSV to an ad platform, you can include 1-3 data points per contact. Usually a work email, maybe a personal email if you have it, maybe a phone number.
The platform takes that data, compares it against its user database, and tries to find a match.
Three data points. That's all it has to work with.
If none of those three match what the platform has on file for that person, the match fails. That contact is gone from your audience. Your ad will never reach them.
LinkedIn's own documentation on matched audiences confirms that match rates depend entirely on the quality of data you upload.
Quality here means quantity.
More data points per person = more chances to match.
What identity enrichment does.
At ContactLevel, when you upload a contact, we don't just pass your work email to the ad platform and hope. We build a full digital identity profile around that person first.
You give us a work email or LinkedIn URL. We map that to 50-70 data points per contact:
→ Personal email addresses (multiple, across different providers)
→ Phone numbers (current and historical)
→ Device IDs
→ Mobile advertising IDs
→ Historical location data
→ Hashed identifiers specific to each ad platform
Instead of giving LinkedIn one lonely work email and hoping for a match, you're giving it a full identity profile.
50+ ways to find the right person instead of one.
Why more data points changes everything.
Think about it like this.
You're trying to find one person in a database of 900 million LinkedIn users.
You have their work email. LinkedIn checks: does this email match any profile? If not, you're done.
Now imagine you have 50+ identifiers for that same person. LinkedIn checks the first one. No match. Checks the second. No match. Checks the tenth. Match. Found them.
You only need one identifier to hit.
The more you upload, the higher the odds of at least one connecting.
That's the difference between a native CSV and an enriched upload. Three chances vs fifty chances.
The math is obvious.
How the Audience Sync works.
You don't upload a regular CSV. ContactLevel uploads via API directly to each ad platform.
API uploads support far more data fields per contact than a CSV file.
Where a CSV lets you include 1-3 columns of data, an API upload can include dozens of identity fields per person.
And the data is formatted specifically for each platform.
The identifiers we send to Meta are optimized for Meta's matching system. The identifiers we send to Google are optimized for Google's. LinkedIn gets LinkedIn-specific data.
Same contact. Different upload per platform. Each one tuned for how that platform matches users.
Match rates by platform.
Here's what the numbers actually look like.
Native CSV upload (1-3 data points per contact):
→ LinkedIn: ~40% match rate
→ Meta: ~20% match rate
→ Google: ~2% match rate
→ Reddit: ~2% match rate
→ X: ~10% match rate
ContactLevel enriched upload (50-70 data points per contact):
→ LinkedIn: 80-99% match rate
→ Meta: 60-80% match rate
→ Google: 60-70% match rate
→ Reddit: 50-70% match rate
→ X: 50-70% match rate
LinkedIn is the highest because most professionals have a well-maintained profile with verified email addresses.
Meta is lower because the gap between business identity and personal identity is largest there.
Google and Reddit are the hardest to crack natively, which is why enrichment makes the biggest difference on those platforms.
How to read your match rate.
One thing that confuses people when they first use ContactLevel: the match rate percentage shown in your ad platform might look lower than you expect.
Here's why:
Because we upload many data points per person, the ad platform sees a high number of total rows.
When it matches, it reports the percentage of rows matched, not the percentage of people matched.
So you might see a 25% match rate in LinkedIn Campaign Manager and think something went wrong. But if you check the actual audience count, it's higher than the number of contacts you uploaded.
That means nearly everyone matched. Some matched more than once because multiple identifiers connected to the same profile.
Always compare your ContactLevel audience size against the ad platform's audience count.
That tells you how many real people matched. The percentage is misleading because of how the data is structured.
What match rates do to your audience coverage.
Match rates don't just affect who sees your ads. They affect what you're actually paying to reach the right people.
If you upload 5,000 contacts and 30% match, your ad campaign can only reach 1,500 of them. The other 3,500 don't see ads at all.
Your campaign literally cannot reach them no matter how much you spend.
Your audience ceiling is capped at 30% of your intended list.
The coverage gap.
Think about what this means in practice.
You built a list of 5,000 contacts. Your sales team is pursuing these people. Your marketing strategy is built around reaching them. But your ad campaign only covers 1,500 of them.
→ At 30% match (native CSV): 1,500 reachable out of 5,000. 3,500 are invisible.
→ At 50% match (with some personal emails): 2,500 reachable. 2,500 invisible.
→ At 80% match (ContactLevel enriched): 4,000 reachable. Only 1,000 invisible.
Higher match rates don't save you money on wasted impressions. They increase the number of people your campaign can actually reach. It's a coverage problem, not a spend problem.
Cost per contact reached.
Now layer in ad costs.
You're spending $2,000/month on LinkedIn to reach your 5,000-contact list.
At 30% match: Your audience is 1,500 people. Your $2,000 buys impressions against 1,500 contacts. Cost per thousand contacts reached: about $100.
At 80% match: Your audience is 4,000 people. Same $2,000 buys impressions against 4,000 contacts. Cost per thousand contacts reached: about $37.50.
Same budget. Same creative.
But at 80% match you're reaching nearly 3x more of the people you actually care about. (And influencing 3x more pipeline)
Across multiple platforms.
The math gets more interesting when you go multi-platform.
LinkedIn CPMs run around $30. Meta CPMs for B2B can be as low as $3. Reddit even cheaper.
At a 60% match rate on Meta with enriched data, your cost per thousand contacts reached drops to about $5. Compare that to $100 on LinkedIn at native match rates.
Same person. Different platform. Fraction of the price. And the only reason you can reach them on Meta at all is the identity enrichment — without it, Meta has no way to find B2B contacts.
I cover the full platform allocation strategy in my article on cross-platform distribution.
The budget case.
ContactLevel starts at $1,000/month for the Grow plan (10,000 net new contacts). Scale plan is $2,500/month for 30,000 contacts. 14-day free trial with 1,000 contacts included. See pricing.
For demand gen teams running large lists.
If you're spending $2,000/month on LinkedIn ads targeted at a 5,000-contact list with a 30% match rate, your campaign can only reach 1,500 contacts. The other 3,500 are off limits.
Add ContactLevel at $1,000/month. Match rate goes to 80%+. Your campaign now reaches 4,000 contacts. That's 2,500 people who were invisible to your marketing, now seeing your content.
For ABM teams running small, high-value lists.
You don't need a big list for this to make sense.
Some of our most active users are ABM program managers at enterprise companies with fewer than 200 target contacts.
When your target accounts have contract values in the six- to eight-figure range, the math is simple. If contact-level targeting helps you reach even one additional decision-maker at one target account, and that person's engagement moves a deal forward, the $1,000/month paid for itself several times over.
ABM with 50 contacts at $500K ACV is a very different equation than demand gen with 50,000 contacts at $5K ACV. Both work with contact-level targeting. The ROI just comes from different places.
The smaller your target list and the higher your deal values, the more each additional matched contact is worth.
How to get started.
The process is straightforward.
-
Upload your contacts. Import from your CRM (Salesforce, HubSpot, Pipedrive), upload a CSV, or use ContactLevel's built-in contact search. You need a work email or LinkedIn URL per contact.
-
ContactLevel enriches. We build an identity profile per contact. This takes minutes, not days. You'll see the enrichment status in the dashboard.
-
Audiences sync to your ad platforms. Connect your LinkedIn, Meta, Google, or Reddit ad accounts. ContactLevel pushes the enriched audiences directly via API. Audiences update automatically as you add or remove contacts.
-
Run your campaigns. Go to your ad manager (LinkedIn Campaign Manager, Meta Ads Manager, etc.) and select the ContactLevel audience as your targeting. You keep full control of your campaigns, your creative, your budget, and your bidding.
That's it. ContactLevel provides the audience. You run the ads.
If your CRM is connected, audiences stay in sync. When a contact enters or leaves your pipeline, the ad audiences update automatically.
Go deeper.
Contact-level targeting is the foundation of contact-level advertising. Here's where each related topic lives:
Cost & distribution:
→ LinkedIn ads cost — CPM benchmarks, cost per lead, and the full effective CPM breakdown at different budget levels.
→ Cross-platform distribution — how to allocate budget across LinkedIn, Meta, Google, and Reddit for surround-sound campaigns.
Campaigns & strategy:
→ Thought leader ads — the best ad format for contact-level campaigns and how to run it.
→ Contact-level advertising strategy — persona segmentation, campaign architecture, and content-to-awareness-stage mapping.
Measurement:
→ Contact-level intent data — how identity resolution powers attribution and what it means for your sales team.