How to Double your demo bookings using LinkedIn Messaging

We’ve been doing email cold outreach for sometime, which is great and certainly helps move the needle, in terms of filling the top of the funnel with prospects and demo bookings.

However we felt we were missing the boat a little, with the biggest business social network. This article details how we 2.4x our bookings, embracing the 800lb gorilla that is LinkedIn.

Two important factors for a cold email campaign are the quality of the data and the open rate you can achieve, and these two elements are pretty well linked and correlated.

Of course there are more factors, once you’ve got the message open, but as the creators of Hyperise, we’ve got the best hyper-personalization toolkit in the business to equip us with this side of things.

As a result much of our own cold outreach optimisation has been focused on how we could improve the pre-message-open elements of the campaign.

Data, Data, Data Baby!

We’ve tried many sources of data, some more available and free-er than others, but maybe less responsive. A while back we switched to using LinkedIn as a source, which is fantastic as the level of data filtering is amazing.

Not only are we able to filter geographically and by industry, but also by company size, seniority and function.

LinkedIn has over 500 million members, so it’s a great source, but getting the data out can sometimes be problematic. Recently many LinkedIn tools have come a cropper, as LinkedIn started to police scraping tools, sometimes resulting in a LinkedIn ban.

We didn’t want to get our account banned, so we always make sure to stick within each tools suggested limits, and after four months, have had no issues.

We had the most success with, so we quickly integrated this into Hyperise and started a campaign. is a great tool, it takes your LinkedIn search results, does an email lookup for each person to find their email address and saves all the successful hits in a List, which you can create email sequences against.

We created a campaign focused on Hubspot partners, filtering:

  • Keyword: Hubspot partners
  • Industry: Marketing and Advertising
  • Company headcount: 1-200
  • Seniority level: Owner, Partner, CxO & VPs
  • Function: Marketing

With these filters, based on our 1st, 2nd and 3rd degree connections, we had just over 2,500 results. This is the perfect amount as LinkedIn only show the first 100 pages of results, and with 25 profiles per page, the maximum you get from one search is 2,500.

From these 2,500 was able to find 1,464 with an email, a 58% hit rate! This was a good result, our average is about 50%.

Of the 1,464 we got a 91% deliverability and 64% open rate, still OK, but already out of our potential 2,500, we’re down to 942…

For the campaign we were asking for either a click to a calendar booking form, or a reply to the email; combining these our response was 160, representing 17% of the audience we had actually reached.

Using the prospects email to enrich and personalise images in our sequence, like the example below, was super impactful, not only filling up our demo schedule, but getting some really nice feedback, from some super hardened and cynical marketers (if we can breakdown these tough nuts, then we knew we we’re on to a winner).

A good Problem to have, is still a Problem…

The problem though – with less than a 60% email find rate – we’re leaving almost half the value still on the table. But it gets worse, with a 64% open rate, we’re in effect only getting infront of ~30% of our addressable audience.

So we wondered what could be done to improve this, whilst still leveraging hyper-personalisation. We tried a bunch of experimentation around how to surface personalised images in LinkedIn messages (you can read more about that here: LinkedIn experimentation article).

Once we’d got a manual process working, we switch our attention to what tools could be used to notch up the volume and reduce the manual work load.

We tried OctopusCRM, We-connect,, PhantomBuster, LinkedInHelper, as well as a few other tools, but soon realised there wasn’t going to a one tool for all.

OctopusCRM, We-Connect etc, provided a great way to automate the reach out purely through LinkedIn, using a sequence of connect, then follow-up messages.

Unfortunately neither of these tools provide email discovery; ideally we wanted to be able to split out campaigns between prospects who we had an email for, so we could still cold email, and those without email, that we would outreach via LinkedIn messages.

Also having a prospects email enabled us to get more detailed with our personalisation.

With OctopusCRM, We-Connect, etc, they only surface [FIRST_NAME] and [COMPANY_NAME] type personalisation merge tags, like below:

