Tutorials

(Pt 2) Right message: Personalizing emails with product usage data in HubSpot

Jeff Sloan
Jeff Sloan August 24, 2023

Jeff is a Senior Data Community Advocate at Census, previously a Customer Data Architect and a Product Manager. Jeff has strong opinions on LEFT JOINs, data strategy, and the order in which you add onions and garlic to a hot pan. Based in New York City.

When it comes to effective, memorable marketing, personalization is king. 

We all get more and more messages from brands every day, and it’s only the most tailored and accurate outreach that we remember. 

But in order to achieve gold-caliber personalization, marketing teams need fresh, accurate data. That’s where the data team comes in. 

In my three-part series on HubSpot use cases, I’m breaking down how data teams can drive revenue by supporting marketing initiatives. We’re focusing on three key examples of what I call “right person, right message, and right time”: 

  1. Right person by segmenting users based on trial activity (inactive v active)
  2. Right message by personalizing a free trial report with usage data 👈 We’re here!
  3. Right time by emailing users about upgrading just after they use a paid feature

In this cheat sheet to email personalization, I’ll show you exactly how you can move the needle toward your marketing team’s goals (and make your marketing stakeholders love you). 

Before we dive into our right message example, let’s review a few of the takeaways from part one on the “right person”: 

  • Marketing relies on targeting the right people with the right message at the right time to ensure the brand is top of mind when users are ready to buy. 
  • This trifecta of personalization relies on high-quality data about your prospects, available in the tools that marketers use every day. 
  • Marketers are increasingly pressured to do more with less data, especially as third-party cookies become less and less viable for data collection
  • First-party data that you’ve collected about your prospects and customers can make a big difference. The highest quality first-party data lives in your data warehouse. 
  • The data team can make a meaningful impact on revenue by enabling marketing initiatives. 
  • The more the data team ties itself to revenue, the easier it is to justify your company’s investment in data (and get a seat at the table) 

Got it? Great - we’re ready to dive into our HubSpot, Snowflake, and Census use case.

Note: If you’re a marketer reading this who wants to build campaigns off of product usage data, send your data person this article. 

Practical example: Personalizing emails with product usage data 

For this use case, we’ll be acting as the data team for our fictitious example company from part one: Marker, a virtual whiteboard tool that lets users create and share canvases of their ideas with other users. 

Marker has a 14-day free trial, and they want to create excitement with users who hit the end of the trial to encourage them to upgrade. To do this, they want to send each user an email summarizing all the awesome stuff they did during their trial - prompting them to upgrade to continue the momentum. 

Email personalization in HubSpot can lean on three types of data points: 

  1. People (“Contacts” in Hubspot-speak), and attributes about them
  2. Lists of people
  3. Actions that people have taken (events)

For this use case, we’re concerned with Contacts in HubSpot, specifically Contact Properties to store data about a user’s free trial behavior. 

To get users excited and feel like Marker knows them - the data has to be accurate, which means Marker must regularly sync their most accurate set of product data (in Snowflake) to HubSpot. Marker will keep properties about a user’s product usage up-to-date on a corresponding Contact record in HubSpot, so the marketing team can personalize emails with this data. 

Setting up personalized emails will involve four steps: 

  1. Set up two custom properties in HubSpot on the Contact record
  2. Create an email in HubSpot that uses a given contact’s properties in the email
  3. Set up & create our sync in Census to supply data for these contact properties
  4. Send highly-personalized messaging based on product usage

Let’s get into it. 

Learn better by video? Here’s the full recording of how to set up this use case. 👇


Step one: Set up custom Contact Properties in HubSpot 

Before touching our Snowflake data, we need to set up two custom properties on our HubSpot contacts. These two properties will house each contact’s number of canvases created and shared during the free trial.

To do so, we’ll go to Settings > Data Management > Contacts in HubSpot and click “create property”, saving properties called “Canvases Created” and “Canvases Shared”.


Step two: Create an email in HubSpot with dynamic custom properties 

Now, we’ll work with our marketing team to set up an email in HubSpot that will excite users to continue their journey with Marker. We’ll have two dynamic, custom variables in the body of the email to insert a given HubSpot contact’s number of “Canvases Created” and “Canvases Shared”, the properties we created in Step One.

