Linkedin Reply Detection

Linkedin Inbox Scraper

Description

Detect replies to Linkedin messages, turn off future replies and push leads into the CRM

Platform

Parabola.io

Schedule/Trigger

6 am daily

1. Enrich and Join the Phantombuster Data

We start the Linkedin Inbox Scraper workflow by joining the Session Cookie tab and the Phantombuster ID tab of the Session Cookie Rotation Sheet. Next we use the Phantombuster IDs and the file names to enrich Phantombuster's API three times 1. To see who we sent a connection request to 2. To see who accepted our connection request 3. To see a list of the latest messages in our inbox. We do this using API Enrichment steps.

Use the "Sheet CSV" file URL from the Session Cookie Rotation Sheet for the Network Booster API and the "CSV" file URL from that same Sheet for the Contacts Extractor and Inbox Scraper APIs.

We start by renaming the columns to the standardized headers. Then we create a unique message column by merging the Linkedin (written) column with the Message column. There may be multiple messages from one person, so de-duping by message would combine people who went through the same sequence and had the same first name, but weren't the same person. Removing duplicate rows by the Linkedin (written) column would result in only one message per person, cutting off any time multiple messages happen. Creating a UniqueMessages column that merges the Message column and the Linkedin (written) column and then de-duping gives us each unique message for each unique person.

Next we Join the data from the three API Enrichment steps together, allowing us to put the message responses and the detailed contact fields such as skills, Linkedin company pages, websites, emails, etc into a single table.

Then we Compare dates of the Last Message Date column with the current timestamp and use a Row filter for responses that happened in the last 24 hours. Since the workflow runs once per day, we get all the people since the last time it ran each time.

2. Join the Message Sender Data to the Phantombuster Data

We import the Linkedin Message Follow Up Rotation Sheet, keep the relevant historical message data, and check it against the Contacts Extractor data.

We then join the message history data from the Linkedin Message Sender Follow Up Rotation Sheet with the contact, company, and reply data from the Phantombuster enrichment in step 1.

3. Reply Detection

After joining the Phantombuster data with the Message Sender Follow Up data we will use an If/Else step to say that if the is Last Message From Me column contains false, create a column called If/Else and put an "X" in the column.

Next we use a row filter to keep rows where the If/Else column contains X. This effectively removes messages we sent from the inbox scraper and only receives messages we didn't send.

Next we add the Reply Step column. The Linkedin Message Sender workflow supports up to 3 follow ups after connecting. The Linkedin Message Sender Follow Up Rotation Sheet updates each message column every time a new message is sent. IE: After Message3 is sent the Message3 column in that Sheet will be filled in with the message that was sent. Prior to it being sent the Message3 column would be blank.

We use a Find and Replace step to find blank spaces in each of the Message columns and replace it with "|||."

Next we apply the Reply ID using an If/Else step. This gives a unique identifier with the platform name, the campaign name, the filter Id, the outreach stage, if they were in A/B, and what step of the sequence they replied on.

Reply ID: {Platform}-{Campaign Name}-{Filter ID}{Stage}{A/B}{Reply Step}

Then we remove the current Replied column and add a new Replied column with an "X" in it. This is used to turn off future messages after they reply. We also add a Reply Date column with the current date.

4. Determine if the Contact Already Exists

We push contacts who replied into the CRM. To do this we must determine if they already exist in the CRM. We're using monday.com as a CRM, but powering the integrations with Hubspot since they have a two way sync and Hubspot has a powerful integration library. This sync lets me get the features and visual aspects I want from monday.com, while being able to access all the integrations.

We are going to search Hubspot using an API Enrichment step to find a person by their name. The Full Name column in the workflow can include middle names/initials, which can create problems when searching Hubspot. To get around this issue, we are going to split the Full Name column twice using a Text Extract step. First we're extracting all the characters before the first space (first name) and then a second Text Extract step on all characters after the last space (last name). Then we use a Column Merge step to combine the first name and last name columns we just created into a Full Name Short column that does not have any middle names/initials.

We can then remove the extra columns created by the Text Extract and use an API Enrichment to search Hubspot by the Full Name Short Column. We then will use a JSON Flattener on the results to make them readable. We rename the api.contacts.properties.pulse_id.value to Pulse ID. Contacts with a Pulse ID already exist in the CRM, while contacts without a Pulse ID do not yet exist in the CRM.

5. Sentiment Analysis

We're next going to figure out if their reply was a positive or negative reply. We'll run a Sentiment analysis on the Message column that will read the text and determine how positive or negative it was based on a scale of -100 to 100.

Next we'll use an If/Else step to create the Sentiment column. Any scores higher than -15, messages containing @ or questions get labeled as positive and all other replies get labeled as negative.

6. Prepare Data for Export

We'll import the Email Campaign IDs tab and the monday Type Statuses tab of the Session Cookie Rotation Sheet and import the Search Links Sheet and join them together and then join them with the main table by Query / Search URL This gives us all the contact data and additional information like which Mailshake campaign they are in.

Then we will use the Magic Cleaner to remove invisible characters that can break importing into third party apps. Next we will split the Email column into a Personal Email and Business Email column using If/Else steps.

We'll use an Insert Static Columns to add potentially missing columns if the workflow runs with blank data and then Rename the unique Hubspot ID as VID. We will then assign the Pipeline column using an If/Else step. Similarly we create a DM column for decision maker using an If/Else step where if their Seniority Level is CXO, Director VP, or Owner then DM is "Yes," if their Seniority Level is Manager then DM is "Likely / Influencer," if their Seniority level is intern then DM is "No," and if Seniority Level is Senior then DM is "Unknown."

We create an Interest Level column using an If/Else step, where if the Sentiment analysis is less than 20 it is set to "Low," 20 to 50 is set as "Medium" and over 50 is set as "High."

7. Export Reply Detection Results to Sheets

All people who replied now have an X in their Replied column. When the Message Sender workflow runs, this X is used to filter out contacts who shouldn't be messaged.

We'll use a Stack Tables to merge the old Linkedin Message Follow Up Rotation Sheet with the new replies coming in. We'll use a row filter on the old data to clear all the data from the table and then stack the tables in this order:

  1. Row filter with blank data to keep structure of the Message Follow Up Rotation Sheet.

  2. New replies coming in

  3. Message Sender Follow Up Rotation Sheet

This allows us to keep the structure of the old table, while prioritizing new data in the de-duplication process. To learn more read the "Maintaining the Format of One Table, While Needing the Opposite Table to be Stacked First" in the Stack Tables guide for Parabola.

Then we Remove Duplicate Rows and export back to the Message Sender Follow Up Sheet. This accomplishes two things:

  1. Records replies

  2. Adds a filter to prevent future messages

8. Remove Replied Contacts from Message Sender Sheets

We will check each of the individual Message Sender Sheets against the people who replied. The previous step prevented new messages from going out to future people. This step removes existing messages that were scheduled to someone who replied.

9. Export Contact and Company Data to CRM

We will filter for contacts who did not previously exist using a Row Filter step to remove anybody that has a Pulse ID.

Next we use a Row Filter on the Sentiment column to filter for positive replies. Those replies and the contact and company information associated with them is sent to Zapier to create a new contact using an API Export. This contact is then synced to monday.com.

Linkedin Reply to Hubspotmonday.com/Hubspot Sync

10. Update Parvenu Inbox Scraper

We use a List Contains step to check the new data against the Parvenu Inbox Scraper Sheet to find that that wasn't already in the Sheet. Then we Rename UniqueMessages as Filter, use a Stack Tables and De-Dupe steps before Sheets Export back to the Parvenu Inbox Scraper.

.

Last updated

Was this helpful?