Nexweave : Unique Outreach Campaigns With Personalization Images & TexAu
This tutorial requires the TexAu cloud version.
Personalization images are an excellent way to create a unique customer experience and boost your marketing outreach efforts when prospecting on LinkedIn.
Using personalization images in your email marketing campaigns increases your response rate by 55% compared to regular messages after connection requests.
In this tutorial, we will build an automated lead generation machine. For this, we will combine LinkedIn automation, Nexweave image personalization, and Gmail cold emails outreach. And the glue orchestrating all this: webhooks!
For the latter, we will use Pabbly Connect. You can reproduce the same with either Zapier, Integromat, or Integrately.
You can see this automation workflow in this webinar with marketing personalization experts & TexAu official partners Selle Evans & Roman Stolyar:
Here's what it looks like:
Scrape all the posts containing a target keyword. For example, it could be someone complaining about your competitor or a job offer for freelancers. Then, we will scrape the post content, thumbnail, and profile URL of the poster.
Scrape the posters' profiles. This automation will give us a 360° view of our target and the most extensive number of variables we will reuse in our flow.
Find their emails using First Name, Last Name, and Company Domain for each.
Send them a connection request.
Wait three days to let them accept our connection request.
Check if they connected with us or not and filter out those who didn't connect
Prepare your Nexweave personalized image template. We will include it in the first LinkedIn personalized message after the connection request is accepted. Then also reuse it in our "thank you" email.
Send our first LinkedIn personalized message with a Nexweave image or video template (called a Nexweave Experience).
Wait one day before sending an email following up to thank profiles for connecting with us.
Verify the email validity and filter ONLY the valid ones to reuse them later in our cold emails.
Pass the variables via webhook requests to Pabbly (Full Name, First Name, Profile URL, Post Content variables, and Nexweave Image Link).
Push LinkedIn posts to Google Sheet.
Send LinkedIn profiles to another Google Sheet.
You'll find many jobs posted on profiles' LinkedIn Feed instead of the LinkedIn Jobs section.
Usually, those posts are made by:
- HR people
- HR outsourcing agencies & consultants
- Internal employees co-opting their LinkedIn relations
- People seeking freelancers
So let's make a LinkedIn search filter for this using the query "Hiring Senior Designer", the more specific, the better:
You will notice both people, AND company profiles show up in this search filter.
How can we separate those to focus only on individual profiles that post those job offers?
There is no way to do so to solve this using the LinkedIn default filter option.
But thankfully with TexAu, you will still be able to do it! 😛
💡Note that there is no location option in this search filter contrary to Sales Navigator granular filters. Additionally, you can still add the location as a keyword in your search query (ex: "hiring senior designer" AND "Los Angeles").
Another use case is to target your competitors' user base using their brand name as a keyword:
But for this, you will have to filter out employees of that company to prevent outreaching them. You can also do this in TexAu, don't worry 😉.
You can find many other creative use cases like that. Try to find potential pain points expressed by your target audience and leverage those. This could revolve around shared interests too, or a topic they posted about. Be creative depending on your business niche and play with multiple keyword variations until you find the perfect search filter for your business.
In our scenario, let's pretend we are a recruiting agency. Here we want to outreach all the LinkedIn profiles who posted job offers on their feed. That way, we could maybe connect and propose potential candidates for application.
Now, what if you could scrape each post's thumbnail and text content from each post. You could then reuse those in your outreach messages with a dynamic image showing:
- Profile first name
- Profile picture
- Company logo
- Picture of the poster
Sounds crazy, duh? That's exactly what we will do to generate our dynamic picture.
So we will insert these personalization images in the first LinkedIn message after the connection request. Then send the message ONLY IF our prospect accepts it.
Finally, we will insert the same dynamic image in a follow-up email to thank them for connecting with us.
First, we need to set up the CNAME (Canonical Name Record) option to serve our personalization images directly from our domain. For Nexweave video templates and campaigns, the process is the same. You will also have the possibility to create an additional CNAME for it.
Connect to your Nexweave account and go "My Account/White label/Domain & Login" menu on the dashboard left tab.
After that, we will build and configure the image personalization template for our tutorial.
Go to the image/GIF template section. Here, you have two choices: choose any public templates as starting point or make your own in the "My Templates" section.
Nexweave public template library already has a wide choice of high-quality images and GIFs to start from.
In our case, we will start by doing our own to grasp the image editor 😉.
Go to "My Template" then click on "Create New Template":
Here you can choose between multiple canvas dimensions. The default size is 500×500 square pictures.
In our case, we will choose a resolution of 16:9 that best fits our image template.
Choose a background photo that you previously uploaded from the media gallery:
Here you'll be able to crop your uploaded picture. Use right-click and maintain shift key pressed to expand the corners of the grid. This will preserve the original ratio you choose for your canvas (16:9 here).
Once you set the correct cropping area and position, just hit the orange "crop" button:
Here's what our dynamic image will look like:
Nexweave will allow previewing your template using your default account username.
You will find all the variables from each element present on the canvas on the right panel. Those variables will be "fed" from LinkedIn data we scrape with TexAu.
💡 Note that you can label those variables the way you want using a memorable name.
First, in the "Design Experience" section, click on the image icon located on the right in the components tab. Here, add a blank picture placeholder and place it the way you want:
Now click on the orange hamburger menu in the left corner of the image:
You can send the picture to the front or back or duplicate it here. Like any image editor would do:
Now, while still on the image, click on the "properties" tab and expand the "designer tools" accordion below it:
Here you will be able to add a border, blur, set the opacity, ratio, radius, size, and rotation of your image:
Now, let's add some personalized text placeholder to our image. By default, Nexweave will again use your account credentials to preview the text personalization using your name (USERNAME variable in brackets):
Now, hop in the "Enlist Variables" tab to set up our custom variables. Those variables will receive TexAu variables to generate personalization images for each LinkedIn profile dynamically:
Here are the variables we will select:
- FIRST_NAME: First name of the target LinkedIn profile
- POSTIMAGE: Post image scraped from each LinkedIn profile feed
- POSTCONTENT: Text content below the post image
- PROFILEPIC: Profile image thumbnail
On the right of each variable you define, you'll find the "Fallback Values". Those will be the default values Nexweave if TexAu cannot find the necessary profile data to personalize your image.
Now, let's jump to the last Section of our personalization images settings: "Define Meta".
Here you'll find:
- A summary of all the variables of your image
- The template ID we will insert in TexAu
- The name, description, and category of your template for internal project organization purposes inside Nexweave
- On the right, critical setting: Open Graph (OG) Tags of your image. That's what will be under your image when shared on LinkedIn. Here, title and description.
- We will take the [POSTCONTENT] variable mentioned earlier (text content under each post showing the job ads) as the image description.
- We will take the [FIRST_NAME] variable mentioned earlier (profile first name) for the title.
Finally, you will generate a unique API Key. That way, you will be able to integrate Nexweave with TexAu and pass those variable parameters to your personalization images:
Just give this key a memorable name, you can leave the description field empty:
Very last: copy all the variable names we defined above and your Nexweave API Key in a safe place. We will need those in the second part of our tutorial.
Here we tested this flow live that you can see in the Nexweave video event posted above.
Nexweave also has its own Facebook community. You can join here:
In this live experiment, I asked all the participants to post an exact piece of text on their profile feed. That way, I could easily find their posts and scrape them using a LinkedIn search filter:
Let's launch our first automation module: LinkedIn Content Search Extractor.
This automation will extract the post content search filter.
You can find those posts typing this query URL in your search bar:
I also asked the participants to include a random post image thumbnail:
Enter your LinkedIn connection cookie and the LinkedIn search query above for this first automation.
Then add the number of posts you want to scrape. Start with a few posts when you want to test your workflow, like 5 or 10.
Let's add the second automation module: Scrape a LinkedIn Profile.
Here, we will scrape the first name, profile image URL, and the company domain from each profile:
Same as before, enter your cookie and chain this automation with the previous one using the "profileUrl" variable. This will dynamically collect all the poster profiles listed on the content search filter.
Instead of selecting company posts, we will focus on individual profiles’ posts.
If you have a premium account, check the corresponding box too.
Chain the 3rd automation module: Find An Email Address
Again, we will use the detailed profile information given by the "Scrape a LinkedIn Profile" automation.
We will map three variables from it:
- firstName: profile First Name
- lastName: profile Last Name
- companyDomain: profile Company Domain
The above data will help TexAu to find the correct pattern email if the domain is present on the profile's company page.
Let's add our connection request automation module at the 4th step:
Again, we will add dynamic pictures in our LinkedIn message using the variables from the previous "Scrape a LinkedIn Profile" automation in our workflow:
Add a three or five-day delay, so our prospects have the time to accept our connection request:
After the above delay, we will check if the prospects we send those invitations connected with us or not:
This time, we will link that automation to the previous one using the "url" variable from the connection request automation module before it. We could have also used the "profileUrl" variable from the "Scrape a LinkedIn profile" automation if we wanted. Both are valid and would work here.
Last, the purpose of this connection check is indeed to filter and process only the profiles that accepted our connection request. So let's add a filter using "connected" as the key variable and the boolean condition "is true":
To insert a Nexweave dynamic image in your outreach campaign with TexAu, you must insert the Nexweave automation module BEFORE the message module.
IMPORTANT: you CANNOT post images at the connection request level (they won't display), only in regular LinkedIn chat messages. For LinkedIn Sales Navigator, no pictures will show either.
Now let's copy to clipboard our Nexweave image template ID:
It's easy to copy variables and IDs in Nexweave. Just click on those file icons on the right:
Now on TexAu, we will make the correspondence between Nexweave variables and TexAu variables.
Paste the Nexweave template ID we copied earlier in the corresponding fields in TexAu.
Then let's map TexAu and Nexweave variables together.
VERY IMPORTANT: The name of the Nexweave fields you create in TexAu MUST have the exact spelling as the Nexweave variables.
- firstName (from Scrape a LinkedIn Profile): prospect's first name
- textContent (from Search Content Extractor): text of the post
- imageUrl (from Search Content Extractor): thumbnail of the post
- profilePicture (from Scrape a LinkedIn Profile): profile thumbnail
- companyDomain (from Scrape a LinkedIn Profile): company domain
There are two ways you can retrieve and use a company logo image in your Nexweave template:
- Scraping its media URL on LinkedIn profiles
- Using the Clearbit free logo API
So here, we will display the company logo image using a "fallback" image. This will ensure that if Clearbit doesn't find a logo image, we will fall back to our company logo image.
The Clearbit URL always starts the same. You have to append the company domain URL (without brackets) to it to get in return the company logo picture:
How does it translate in Nexweave? You can do precisely the same by creating two variables, one using the other as input.
Here we will take the DOMAIN variable as the input of the COMPANYLOGO variable. When using a variable in Nexweave, it has to be surrounded by brackets [ ] like this:
To illustrate the example above, I used the TexAu domain texau.app as the fallback value:
Here, only the [COMPANYLOGO] variable will display the Clearbit company logo we choose as a fallback image in our template.
Below are an example of the fallback values you can use in your Nexweave template.
We will apply this fallback image if TexAu doesn't return any data for the corresponding field. For example, this could happen with a LinkedIn profile without a company logo or thumbnail image. But, of course, those fields can be empty too. So, for instance, it doesn't require a fallback image if no LinkedIn profile thumbnail is present. That way, no picture will show if a profile hasn't any thumbnail.
Finally, for the DOMAIN and COMPANYLOGO fields, we will follow the same logic as above. But this time, we will use TexAu "companyDomain" variable from the "Scrape a LinkedIn Profile" automation.
We configured the Nexweave automation module at the previous step. Now we can insert our personalized image in our first LinkedIn follow-up message after the connection request is accepted.
You can use this in 2 ways:
On LinkedIn or other social network platforms, there are generally two ways to post dynamic images.
In this case, the link is visible. In addition, it will reveal a long URL containing the personalization URL parameters in the message (first name, last name, company domain, etc...). That's the trade-off.
Some people still prefer those because it allows displaying the personalization images in their full width.
The recommended dimension for those direct link images is 846×442 pixels. This cropping factor is the image dimension that gives the best results. You will also need an image editor to crop the image to this exact measurement (canvas size).
In this case, the image link won't be visible. But the drawback here is the image will show in a smaller 1:1 ratio square embedded canvas. At least it won't reveal our "magic trick" instead of showing the URL parameters of the image to our prospects 😛.
So in our case with Nexweave, we will add the image link URL as a variable in TexAu.
Note that title and description Open Graph parameters at the bottom of the image will only work with the direct link sharing option. It won't work with embedded images.
Nexweave image direct link in TexAu:
Note that you can display images shared as a direct link with Nexweave, but sometimes you must append the "https://" prefix to the Nexweave “image_link” variable to make it work.
Nexweave embedded image
For embedding the image, place your Nexweave variable in the "IMAGE URL" box instead:
Then, depending on the scenario, you can either use the video_link, image thumbnail_link, or a simple image_link as a variable.
The process for using those in TexAu is the same.
Finally, let's add reply detection in the mix to stop the automation as soon as the prospect answer :
Now, after sending a connection request and a first message, let's wait another 1 or 2 days.
After that, we will outreach our LinkedIn prospects via email this time. How? By using webhooks!
Here we will verify the validity of the email patterns TexAu found earlier.
For this, we will use the Email Verifier module:
Here we will call back the email variable from the Email Finder module to test those emails:
We need to be mindful of our email deliverability and spam score here.
That way, we will only send valid emails in the next step for sending cold emails.
For this, we will harness TexAu's powerful filters using conditions:
- Compare key: "verified"
- Condition: (Boolean) Is true
Note: You need to be on the TexAu cloud version behind a proxy to access the webhook feature. This feature is not present on the desktop app.
Using tools like Zapier or Pabbly Connect is a cost-effective way to send cold emails at scale if you don't have any email outreach solution.
This method won't be as good as using a dedicated email outreach solution like Lemlist or Reply (which both integrate natively with TexAu too). But this was cool enough to be part of this tutorial to demonstrate one use of outgoing webhooks with TexAu.
In order to celebrate India today, I choose to make a full-blown Indian workflow from start to finish.
I mean, Satya Nadela is the CEO of Microsoft who owns LinkedIn, right?
And Sundar Pichai is the CEO of Google who owns Gmail, right?
Full-blown Indian workflow! 😛
First, let's add "Send a Webhook POST request" module in TexAu:
Go into your Pabbly Connect account, create a new workflow and add a webhook trigger module:
Now copy and paste the webhook URL given by Pabbly into TexAu webhook module settings:
Add the "POST DATA" fields in TexAu and map the image personalization variables. Pay attention to the HTML code we apply to show our image as embedded in Gmail:
For the Nexweave dynamic image, we will add a small HTML code to display the image as embedded in Gmail. But we will also resize it in the correct dimensions:
Replace yourimageurl.com with your personalized image URL below, here using the Nexweave variable:
Now in Pabbly, click "Capture Webhook Response".
That way, we will "listen" to the outgoing webhook we will trigger from TexAu:
For testing purposes, add some dummy test data to TexAu webhook module. For example, for the Nexweave image, you can use the image preview URL for this purpose:
Once Pabbly captures the webhook response from TexAu, you should see something like this below. It will summarize all the variables passed from TexAu:
Finally, we will add a random delay to temporize every email sent via Gmail.
The main reason is to prevent rate limiting, meaning not overloading Google servers by sending too many webhook requests at once.
You can set both random delays in TexAu and Pabbly for this.
The below setup is more empirical than anything else but works for this purpose.
The idea is to add random delays to process each request coming from TexAu before going to Gmail.
For generating those random delays, I got some guidance from automation expert Fagun Shah, who advised me to try the following:
Fagun advised me to use Pabbly's "Number Formatter" action module. Here you could generate random numbers from a counter or spreadsheet formulas option.
Each time Pabbly receives a request from TexAu, it will apply a random delay before sending the data to Gmail.
Here we will use this randomly generated value as the "Delay Value" in the Delay module:
Finally, let's add the very last action in Pabbly: Send an Email with Gmail.
As you can see below, we are filling the fields from TexAu values:
And every time TexAu finds a valid email. Here's the kind of email we will send to our prospects:
Who said Lemlist? An excellent application of using webhooks in TexAu...
Finally, we will collect all the profiles and their daily post details on Google Sheets to keep track of the processed data. One sheet for the profile data, and a second sheet for the post URL and content.
Today we discovered a very nice use case involving text and image personalization using Nexweave and Email campaigns using webhooks with Pabbly Connect.
Just figure this out: this opens a crazy amount of possibilities to take your sales outreach and customer experience to the next level!
This is undoubtedly a service you can also sell as an automation agency to stand out from the crowd!
Next, I will show you how to personalize a Quickpage landing page using Hyperise! Stay tuned!