When we send this email to a given Contact, the Contact’s values for these two properties will be inserted in place of the variables.


Of course, these fields will need to be filled in with accurate metrics in order to motivate folks to upgrade. We’ll be populating them with data from Snowflake. 

Step three: Set up & create our sync in Census 

Now that we have the receiving end of HubSpot all set up - we can use Census’s Audience Hub features to sync product usage to our HubSpot contact records. 

To start - we’ll connect Census to HubSpot and Snowflake, and then define our Entities. This lets us easily choose the users and events datasets we want Census to know about in Snowflake (joined by the user ID), so we can calculate “Number of Canvases Created” and “Number of Canvases Shared” in a point-and-click interface.

Note: In Census, you can also pre-model these product usage data points about a user directly in a SQL Query or data transformation (e.g. dbt model), and map this data directly to a HubSpot Contact. Audience Hub helps your less technical peers to accurately self-serve data based on data team-approved datasets like Users, Companies, and Events.

Then, we’ll create two calculated fields at the user level for the numbers of canvases created and shared. As you can see in the example below, I’m setting up a new user-level field “Number of Canvases Shared”, indicating that it should count each user's number of events with the name “share canvas” and saving. 


Next - we’ll set up the sync to send this product usage data to HubSpot by going to the sync tab and selecting our users entities and telling Census to sync to the contact object in HubSpot. For this use case, we’ll just be updating, not creating net-new contacts. 

We’ll then match our user data in the warehouse to HubSpot contacts based on email and map our two calculated fields to the Contact properties in HubSpot. 


Now it’s time for some magic - set the sync to run. 

While the sync is running, it’s a good idea to jump over to the “Configuration” tab and set up your sync schedule. We can easily set up our sync on an automatic schedule (hourly, weekly, daily, etc.), as well as create alerts to notify us if records get rejected by the HubSpot API. 


Step four: Send highly-personalized messaging to all the right people 🔥

With our new sync up and running, we can check that our users’ product usage data is successfully landing in HubSpot. 

When we view our Contacts page in HubSpot - we can now view how many canvases they’ve shared and created. 

If we want to preview exactly how the new email will look to a specific end user (like Katlynn in the video below), we can go to the email we created in step one and preview it as our Katlynn to see her data populated into the body of the email. 


This will go a long way to getting users like Katlynn excited about Marker (or any business that takes the time to personalize marketing communications to this degree). There is real revenue in driving personalization - and data people (you) are the key to making it possible. 

Increase revenue with personalized emails & product data 

Any company can send emails. It takes a truly data-driven one to reach the exact right person with the right message that speaks to them. 

By helping your marketing team activate data in HubSpot - you’re directly impacting key business metrics by converting more users into revenue. 

While the data team is a powerhouse of knowledge and insights for the business, driving revenue directly makes your work even more valuable. 

So, as you walk away from this article with your newfound HubSpot knowledge, remember three things: 

  1. The data team can meaningfully impact revenue with the data already in the warehouse
  2. Tying yourself to revenue-related activities makes it easier to justify your company’s investment in data, from people to tooling
  3. Demonstrating the ability to impact business-level metrics elevates the data team as a strategic partner (not just a service or cost center) 

If you’re ready to make an even larger impact at your company, we’d love to talk with you about how Census can supercharge your work

And - if you’re itching to learn more about the world of marketing and how the data team can support it, check out my ConCensus 2023 workshop.

Related articles

Customer Stories
Built With Census Embedded: Labelbox Becomes Data Warehouse-Native
Built With Census Embedded: Labelbox Becomes Data Warehouse-Native

Every business’s best source of truth is in their cloud data warehouse. If you’re a SaaS provider, your customer’s best data is in their cloud data warehouse, too.

Best Practices
Keeping Data Private with the Composable CDP
Keeping Data Private with the Composable CDP

One of the benefits of composing your Customer Data Platform on your data warehouse is enforcing and maintaining strong controls over how, where, and to whom your data is exposed.

Product News
Sync data 100x faster on Snowflake with Census Live Syncs
Sync data 100x faster on Snowflake with Census Live Syncs

For years, working with high-quality data in real time was an elusive goal for data teams. Two hurdles blocked real-time data activation on Snowflake from becoming a reality: Lack of low-latency data flows and transformation pipelines The compute cost of running queries at high frequency in order to provide real-time insights Today, we’re solving both of those challenges by partnering with Snowflake to support our real-time Live Syncs, which can be 100 times faster and 100 times cheaper to operate than traditional Reverse ETL. You can create a Live Sync using any Snowflake table (including Dynamic Tables) as a source, and sync data to over 200 business tools within seconds. We’re proud to offer the fastest Reverse ETL platform on the planet, and the only one capable of real-time activation with Snowflake. 👉 Luke Ambrosetti discusses Live Sync architecture in-depth on Snowflake’s Medium blog here. Real-Time Composable CDP with Snowflake Developed alongside Snowflake’s product team, we’re excited to enable the fastest-ever data activation on Snowflake. Today marks a massive paradigm shift in how quickly companies can leverage their first-party data to stay ahead of their competition. In the past, businesses had to implement their real-time use cases outside their Data Cloud by building a separate fast path, through hosted custom infrastructure and event buses, or piles of if-this-then-that no-code hacks — all with painful limitations such as lack of scalability, data silos, and low adaptability. Census Live Syncs were born to tear down the latency barrier that previously prevented companies from centralizing these integrations with all of their others. Census Live Syncs and Snowflake now combine to offer real-time CDP capabilities without having to abandon the Data Cloud. This Composable CDP approach transforms the Data Cloud infrastructure that companies already have into an engine that drives business growth and revenue, delivering huge cost savings and data-driven decisions without complex engineering. Together we’re enabling marketing and business teams to interact with customers at the moment of intent, deliver the most personalized recommendations, and update AI models with the freshest insights. Doing the Math: 100x Faster and 100x Cheaper There are two primary ways to use Census Live Syncs — through Snowflake Dynamic Tables, or directly through Snowflake Streams. Near real time: Dynamic Tables have a target lag of minimum 1 minute (as of March 2024). Real time: Live Syncs can operate off a Snowflake Stream directly to achieve true real-time activation in single-digit seconds. Using a real-world example, one of our customers was looking for real-time activation to personalize in-app content immediately. They replaced their previous hourly process with Census Live Syncs, achieving an end-to-end latency of <1 minute. They observed that Live Syncs are 144 times cheaper and 150 times faster than their previous Reverse ETL process. It’s rare to offer customers multiple orders of magnitude of improvement as part of a product release, but we did the math. Continuous Syncs (traditional Reverse ETL) Census Live Syncs Improvement Cost 24 hours = 24 Snowflake credits. 24 * $2 * 30 = $1440/month ⅙ of a credit per day. ⅙ * $2 * 30 = $10/month 144x Speed Transformation hourly job + 15 minutes for ETL = 75 minutes on average 30 seconds on average 150x Cost The previous method of lowest latency Reverse ETL, called Continuous Syncs, required a Snowflake compute platform to be live 24/7 in order to continuously detect changes. This was expensive and also wasteful for datasets that don’t change often. Assuming that one Snowflake credit is on average $2, traditional Reverse ETL costs 24 credits * $2 * 30 days = $1440 per month. Using Snowflake’s Streams to detect changes offers a huge saving in credits to detect changes, just 1/6th of a single credit in equivalent cost, lowering the cost to $10 per month. Speed Real-time activation also requires ETL and transformation workflows to be low latency. In this example, our customer needed real-time activation of an event that occurs 10 times per day. First, we reduced their ETL processing time to 1 second with our HTTP Request source. On the activation side, Live Syncs activate data with subsecond latency. 1 second HTTP Live Sync + 1 minute Dynamic Table refresh + 1 second Census Snowflake Live Sync = 1 minute end-to-end latency. This process can be even faster when using Live Syncs with a Snowflake Stream. For this customer, using Census Live Syncs on Snowflake was 144x cheaper and 150x faster than their previous Reverse ETL process How Live Syncs work It’s easy to set up a real-time workflow with Snowflake as a source in three steps: