CRM Data Enrichment: The Easiest Way To Increase Your Sales Conversion Rates
It's hard to grow as a business when you frequently run into sales and marketing issues because you're operating on bad data.
It's safe to say your customers love it when they find out you did your research on them.
After all: Rule number one of getting your product or service sold is to focus on saying the right things to the right people.
And your sales and marketing teams would certainly love to be able to consistently trust their data.
The problem is data gaps are created throughout time and by simply operating
We get it.
Things change, sometimes not all information is collected, and information gets outdated. It doesn't matter; data gaps happen.
It can seem a bit scary and tedious to fix the gaps in your company's dataset, but it's entirely possible to automate the majority of it. Making data enrichment not only easier but obtainable for just about any business.
Data enrichment is single-handedly the lowest-hanging fruit that can deliver quick results, you just need to know how. That's the goal of this article.
First, before I explain how, I need to explain why data enrichment is important, though.
Why is data enrichment important?
Practically every business out there has a CRM. For some people, that could quite literally be as simple as Google Sheets and Gmail.
For others, that could be vastly complex and expensive solutions like HubSpot.
For the purpose of this blog post -- it doesn't matter. Regardless of what CRM you use, you're going to have data on both potential customers and customers themselves. It's a given.
Many companies, however, put a priority on data quantity over data quality and it leads to frequent gaps in data, and overall poor customer data profiles.
That can manifest into major issues for sales, marketing, and general business operations -- even accounts lost.
But, it's not like you can just throw away all of your important data and start new, so, that's where data enrichment comes in.
Plus, you can data enrichment to accomplish goals like:
- Tracking your prospects and clients to see if they change jobs, creating buying windows that can be used in your favor, or can be used to avoid losing accounts.
- Automatically does due diligence research on your behalf before you get on any sales calls. You'll have a crystal clear understanding of any given prospect or client.
- Automatically qualify prospects -- By having a detailed understanding of any given prospect you can avoid wasting time on unqualified prospects and instead focus efforts on the most likely to convert prospects in your pipeline.
Being able to enrich your data is important.
It's definitely not something that should be ignored -- the benefits are very, very real, and the best part is it's something you can immediately integrate with your business and see changes today.
How does data enrichment work?
Let's say all of the information we have on one of the prospects in our pipeline is that:
- His name is Shane Smith
- His email is "shanesmith@vice.com"
We want to enrich that profile and collect all of the information we possibly can so we can fully understand the prospect.
Data enrichment by email
Using solely his email with our Reverse Email Lookup Endpoint, we could accomplish that.
Here's an example written in Python:
import requests
import json
api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/profile/resolve/email'
api_key = 'Your_API_Key_Here'
header_dic = {'Authorization': 'Bearer ' + api_key}
params = {
'lookup_depth': 'deep',
'email': 'shanesmith@microsoft.com',
'enrich_profile': 'enrich',
}
response = requests.get(api_endpoint,
params=params,
headers=header_dic)
# Parse the JSON response
data = response.json()
# Pretty print the JSON data
pretty_data = json.dumps(data, indent=4, sort_keys=True)
print(pretty_data)
It returns a result that looks like this:
{
"facebook_profile_url": null,
"linkedin_profile_url": "https://www.linkedin.com/in/shanesmithvice",
"profile": {
"accomplishment_courses": [],
"accomplishment_honors_awards": [],
"accomplishment_organisations": [],
"accomplishment_patents": [],
"accomplishment_projects": [],
"accomplishment_publications": [],
"accomplishment_test_scores": [],
"activities": [],
"articles": [],
"background_cover_image_url": null,
"birth_date": null,
"certifications": [],
"city": "New York",
"connections": null,
"country": "US",
"country_full_name": "United States of America",
"education": [
{
"activities_and_societies": null,
"degree_name": null,
"description": null,
"ends_at": null,
"field_of_study": "Political Economy",
"grade": null,
"logo_url": "https://media.licdn.com/dms/image/D4E0BAQHUpxkQqIkqfA/company-logo_400_400/0/1664807688359?e=1685577600&v=beta&t=koo_LPuVoEt-qXb_rlPuU8nLgIw4bc45xJAuvf6uWq8",
"school": "Carleton University",
"school_linkedin_profile_url": null,
"starts_at": null
}
],
"experiences": [
{
"company": "VICE Media, Inc.",
"company_linkedin_profile_url": "https://www.linkedin.com/company/vice-media/",
"description": null,
"ends_at": null,
"location": "Brooklyn, New York",
"logo_url": "https://media.licdn.com/dms/image/C560BAQGe6dNjcvZ0lQ/company-logo_400_400/0/1620220818409?e=1685577600&v=beta&t=7PVxvujdVF-2npnt_UgFryGQCeZlwOAVPcUXkrRAaeo",
"starts_at": {
"day": 1,
"month": 1,
"year": 1994
},
"title": "CEO and Founder"
}
],
"extra": null,
"first_name": "Shane",
"follower_count": null,
"full_name": "Shane Smith",
"gender": null,
"groups": [],
"headline": "CEO and Founder, VICE",
"industry": null,
"inferred_salary": null,
"interests": [],
"languages": [],
"last_name": "Smith",
"occupation": "CEO and Founder at VICE Media, Inc.",
"people_also_viewed": [
{
"link": "https://www.linkedin.com/in/markadams-vice",
"location": null,
"name": "Mark Adams",
"summary": "Senior Vice President, Innovation"
},
{
"link": "https://www.linkedin.com/in/morganhertzan",
"location": null,
"name": "Morgan Hertzan",
"summary": "President, Global TV"
},
{
"link": "https://www.linkedin.com/in/nancy-dubuc-504012189",
"location": null,
"name": "Nancy Dubuc",
"summary": "CEO at VICE Media"
},
{
"link": "https://www.linkedin.com/in/nancy-dubuc-4849a518b",
"location": null,
"name": "Nancy Dubuc",
"summary": "CEO at VICE Media"
},
{
"link": "https://www.linkedin.com/in/bryan-terry-66b1815",
"location": null,
"name": "Bryan Terry",
"summary": "Vice President of Development - Vice TV"
},
{
"link": "https://www.linkedin.com/in/hozefa-lokhandwala-23ab317",
"location": null,
"name": "Hozefa Lokhandwala",
"summary": "Chief Strategy Officer at VICE Media"
},
{
"link": "https://www.linkedin.com/in/todd-bratches-5a4b1099",
"location": null,
"name": "Todd Bratches",
"summary": "Strategy at VICE Media"
},
{
"link": "https://www.linkedin.com/in/cory-haik-5752488",
"location": null,
"name": "Cory Haik",
"summary": "Chief Operating Officer at VICE Media"
},
{
"link": "https://www.linkedin.com/in/chelsey-phillips-capolupo-0b6079160",
"location": null,
"name": "Chelsey Phillips Capolupo",
"summary": "EA to Global CFO, Chief Strategy Officer, Chief People Officer, Chief Informations Office at VICE Media"
},
{
"link": "https://www.linkedin.com/in/nilesh-zaveri-24a31a5",
"location": null,
"name": "Nilesh Zaveri",
"summary": "Growth | COO | CFO | Strategy | Digital Media | Streaming / OTT | Broadcast | Business Development | Board Member"
}
],
"personal_emails": [],
"personal_numbers": [],
"profile_pic_url": "https://s3.us-west-000.backblazeb2.com/proxycurl/person/shanesmithvice/profile?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0004d7f56a0400b0000000001%2F20230918%2Fus-west-000%2Fs3%2Faws4_request&X-Amz-Date=20230918T201813Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=3bf332928d267a3f4775f6fc89b169e7e2e9c6d6509e5fe75f33c491ddd77ab4",
"public_identifier": "shanesmithvice",
"recommendations": [],
"similarly_named_profiles": [
{
"link": "https://www.linkedin.com/in/shane-smith-1b839489",
"location": "Greater Houston",
"name": "Shane Smith",
"summary": "System Engineer at STP Nuclear Operating Company"
},
{
"link": "https://www.linkedin.com/in/shane-smith-057a1055",
"location": "Ira, TX",
"name": "Shane Smith",
"summary": "Purchasing at Ira Pump & Supply"
},
{
"link": "https://uk.linkedin.com/in/shane-winser-6848405",
"location": "London",
"name": "Shane Winser",
"summary": "Expeditions & Fieldwork at Royal Geographical Society"
},
{
"link": "https://www.linkedin.com/in/shane-smith-4829b863",
"location": "Norristown, PA",
"name": "Shane Smith",
"summary": "Sales consultant at Heidelberg Engineering"
},
{
"link": "https://www.linkedin.com/in/shane-smith-5a298a89",
"location": "San Diego County, CA",
"name": "Shane Smith",
"summary": "Senior HVAC Service Technician"
}
],
"skills": [],
"state": "New York",
"summary": "Shane Smith is the founder and CEO of VICE, the global youth media brand. One of the industry\u2019s most respected visionaries, Smith is also a critically acclaimed journalist, and the host and executive producer for the Emmy winning news series, VICE, on HBO.\n \nUnder Smith\u2019s guidance, VICE, initially launched in 1994 as a punk magazine, has expanded and diversified to become the world\u2019s leading youth media company; operating an international network of digital channels, a television production studio, a record label, an in-house creative services agency, a book-publishing house and a feature film division.\n \nVICE's award-winning video content covers news, culture, music, technology, sports and fashion from a unique perspective tailored towards a young international audience often ignored by mainstream media. To syndicate VICE\u2019s content globally, Smith established a network of content distribution partnerships with leading platforms, including YouTube, Facebook, Twitter, HBO, and others. VICE\u2019s online presence has since exploded, with its network of channels reaching hundreds of millions of viewers a month. \n \nSmith has reported from the world's most isolated and difficult places, including North Korea, Iran, Afghanistan, Kashmir, Liberia and Greenland.\n \nSmith has been awarded numerous journalism and media awards, including the 2014 Knight Innovation Award, the Environmental Media Award, and more. VICE has also won scores of awards for its groundbreaking reporting, including an Emmy Award for Best Information Series or Special, the PEN Center 2014 Award of Honor, Television Academy Honors for socially conscious programming, and more.\n \nSmith graduated from Carleton University in Ottawa, Canada, with a BA in English Literature and Political Science. He enjoys cold white wine and long, bubbly baths\u2014preferably in tandem.",
"volunteer_work": []
},
"similarity_score": 1.0,
"twitter_profile_url": null,
"url": "https://www.linkedin.com/in/shanesmithvice"
}
Now we know:
- His country
- His degree
- His LinkedIn profile
- His position at his company
- What he does exactly
- Similar prospects
- And more (information varies depending on the profile and if you use the
deep
parameter or not)
Data enrichment by full name and company name
This time instead of email, let's say we only knew:
- First and last name
- Company name (VICE Media, Inc.)
Using our Person Search Endpoint, we could use the following Python script to look up almost all of his information:
import requests
import json
api_endpoint = 'https://nubela.co/proxycurl/api/search/person/'
api_key = 'Your_API_Key_Here'
header_dic = {'Authorization': 'Bearer ' + api_key}
params = {
'country': 'US',
'enrich_profiles': 'enrich',
'page_size': '10',
'current_company_name': 'VICE Media, Inc.',
'last_name': 'Smith',
'first_name': 'Shane',
}
response = requests.get(api_endpoint,
params=params,
headers=header_dic)
# Parse the JSON response
data = response.json()
# Pretty print the JSON data
pretty_data = json.dumps(data, indent=4, sort_keys=True)
print(pretty_data)
It returns this result:
{
"next_page": null,
"results": [
{
"linkedin_profile_url": "https://www.linkedin.com/in/shanesmithvice",
"profile": {
"accomplishment_courses": [],
"accomplishment_honors_awards": [],
"accomplishment_organisations": [],
"accomplishment_patents": [],
"accomplishment_projects": [],
"accomplishment_publications": [],
"accomplishment_test_scores": [],
"activities": [],
"articles": [],
"background_cover_image_url": null,
"certifications": [],
"city": "New York",
"connections": null,
"country": "US",
"country_full_name": "United States of America",
"education": [
{
"activities_and_societies": null,
"degree_name": null,
"description": null,
"ends_at": null,
"field_of_study": "Political Economy",
"grade": null,
"logo_url": "https://media.licdn.com/dms/image/D4E0BAQHUpxkQqIkqfA/company-logo_400_400/0/1664807688359?e=1685577600&v=beta&t=koo_LPuVoEt-qXb_rlPuU8nLgIw4bc45xJAuvf6uWq8",
"school": "Carleton University",
"school_linkedin_profile_url": null,
"starts_at": null
}
],
"experiences": [
{
"company": "VICE Media, Inc.",
"company_linkedin_profile_url": "https://www.linkedin.com/company/vice-media/",
"description": null,
"ends_at": null,
"location": "Brooklyn, New York",
"logo_url": "https://media.licdn.com/dms/image/C560BAQGe6dNjcvZ0lQ/company-logo_400_400/0/1620220818409?e=1685577600&v=beta&t=7PVxvujdVF-2npnt_UgFryGQCeZlwOAVPcUXkrRAaeo",
"starts_at": {
"day": 1,
"month": 1,
"year": 1994
},
"title": "CEO and Founder"
}
],
"first_name": "Shane",
"follower_count": null,
"full_name": "Shane Smith",
"groups": [],
"headline": "CEO and Founder, VICE",
"languages": [],
"last_name": "Smith",
"occupation": "CEO and Founder at VICE Media, Inc.",
"people_also_viewed": [
{
"link": "https://www.linkedin.com/in/markadams-vice",
"location": null,
"name": "Mark Adams",
"summary": "Senior Vice President, Innovation"
},
{
"link": "https://www.linkedin.com/in/morganhertzan",
"location": null,
"name": "Morgan Hertzan",
"summary": "President, Global TV"
},
{
"link": "https://www.linkedin.com/in/nancy-dubuc-504012189",
"location": null,
"name": "Nancy Dubuc",
"summary": "CEO at VICE Media"
},
{
"link": "https://www.linkedin.com/in/nancy-dubuc-4849a518b",
"location": null,
"name": "Nancy Dubuc",
"summary": "CEO at VICE Media"
},
{
"link": "https://www.linkedin.com/in/bryan-terry-66b1815",
"location": null,
"name": "Bryan Terry",
"summary": "Vice President of Development - Vice TV"
},
{
"link": "https://www.linkedin.com/in/hozefa-lokhandwala-23ab317",
"location": null,
"name": "Hozefa Lokhandwala",
"summary": "Chief Strategy Officer at VICE Media"
},
{
"link": "https://www.linkedin.com/in/todd-bratches-5a4b1099",
"location": null,
"name": "Todd Bratches",
"summary": "Strategy at VICE Media"
},
{
"link": "https://www.linkedin.com/in/cory-haik-5752488",
"location": null,
"name": "Cory Haik",
"summary": "Chief Operating Officer at VICE Media"
},
{
"link": "https://www.linkedin.com/in/chelsey-phillips-capolupo-0b6079160",
"location": null,
"name": "Chelsey Phillips Capolupo",
"summary": "EA to Global CFO, Chief Strategy Officer, Chief People Officer, Chief Informations Office at VICE Media"
},
{
"link": "https://www.linkedin.com/in/nilesh-zaveri-24a31a5",
"location": null,
"name": "Nilesh Zaveri",
"summary": "Growth | COO | CFO | Strategy | Digital Media | Streaming / OTT | Broadcast | Business Development | Board Member"
}
],
"profile_pic_url": "https://s3.us-west-000.backblazeb2.com/proxycurl/person/shanesmithvice/profile?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0004d7f56a0400b0000000001%2F20230918%2Fus-west-000%2Fs3%2Faws4_request&X-Amz-Date=20230918T202948Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=d98b8fa24ac29590b0d9438e83d1cd32be976ce562dd7f49903c1ac3e47ff2db",
"public_identifier": "shanesmithvice",
"recommendations": [],
"similarly_named_profiles": [
{
"link": "https://www.linkedin.com/in/shane-smith-1b839489",
"location": "Greater Houston",
"name": "Shane Smith",
"summary": "System Engineer at STP Nuclear Operating Company"
},
{
"link": "https://www.linkedin.com/in/shane-smith-057a1055",
"location": "Ira, TX",
"name": "Shane Smith",
"summary": "Purchasing at Ira Pump & Supply"
},
{
"link": "https://uk.linkedin.com/in/shane-winser-6848405",
"location": "London",
"name": "Shane Winser",
"summary": "Expeditions & Fieldwork at Royal Geographical Society"
},
{
"link": "https://www.linkedin.com/in/shane-smith-4829b863",
"location": "Norristown, PA",
"name": "Shane Smith",
"summary": "Sales consultant at Heidelberg Engineering"
},
{
"link": "https://www.linkedin.com/in/shane-smith-5a298a89",
"location": "San Diego County, CA",
"name": "Shane Smith",
"summary": "Senior HVAC Service Technician"
}
],
"skills": [],
"state": "New York",
"summary": "Shane Smith is the founder and CEO of VICE, the global youth media brand. One of the industry\u2019s most respected visionaries, Smith is also a critically acclaimed journalist, and the host and executive producer for the Emmy winning news series, VICE, on HBO.\n \nUnder Smith\u2019s guidance, VICE, initially launched in 1994 as a punk magazine, has expanded and diversified to become the world\u2019s leading youth media company; operating an international network of digital channels, a television production studio, a record label, an in-house creative services agency, a book-publishing house and a feature film division.\n \nVICE's award-winning video content covers news, culture, music, technology, sports and fashion from a unique perspective tailored towards a young international audience often ignored by mainstream media. To syndicate VICE\u2019s content globally, Smith established a network of content distribution partnerships with leading platforms, including YouTube, Facebook, Twitter, HBO, and others. VICE\u2019s online presence has since exploded, with its network of channels reaching hundreds of millions of viewers a month. \n \nSmith has reported from the world's most isolated and difficult places, including North Korea, Iran, Afghanistan, Kashmir, Liberia and Greenland.\n \nSmith has been awarded numerous journalism and media awards, including the 2014 Knight Innovation Award, the Environmental Media Award, and more. VICE has also won scores of awards for its groundbreaking reporting, including an Emmy Award for Best Information Series or Special, the PEN Center 2014 Award of Honor, Television Academy Honors for socially conscious programming, and more.\n \nSmith graduated from Carleton University in Ottawa, Canada, with a BA in English Literature and Political Science. He enjoys cold white wine and long, bubbly baths\u2014preferably in tandem.",
"volunteer_work": []
}
}
],
"total_result_count": 1
}
You could further enrich that with our Person Profile Endpoint, obtaining things like personal email and a phone number.
Are you starting to get yet how much easier it'll be for your sales team to identify prime selling opportunities with all of these enriched data points painting a much clearer picture for you?
It's not hard to understand when the proof is in the pudding.
Richer, more accurate data for your sales and marketing teams simply leads to better decisions made. Better decisions being made result in a higher conversion rate. A higher conversion rate means more money is generated.
Which is exactly why it's important to mention:
Bad data can cost you
It's hard to put a number on how much bad data costs you, but it certainly does.
IBM estimated the annual number lost on bad data at around $3.1 trillion dollars, every single year. Gartner research on the other hand estimates poor data quality results in an average financial impact of $15 million dollars per year in losses on average per organization.
Regardless of what the theoretical loss of bad data is; the fact of the matter is poor data quality results in poor productivity -- and poor productivity costs.
Bad data also tends to compound
When you're feeding your marketing and sales teams bad data, it can lead to a sluggish pipeline, and a sluggish pipeline and lead to even more issues.
Things like:
- Leads unsubscribing from your automated email campaigns because the name is blatantly wrong.
- Getting kicked off your email service provider from too many complaint rates because you're sending to the wrong email addresses.
- Your sales team consistently calls the wrong phone numbers, wasting time.
- Your buyer personas get the wrong content, so they don't buy.
All around, bad quality data can lead to poor experiences for both your potential customers and your customers.
It almost always makes sense from a time and financial perspective to invest in the data that's powering your business.
Just like it's hard to put a number on how much bad data costs you, it's hard to put a number on how valuable actionable data can be.
Who benefits the most from data enrichment?
Any business that has customers and keeps data on them. I'm guessing that applies to you.
But, in particular:
1) Companies looking for new business opportunities
It's hard to identify new business opportunities for existing clients if you don't fully understand the client.
It's a lot easier for your sales teams to expand accounts when they understand the client fully, down to events like the CTO changing recently.
2) Old businesses with long-term customers
Seriously, sometimes being around for a quite while can lead to gaps in data.
Especially when you've changed CRM systems and other systems that may not have collected the same data points.
Continuously refreshing and enriching your data so it stays up-to-date and accurate makes your data so much more valuable.
3) Any business looking to increase productivity and be more efficient, really
When your CRM is flawlessly integrated with all of your systems, your marketing and sales teams can spend more time doing what they're paid to do.
Being able to trust the data your business is operating on leads to a major boost in productivity. No longer are your sales teams wasting time calling the wrong numbers. No longer are your emails bouncing because you're sending to the wrong emails.
Getting rid of data gaps adds up to a big-picture change. It's time to get you the data you need sooner rather than later.
Does anything I just mentioned sound relevant to you?
If so, keep reading:
How to enrich your data
Finally, the how part I mentioned earlier.
Using our Proxycurl API, I'll be showing you various ways you can enrich your data with little effort and definitely no web-scraping or data science team required.
Let's start basic and assume you only have an email address and you want to branch out from there. But first, we need to make sure the email address is valid.
Validating email addresses in your CRM
It's crucial to make sure the information in your CRM is valid so that you're not wasting efforts sending emails to the wrong email addresses.
Not only is it a massive productivity waste, but it can also lead to your email service providers kicking you off for too many bounces or complaints.
With a little bit of Python, and our Disposable Email Address Check Endpoint; we can fix that issue very easily for free.
If we load up PyCharm and use the following Python script:
import json, requests
headers = {'Authorization': 'Bearer ' + 'Your_API_Key_Here'}
api_endpoint = 'https://nubela.co/proxycurl/api/disposable-email'
params = {
'email': 'colton@nubela.co',
}
response = requests.get(api_endpoint, params=params, headers=headers)
result = response.json()
print(json.dumps(result, indent=2))
It will return if the email
fed to our API is either disposable or free.
The majority of our API Endpoints consume credits to use, however, the Disposable Email Address Check Endpoint is available for free.
You could verify all of the emails in your dataset without paying us a dollar.
Now that we've covered validating your emails, let's go over our Reverse Email Lookup Endpoint.
Enriching profiles with nothing but an email address
As I mentioned earlier, using our Reverse Email Endpoint, you can resolve social media profiles from a given email address.
It works for both personal and work emails.
But, the important part, is if we specify the lookup_depth
as being deep
and enable the enrich_profile
parameter with our API, it'll return an extensive amount of data we've scraped from the LinkedIn profile that matches the email address given.
For example, if we take the following Python code and run it:
import json, requests
headers = {'Authorization': 'Bearer ' + 'Your_API_Key_Here'}
api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/profile/resolve/email'
params = {
'lookup_depth': 'deep',
'email': 'danial@nubela.co',
'enrich_profile': 'enrich',
}
response = requests.get(api_endpoint, params=params, headers=headers)
result = response.json()
print(json.dumps(result, indent=2))
Based on the email
provided, it'll return us:
- Their LinkedIn profile
- Their Twitter (or X) profile
- Their Facebook profile
If you enable the enrich_profile
parameter, it'll get us quite a bit more than that.
Such as:
- Full name
- Profile picture
- Current occupation
- Country, city, and state
- Past work experiences
- LinkedIn posts
- Personal emails
- Personal phone numbers
- Skills and interests
- And more
It should be noted, we can only provide this data if we're able to scrape it. Most of our data comes from LinkedIn. If we can't find this data for you, of course, we can't return it.
That being said if you were to change the above lookup_depth
parameter to superficial
and we were unable to find anything for the email specified in our database, the request wouldn't consume any credits. For the best results, I recommend using deep
for the lookup_depth
, particularly for work emails.
So, by this point we've accomplished:
- Verifying if an email address is valid
- Enriching email addresses, so that we now have a full name, picture, location, work experience, and more.
Now let's give you the reverse scenario. Let's say you just have a first and last name, but the data gap this time is a valid email address.
Enriching data when you don't have a valid email
This one is also the same as I showed you earlier, but I'll show you a different example of using our Person Lookup Endpoint.
Basically, we can look up almost all of the same data points as above with nothing but a full name, and company name.
Here's how:
import json, requests
headers = {'Authorization': 'Bearer ' + 'Your_API_Key_Here'}
api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/profile/resolve'
params = {
'company_domain': 'convertkit.com',
'first_name': 'Nathan',
'similarity_checks': 'include',
'enrich_profile': 'enrich',
'location': 'Boise',
'title': 'founder',
'last_name': 'Barry',
}
response = requests.get(api_endpoint, params=params, headers=headers)
result = response.json()
print(json.dumps(result, indent=2))
In the above example, I specified:
- ConvertKit.com, a popular email service provider
- The founder role, and the first and last name of the founder
Of course, with the enrich_profile
property and it found the results for us. Returning all of the same parameters as above.
If it was available, the above code would have returned a personal_email
, however, we could also try getting a work email address using the LinkedIn profile returned.
Obtaining work email addresses with a LinkedIn profile URL
With our Work Email Lookup Endpoint, we can look up emails that are verified to be valid personal work emails (not catch-all or role-based). The emails returned come with a 95%+ deliverability guarantee.
For example:
import json, requests
headers = {'Authorization': 'Bearer ' + 'Your_API_Key_Here'}
api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/profile/email'
params = {
'linkedin_profile_url': 'https://www.linkedin.com/in/nathanbarry/',
'callback_url': 'https://webhook.site/6118cf1d-6833-4087-acf1-e3c67cebc14c',
}
response = requests.get(api_endpoint, params=params, headers=headers)
result = response.json()
print(json.dumps(result, indent=2))
Will send the results of that query to a webhook, which will then display their work email address if we are able to scrape it.
In this case, we were, and it looks like the following:
We've done enrichment on people, now let's do company enrichment.
Enriching a company profile
Using our Company Lookup Endpoint, we can run the following:
import json, requests
headers = {'Authorization': 'Bearer ' + 'Your_API_Key_Here'}
api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/company/resolve'
params = {
'company_domain': 'convertkit.com',
'company_name': 'ConvertKit',
'company_location': 'us',
'enrich_profile': 'enrich',
}
response = requests.get(api_endpoint, params=params, headers=headers)
result = response.json()
print(json.dumps(result, indent=2))
In this case, I'll go ahead and show you the full result since it's a public company:
{
"url": "https://www.linkedin.com/company/convertkit",
"profile": {
"linkedin_internal_id": "10816227",
"description": "The email marketing platform for creators. We exist to help creators earn a living. \ud83d\udd25 Support: help.convertkit.com \ud83d\udc40 Status: status.convertkit.com",
"website": "https://convertkit.com/",
"industry": "Software Development",
"company_size": [
51,
200
],
"company_size_on_linkedin": 126,
"hq": {
"country": "US",
"city": "Boise",
"postal_code": "83701",
"line_1": "750 W Bannock St #761",
"is_hq": true,
"state": "ID"
},
"company_type": "PRIVATELY_HELD",
"founded_year": 2013,
"specialities": [],
"locations": [
{
"country": "US",
"city": "Boise",
"postal_code": "83701",
"line_1": "750 W Bannock St #761",
"is_hq": true,
"state": "ID"
}
],
"name": "ConvertKit",
"tagline": "The creator marketing platform helping creators earn a living online.",
"universal_name_id": "convertkit",
"profile_pic_url": "https://s3.us-west-000.backblazeb2.com/proxycurl/company/convertkit/profile?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0004d7f56a0400b0000000001%2F20230913%2Fus-west-000%2Fs3%2Faws4_request&X-Amz-Date=20230913T182041Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=17f034173a1064244ae5f0c0b57d8f67aee169c97dd8c4c7fdab6e8c796d8225",
"background_cover_image_url": "https://s3.us-west-000.backblazeb2.com/proxycurl/company/convertkit/cover?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=0004d7f56a0400b0000000001%2F20230913%2Fus-west-000%2Fs3%2Faws4_request&X-Amz-Date=20230913T182041Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=69986c92b9631600a7301b3ceeb096540baeb8e11182073c0cd6b483c076bb31",
"search_id": "10816227",
"similar_companies": [
{
"name": "Zapier",
"link": "https://www.linkedin.com/company/zapier",
"industry": "Software Development",
"location": "San Francisco, CA"
},
{
"name": "Uscreen",
"link": "https://www.linkedin.com/company/uscreen-tv",
"industry": "Software Development",
"location": "North Bethesda, Maryland"
},
{
"name": "Loom",
"link": "https://www.linkedin.com/company/useloom",
"industry": "Online Audio and Video Media",
"location": "San Francisco, California"
},
{
"name": "Hotjar",
"link": "https://mt.linkedin.com/company/hotjar",
"industry": "IT Services and IT Consulting",
"location": "St Julian's , Malta"
},
{
"name": "Buffer",
"link": "https://www.linkedin.com/company/bufferapp",
"industry": "Software Development",
"location": "San Francisco, CA"
},
{
"name": "Toggl",
"link": "https://ee.linkedin.com/company/toggl",
"industry": "Software Development",
"location": null
},
{
"name": "Intuit Mailchimp",
"link": "https://www.linkedin.com/company/intuitmailchimp",
"industry": "Software Development",
"location": "Atlanta, GA"
},
{
"name": "MailerLite",
"link": "https://www.linkedin.com/company/mailerlite-international",
"industry": "IT Services and IT Consulting",
"location": "San Francisco, California"
},
{
"name": "Circle",
"link": "https://www.linkedin.com/company/circleco",
"industry": "Software Development",
"location": null
},
{
"name": "Dribbble",
"link": "https://ca.linkedin.com/company/dribbble",
"industry": "Design Services",
"location": null
}
],
"affiliated_companies": [],
"updates": [],
"follower_count": 10924,
"acquisitions": null,
"exit_data": null,
"extra": null,
"funding_data": null,
"categories": null
}
}
So we can get some key information with one simple query, such as:
- Full name
- What they do
- Address
- Industry
- Employee count
- Similar companies
- Beyond
Not bad.
How to automate any of these API queries
Okay, I think you're starting to get you can enrich just about any person or company with our API. Let me show you how to do it faster.
Automating converting LinkedIn profiles into enriched profiles with work email addresses
Let's take our work email example from earlier where we fetched Nathan Berry, the founder of ConvertKit's email information.
This time instead of doing it one at a time, let's do five at a time with the following Python code:
import json
import requests
import csv
# Define headers and API endpoint
headers = {'Authorization': 'Bearer ' + 'Your_API_Key_Here'}
api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/profile/email'
callback_url = 'https://webhook.site/6118cf1d-6833-4087-acf1-e3c67cebc14c'
# Read LinkedIn profile URLs from CSV file
with open('linkedin_profiles.csv', 'r') as file:
reader = csv.DictReader(file)
for row in reader:
linkedin_url = row['linkedin_profile_url']
# Define parameters for the API request
params = {
'linkedin_profile_url': linkedin_url,
'callback_url': callback_url,
}
# Make the API request
response = requests.get(api_endpoint, params=params, headers=headers)
result = response.json()
# Print the result
print(json.dumps(result, indent=2))
Again, with our Work Email Lookup Endpoint, we receive the response to a given webhook, so I've gone ahead and used Webhook.site here.
Before you run this code, you'll need to create a .CSV
in the same folder as your Python script.
It should be named linkedin_profiles.csv
and formatted exactly as follows:
linkedin_profile_url
https://www.linkedin.com/in/nathanbarry/
https://www.linkedin.com/in/tomkulzer/
https://www.linkedin.com/in/clatemask/
https://www.linkedin.com/in/russellbrunson/
https://www.linkedin.com/in/dkurzius/
After running the above Python script, we receive the following response back at our webhook:
{
"email": "dan@mailchimp.com",
"status": "email_found",
"profile_url": "https://www.linkedin.com/in/dkurzius"
}
{
"email": null,
"status": "email_not_found",
"profile_url": "https://www.linkedin.com/in/clatemask"
}
{
"email": "tom.kulzer@aweber.com",
"status": "email_found",
"profile_url": "https://www.linkedin.com/in/tomkulzer"
}
{
"email": "nathan@convertkit.com",
"status": "email_found",
"profile_url": "https://www.linkedin.com/in/nathanbarry"
}
{
"email": "russell@clickfunnels.com",
"status": "email_found",
"profile_url": "https://www.linkedin.com/in/russellbrunson"
}
So, it was able to find 80% of the emails we wanted to find, and we could easily load this .CSV
up with thousands of rows of emails to enrich our data.
We could also do the same thing a little bit differently with any of our endpoints -- it's entirely possible to automate the enrichment of all of your data.
Automating enrichment by email
Using our Reverse Email Lookup mentioned earlier, we can also automate CRM enrichment by simply exporting a list of all of your emails to a .CSV
.
So, go ahead and export all of the email addresses you're interested in enriching into a .CSV
in the format of:
email
tom.kulzer@aweber.com
nathan@convertkit.com
russell@clickfunnels.com
dan@mailchimp.com
Afterwards, save the file as input_emails.csv
and create a new Python file with the following code:
import json
import requests
import csv
# Your API key
API_KEY = 'Your_API_Key_Here'
# API endpoint
api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/profile/resolve/email'
# Headers for the API request
headers = {'Authorization': 'Bearer ' + API_KEY}
# Input and output CSV file names
input_file = 'input_emails.csv'
output_file = 'enriched_data.csv'
# Read email addresses from the input CSV file
with open(input_file, 'r') as csvfile:
reader = csv.reader(csvfile)
email_addresses = [row[0] for row in reader]
# Open the output CSV file for writing
with open(output_file, 'w', newline='') as csvfile:
fieldnames = [
'email', 'full_name', 'profile_picture', 'current_occupation',
'country', 'city', 'state', 'linkedin_profile', 'twitter_profile',
'facebook_profile', 'past_work_experiences', 'linkedin_posts',
'personal_emails', 'personal_phone_numbers', 'skills_interests'
]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
# Loop through each email address
for email_address in email_addresses:
params = {
'lookup_depth': 'deep',
'email': email_address,
'enrich_profile': 'enrich',
}
response = requests.get(api_endpoint, params=params, headers=headers)
result = response.json()
# Extract data from the API response
profile = result.get('profile', {})
experiences = profile.get('experiences', [])
past_work_experiences = '; '.join([exp.get('title', '') + ' at ' + exp.get('company', '') for exp in experiences])
writer.writerow({
'email': email_address,
'full_name': profile.get('full_name', ''),
'profile_picture': profile.get('profile_pic_url', ''),
'current_occupation': profile.get('occupation', ''),
'country': profile.get('country_full_name', ''),
'city': profile.get('city', ''),
'state': profile.get('state', ''),
'linkedin_profile': result.get('linkedin_profile_url', ''),
'twitter_profile': result.get('twitter_profile_url', ''),
'facebook_profile': result.get('facebook_profile_url', ''),
'past_work_experiences': past_work_experiences,
'linkedin_posts': '', # This data is not provided in the shared response
'personal_emails': '; '.join(profile.get('personal_emails', [])),
'personal_phone_numbers': '; '.join(profile.get('personal_numbers', [])),
'skills_interests': '; '.join(profile.get('skills', []))
})
print(f"Data exported to {output_file}")
Once you run the Python script, it'll take the emails supplied, enrich them, and export them to enriched_data.csv
in the same folder as your Python script.
Here's what it'll come out looking like:
Almost every CRM would allow you to import that .CSV
, but you could of course change how it's inputted or outputted and integrated with your CRM.
That's just an example of one way of doing it.
Here's what we covered
By this point, we've covered the following:
- Verifying if an email address is valid
- Enriching email addresses
- Enriching social media profiles (if you don't have an email)
- Obtaining work email addresses through a LinkedIn profile URL
- Enriching a company profile
- Automating converting LinkedIn profiles into enriched profiles with work email addresses
- Automating enrichment by email
Whew, that's quite a bit...
Now, you have three options
-
If you're a decision maker but not technically inclined and have no idea what this blog post really said; but you understand the concepts and the power of data enrichment, share this with a software developer on your team so that they can implement it for you.
-
If you're a decision maker and you are technically inclined, you can take what you've learned from this blog post create your Proxycurl account here, and get started enriching your data today.
-
If you're a decision-maker at a large company, focused on giving your sales teams access to rich data but don't want to invest the time or resources in-house, or are just generally unsure if we're right for you, simply reach out to us at "hello@nubela.co" with more information about your individual needs -- we'll be able to let you know if we're a good fit for your business. Worst case, we can at least point you in the right direction.
P.S. a bonus fourth option: if you're a decision maker and you do not have a software developer on your team, try Sapiengraph - a product with Proxycurl's powers all within Google Sheets - no coding required.
Best of luck enriching your data, and thanks for reading!