Personalized Images at Scale
(This is Part One of a series on automating outbound. Click here for Part Two)
When Brian Anderson first messaged Charlie Liang from Engagio to ask for a meeting, he couldn’t predict that his email would go viral. Brian, Co-Founder of Captuvate, had heavily tailored the message to Charlie, and further personalized with a bespoke diagram to show how his product worked.
Not only did Charlie agree to meet with Brian, he also featured the email and image in his LinkedIn post, “The Best Sales Prospecting Email Ever” with over 1,000 likes and 241 shares.
But the 46 comments on Charlie’s post highlighted a serious problem for Brian. With Brian spending 5 minutes to personalize each image (and likely another 5 minutes to write the message), how could this possibly scale?:
Brian had the classic prospecting challenge: do you send high quality messaging at low volume, or high scale messaging with low quality?
For Brian to reach out to 200 prospects, it would take nearly an entire week just for one message in one campaign.
Objectively, we knew personalized images could increase response rates by 20%. Instinctively, we believed Brian’s email could be automated despite the chorus of “Yeah, but that won’t scale” in the comments. So we asked ourselves a simple question:
What would it take to automate the “Best Sales Prospecting Email Ever”?
Deconstructing the image
We started by reverse engineering Brian’s image to understand where he’d personalized. When we looked at the breakdown, we knew this was going to be tough. Brian had customized nearly every pixel: including the company’s logo, an Engagio team member’s name and photo, and even changed the background color to match the Engagio’s brand.
We’d need to take this step by step.
We quickly found we couldn’t simply pull the logo from a given company’s site. We’d have to account for different sizes, backgrounds, and formats. Instead, we turned to Clearbit, who offers a free Logo API to find logos programmatically. By appending a company domain to “https://logo.clearbit.com/", Clearbit returns their best guess at that company’s logo (almost always a perfect guess). Even better, Clearbit provides each logo in the same size, so we’d need to adjust the template, but could avoid custom logic to accommodate varying logo sizes.
Identifying a brand’s color was going to be tricky. How do you quantify that? Some sites provide a branding or press page detailing their desired colors, but not everyone uses that, and they’re not consistently tagged. Identifying colors from an individual brand’s website was going to be too complex. From a previous project, we knew that the open source image library, ImageMagick, had a ‘quantize’ module to analyze an image’s pixels. Could we combine Clearbit’s Logo API with ImageMagick’s pixel analysis to identify a prominent color? After a couple of hours coding, we’d built a prototype and it worked! It wasn’t perfect, but for 92% of the brands we tested, it was dead-on. For the brands where it didn’t work perfectly, the color identified was within the palette. We agreed it was close enough to pass the sniff test. We pressed on.
Next, Brian had included a member of the Engagio team, specifically someone in Sales. So we needed to:
- Identify an employee in Sales
- Find their profile picture
- Avoid human intervention
This one had us stumped. We thought about where that data might live: Clearbit had an API to programmatically search for employees at a company (Prospector) and another API to programmatically find details about those people (Enrichment), which included profile pictures. What if we combined the two and programmatically searched for sales people at a given company, and then return the first person with a profile picture from Clearbit Enrichment? Another few hours of hacking and we’d been able to abstract away the process: Given an arbitrary company name and title (or list of titles), we could identify a person at that company and their profile picture. We were getting close!
At that point, we could source the raw ingredients for the custom image on demand: Company logo, brand color, relevant person, and person profile picture. We just needed to stitch everything together.
For that, we used Google Cloud Functions and Google Cloud Storage to automate the process of combining each element into a single image, storing the image, and returning a web address to locate it.
We’d done it!
Pushing the Limit
Since the process was now automated, we asked, “How much more can we personalize?” Using other proxy data, like the company’s current marketing technology and location, could help grab the prospect’s attention. It’s a subtle change, but each layer of customization helps.
We ran the math again. If Brian were to use this new process, his time per image would drop from 5 minutes to less than 30 seconds (including review). Or, an order of magnitude time saved!
For the hypothetical 200 prospect campaign, that’s three days cut to 1.5 hours. For most organizations, this is the difference between ever declining results from low quality, high volume messaging and hitting their targets.
Brian’s life just got a lot easier, but there’s still a big problem: it would still take him 17 hours to write the copy. That was our next challenge.
Stay tuned for…(Updated: PART 2)