This is still OK, as using the first name and company name, we’re still able to create enough of a pattern interrupt for personalisation to do it’s stuff and give us the uplift in CTR we’re looking for.

Maybe to the untrained eye, the above looks good, and it was, our calendar was filling up, but we thought we could go better than this, but we needed more personalisation options.

With, the platform was giving us much more LinkedIn data to play with.

You don’t need to be a math (or hyper-personalisation) genius to know that 10 options are better than 2!

The problem was though, that if doesn’t find the email, it completely ignores the record, so as mentioned with a ~50% hit rate we’re totally missing out on half the opportunity, we didn’t want to rely just on this.

Spoiler Alert, It’s PhantomBuster

So we set out to see what tool had the data collection capabilities of but with more flexibility to save regardless or whether an email was found or not.

We’d used PhantomBuster before on some other growth hacks, so knew it was powerful enough, if not a little lacking in user-friendliness.

After a bit of research we found a bunch of API’s, that we thought would do the job.

<< First we started off with the LinkedIn Search Export.

This enabled us to provide a LinkedIn search URL to be scraped and a list of profile URLs returned and saved in a Google Sheet.

Using the collected profile URLs, we used a second API to scrape the profile data, effectively replicating the process that does to create a List.

Depending on whether you have a Sales Navigator account, or a standard LinkedIn account, PhantomBuster have the API to scrape each profile.

Connecting the second API to the Google Sheet used by the first API, we’re able to automate the process without any hassle, or dev work.

Of course again, we push the results from the profile scraper back into the Google Sheet.

The great thing with PhantomBuster is its use of Google Sheets, so we’re able to daisy-chain the APIs together, with one API outputting to a Sheet, and then the next API using that as an input.

Google Sheets interlude

Google Sheets documents are very convenient. They are available through public URLs as CSVs and can import data using built-in functions.

Consider the first tab of the Sheet document as the API input tab because it will contain the search URL data that the API needs to do its job.

We’ll create a second tab, the API output tab. This tab will be filled automatically by the content of a result.csv (file created by a Phantombuster API, after its first launch.)

To do that, we’ll use the Sheet built-in function “=IMPORTDATA()” in the A1 cell of the tab. This function takes only one argument between the parentheses: the URL of a result.csv file.

The result.csv you need is available on the console page of your API.

A compatible CSV file should be available through a URL looking like this :

We just have to fill the A1 cell with this function:


When you hit “Enter”, the Google Sheet tab will load result.csv for you.

We’re done! Now your Google Sheet is composed of two tabs. The first one is the input of your API and the second is the output of this same API 🙂

You’re Back in the Room

The output we get from the PhantomBuster profile scraper is even more verbose, with 24 data points, compared to’s 10 points, this gives even more personalisation options.

Prospect.ioWe-Connect, Octopus, Quailifier etc..PhantomBuster
emailXOnly if found with lookup
phoneNumberXOnly if found with lookup


Of the 24 points of data, it’s only the final two of email and phoneNumber that rely on an additional PhantomBuster process, so our worst-case is 22 points of data and best-case 23, so either way lots of data to play with.

Phantombuster works with a couple of different email look-up services automatically. This takes the hassle out of having to programmatically do this, thanks Phantombuster!

Now we have a Google Sheet, full of lovely prospect data, brimming with personalisation options.

We can now link the Sheet to a personalised image in Hyperise, and the data in the Sheet will automatically be pulled into the image.

Quick recap:- So far our process has been:

Now that we have our personalised images linked up to our LinkedIn data, we just need to decide on how we’re sending out the campaign.

To do this we split the campaign in two;

  • Prospects who we were able to find an email for- we switched from to using a Sheet based Gmail automation tool to run the campaign, direct from the Sheet (check out our guides for the ones we’ve played with YAMM and GMass, both do a great job).
  • Prospects where we weren’t able to find an email, so now let’s focus on these…

Using our Google Sheet, we can create a filter based on the email column, whether it’s empty or not.

To keep things simple, we added two sheets, splitting the haves and the have nots.

No Email Prospects

For prospects with no email, we still have plenty of data to use to personalise, it’s just the channel to send our message that changes.

For this we jump back to PhantomBuster and use their LinkedIn Network Booster API.

I’m sure you’ve guest by now, you got it!, this API uses the same Google Sheet we’ve been using so far. We use our existing profile tab as the input for this new API 🙂

We can simply write our message, such as above, in PhantomBuster, adding in personalisation tags that match columns of our Sheet.

The API will then visit each profile URL, make a connection request and post the message.

In the above example you’ll notice that it includes the tag #HyperiseLink# this references a column in our sheet, with the Hyperise Link.

Those keen-eyed amongst you might have noticed that we’re not posting in just the image URL in the message, but a web link….

The link is to a sales web page that we’ve added the Hyperise Hyper-Campaign javascript snippet to. It’s super simple to setup, but crazy powerful.

Just copy the javascript snippet from step 2.1 of the Hyper-Campaign, and add it to your web page. If you’re using WordPress, we have a plugin that makes this process even easier.

If you’d like to use the plugin you can install directly from within WordPress (search for Hyperise within plugins), or download from here: Hyperise Opengraph Tags

The javascript does some special magic:

  1. Adds the Facebook Pixel, to enable 1-2-1 personalised image Ads
  2. Updates and personalises images on the web page
  3. Updates and personalises Text on the web page
  4. Creates a personalised link preview pane, that platforms like LinkedIn, Slack, Twitter, Facebook etc will use to show a preview of the link.

This means we can append a reference to the page URL, which references the Google Sheet ID and the Row No. and the web page will be personalised with the data from that sheet row. (eg 21247_305 being row no 305 of sheet 21247 linked to a Hyperise account.)

More importantly than the web page being personalised (which is super important), is the step before, in this case the LinkedIn message.

The LinkedIn message personalisation is even more critical, because otherwise they might not get to the web page 🙂

As you can see from the examples above and below, our web page link creates a beautifully personalised link preview pane, which is both big and clickable, great eye candy!

Adding a link in the connect message may seem a little aggressive or maybe a kinder way to say that is too eager 😉 , we thought so…

In our earlier experiments we kept our initial message just to the connection request and then followed up after the connection with a thanks message which would include the personalised link.

There’s a PhantomBuster API for that too 😉

However after experimenting, the balance of getting the link in front of more people, versus the too keen factor, tipped it in favour of including the link in the connection message.

As always it pays to A/B test even if it’s against your gut feel of what will work.

It’s all about the Benjamins

If you’re following this still, first well done, this wasn’t a walk in the park, but here is your reward…. 86 events booked in total, simply from following the above steps…

We’d been keeping a respectable pace of 100 emails per day (Mon-Fri) using, to avoid spam traps and bad domain reputation etc,

We kept that pace during June/July and in total achieved 25 booking events from just over 1,000 prospects (4,300 emails sent over a 4 step sequence).

For August/September we kept the same email cadence going, but in addition added the other half of the equation, the prospects who we couldn’t find emails for, and well…

We more than doubled our bookings (2.4x), generating 60 booking events.

The LinkedIn cadence was at a similar pace to the email, so our total performance outstripped just adding more fuel (prospects) to the fire, we weren’t just scaling, we were getting more bang for our buck!

As always there are too many factors to make a final conclusion, that LinkedIn messaging is more effective than email (eg seasonality of the months we ran this test).

However that wasn’t the point of our experiment, it wasn’t to play one channel off against another, but to enable two channels together, and that certainly helped 2.4x our results.

Prefer to watch rather than read, check out the walk-through video we created:

Have any questions..? Want to get your own campaign running and need some help…?

Book a strategy call with us and we’ll help get you started: