In this article, I want to share my experience and techniques for solving one of the most challenging tasks – LinkedIn and CRM integration.
There are three key concerns that I want to pay attention to in detail.
Concern #1: Making CRM a single, centralized place for all your contacts.
If you’re making cold outreach, you are getting contacts from Linkedin and saving them in countless spreadsheets, then sending them emails or contacting them via LinkedIn Messenger. However, it’s quite hard to manage the number of such spreadsheets. As result, in a month, you simply forget which contacts you contacted before, what channel you used, the reaction of those contacts, and their current status.
It is even more “impressive” when you are scraping the next batch of contacts, and find contacts you have already sent messages before or those who have previously unsubscribed from you, but you have no clue about that. As a result, they fall into your next outreach campaign.
The outcomes of such outreaches are doubtful – you just get a reputation for being a spammer.
The only right solution for this problem is creating a single database of all your contacts in one place, where you can merge duplicates, filter those who should not go into your next outreach campaign, etc.
Frequently, CRM is chosen to create such a database. It is worth mentioning that all work with your database happens at the contacts level, without creating deals and adding them to the sales pipeline. Thus, all filtering occurs by the fields of the “Contact” entity.
The process looks like this:
- Using filters on LinkedIn, we have made the selection of contacts that match your ICP.
- We scrape the results of this search into a CSV file. To collect the search results in a spreadsheet, you can use any software you are used to. Not so long ago, for these purposes, I switched from Phantombuster to TexAu, because it is more functional and convenient, but this is a huge topic for a separate article (follow the link https://www.texau.com/automation/extract-profiles-from-linkedin-search if you want to get search results from LinkedIn or go through the link https://www.texau.com/automation/scrape-linkedin-sales-navigator-leads-search-result if you want to get results from Linkedin Sales Navigator).
- Next, it’s necessary to meticulously clean up all contacts and variables in the results spreadsheet. More details on how to do this and why it is crucial will be described below.
- Once we have the final version of the cleaned table with correct data, we save it in CSV format and import it into the CRM. It is essential at this stage to set up correct rules for working with duplicates in CRM. By default, all CRM systems identify duplicates by the email field. We can frequently miss an email address in quite a large number of contacts, so I usually find and combine duplicates by the LinkedIn URL field. In CRMs such as Pipedrive and Zoho, this feature can be activated by contacting support. As a result, if people we have previously contacted appear in a new search, their data will be updated with the existing contact, and we will exclude them from the upcoming mailing using a simple CRM filter.
- After the file has been successfully imported, the next step is to export all downloaded contacts from CRM back to the CSV file, but, at the same time, excluding those contacts that should not be added to the next outreach campaign.You can exclude any contacts according to your needs, but here are a few segments that I recommend excluding:
- Contacts we have already communicated with less than X (days/months) ago.
- Contacts who unsubscribed from our outreach activities, or asked us not to write to them anymore. Such contacts will have the status “True” in the “unsubscribed” field.
- Contacts that are already in our Sales Pipeline and are already communicating with a company representative. Hopefully, you agree it is inappropriate to send a cold message in this case.
As a result of such export, we have a CSV file with those contacts that can be added to the LinkedIn (or email) outreach tool.
Concern #2: Most of the data in LinkedIn profiles is stored in an unprepared form for using it as a variable.
Preparing and cleaning the final data from the Linkedin search is necessary for solving two major tasks:
- Prepare and check the fields, which we will use in our process later as variables in our messages.
- Convert data to a generic view to make detailed contact segmentation possible in our CRM.
Let’s analyze these tasks in detail:
Usually, when collecting a contacts database from LinkedIn, a lot of fields have content that simply cannot be used as variables in messages.
- in the First name field, the value “Michael J”.
- in the Job Title field, “Chief Executive Officer, Board member & AI Enthusiast”.
- in the Company name field, “Delvision GmbH”.
Imagine what your “personal” message would look like with these variables!
In my experience, these three fields are the most frequently used ones as variables in emails and require meticulous cleaning before uploading a file to CRM.
Here are general examples worth paying attention to:
The second task is also correlated to the formatting of the data received after scraping LinkedIn search results. When we load the data without pre-formatting, we will not be able to make the segments we need in our CRM in the future.
For example, we want to make a segment in our CRM:
- Job title – CTO
- from Norway,
- in the Healthcare industry,
- in a particular company size.
But LinkedIn provided us with the following fields:
- Founder & Chief Tech Offcer,
- Health, Wellness, and Fitness.
If not processed beforehand, such contact will simply be missed in our filtering, even though it completely matched with our ICP. Therefore, at the stage of preparing the data, it is very important to bring the data that we will possibly need in the future for segmenting our database in CRM to the same look.
For the reasons described above, if you are using Linkmatch or any other tool that saves LinkedIn contact data to your CRM, you must manually edit all fields each time.
Concern #3: Automatically update all events from LinkedIn to CRM.
The ability to make segments in CRM based on behavioral factors of leads is crucial.
For instance, you want to make a filter for a specific ICP to whom you have already sent a connection request in LinkedIn, but they did not accept it, or a filter for those who have already connected with you on LinkedIn but have not yet responded, or those who responded but did not become an MQL lead. There are many possible options.
For such segmenting, you need to have up-to-date information on at least three fields in your CRM:
- Linkedin Contacted (True/False)
- Linkedin Connected (True/False)
- Linkedin Replied (True/False)
Indeed, it is nearly impossible to update all these actions with each new event manually, even with a minimal volume.
The solution lies in determining the right automation tool for LinkedIn outreach, which will be able to automatically send a given chain of follow-ups and send data about all actions to the CRM.
For more than ten months, I have been recommending Expandi.io for this purpose to everyone.
Over the past few years, I have tried dozens of different tools for LinkedIn. Still, only Expandi allows you to completely implement the process described in this article. It also has a high-security level, so you will not be afraid of being banned from LinkedIn. To show all the features of Expandi, it is better to make a separate article, but this is the best tool in my rating.
In this article, I will show my experience of using Expandi solely from the point of view of integration with a CRM system.
Expandi allows you to set up automatic webhook sending for the following events:
Usually, I use three main events:
- Sending an invitation
- Accepted connect request
- Lead’s response to our message
The only thing left is processing the webhook correctly and updating the data in your CRM.
I use Integromat for these purposes as a more functional and much more affordable alternative to Zapier.
You can implement this integration in Zapier if it’s more comfortable for you, but let’s see how to do it with Integromat, as I find it a more convenient and flexible tool.
- Register with Integromat.
- Go to the scenarios section and select “Create a new scenario”.
- Choose which tools we need for integration. At this stage, you have to choose Webhook and your CRM.
- Then you need to select Custom webhook and click “Add”, enter the name of our webhook and get the URL we need to send the webhook to.
- Copy this URL from Integromat.
- Go to your Expandi account (if you are not using it yet, create one first).
- There, create a new Webhook in the WebHooks section of the menu, select the Connection Request Sent event, and insert the URL that you got earlier.
- After creating a Webhook, press the “Test” button to get a data structure model in Integromat.
- Click the “+” next to Webhook and select the second module for integration; in my example, it is Pipedrive → Update a person and log in to Pipedrive via Update (add a connection).
- Then comes one of the most important points in the whole integration: determining which field we have to use to match contact from Expandi and Pipedrive to update information.
The most suitable and reliable way to do this is by Person ID for Pipedrive or Contact ID for Hubspot.
If you need this value to come in your Webhook along with all additional data, you need:
- When exporting the database from CRM, add the Person ID or Contact ID field to CSV.
- At the stage of importing this CSV file into Expandi, map the fields and assign the Person ID field to a dynamic placeholder.
This is a very important point that almost no single LinkedIn automation tool can do. Thus, we have all our custom fields sent using a webhook to the Integromat, so we can synchronize this data with a specific contact in our CRM.
- Next, choose the Person ID field in the Placeholders section, and select that according to this scenario – we need to update the LinkedIn Contacted field for this contact with “True” value.
- Next, in the lower-left corner, set the option “scheduling” to ON and select “run immediately”.
Voila! Now every invite you send will update the LinkedIn Contacted field automatically.
Similarly, we can create the rest of the scenarios for events:
- Contact accepted our connection request.
- Contact replied to our message.
Moreover, in a completely similar way, you can implement integration with HubSpot CRM and ZohoCRM. Crucially important! Do not forget to export the contact ID from the CRM before uploading it to Expandi to update the field to the correct contact later.
In case your script showed an error and stopped, some action probably happened with a contact for which the Person ID field is missing. This may be the case with contacts you have chatted with on LinkedIn and have not imported into Expandi. To avoid stopping the scenario due to such errors, it is enough to install a filter like this:
Now let’s analyze the situation where your Expandi does not have a field with a contact ID. You can cope with such situations – below, I will show you how to do this with the example of integration with Hubspot CRM.
The stage of creating a webhook is similar; there is no real difference. At the second stage, after connecting to Hubspot, we choose the Search for CRM Objects module, then we choose Object Type to Search – Contacts, and, in the Output Properties, we indicate that we want to receive a contact ID.
- Next, we indicate that it is necessary to filter by Properties. In the filter settings, we pick the search by the field in which we have written the value LinkedIn profile URL – in my case, this field is called LinkedIn profile, and we select from the data that came in the webhook, search by the value contact: profile_link.
As a result of this stage, we have the value “Contact ID” for the contact we need to update. And we select the “Update a record” function as the third step, in which we have already indicated the received Contact ID.
- After this step, below, we specify which field needs to be updated, save, launch, and voila! Everything is ready.
Integromat is an incredibly flexible tool in its capacities, much more functional than its analog Zapier. Actually, I used it to automate many processes within the company; I can call it a zero-code tool for automating any backend and working with API.
To sum up, with everything described in this article, we have a stable workflow between LinkedIn and CRM. Of course, there are places where there is still a lot of manual work required, especially at the stages of data cleaning and checking for the match of the collected contacts with our ICP. Still, on the other hand, this is the part that directly affects the results of the entire lead generation process, and it is important to keep a high level of quality contacts we plan to make contact with.
If you want to receive reviews of various lead generation and sales processes, and growth hacks using multiple tools, subscribe to my telegram channel and email newsletter so you don’t miss anything.