Tuesday 19 May 2015 3:41:57 pm
Some time ago I wrote a blog post about integrating Salesforce and Marketo in a web marketing solution powered by a content management system (in this case, the eZ Publish CMS). Recently, Mugo had the opportunity to migrate one of our clients from Marketo to HubSpot. The decision to move to HubSpot was made for non-technical reasons; regardless, it is useful to review the technical differences and challenges when it comes to integrating the marketing systems with a content management system.
In this particular project, the main integration was for sending various client communications through scheduled newsletters and ad hoc e-mails. For user profile data, most of that is handled with an integration to Salesforce, so that remained unchanged. All of the content for the various client communications come from the content management system via multiple types of articles. It is important that editors can focus on editing and managing content in the content management system, and that they should not have to log in to the marketing system.
The communications and thus integration pieces can be broken down like this:
With Marketo, you can use the API to schedule an e-mail campaign to send to a list of users, and set the template, subject, and body in specific API fields. You can either trigger a campaign externally (from the CMS), or set a schedule within Marketo and have it call back to the CMS to read a feed via a Marketo "Webhook" signal.
In HubSpot, scheduled e-mails rely on reading RSS feeds only, so to have full control over the contents of each e-mail, you typically have to put the entire body of the e-mail into a single RSS item. From an e-mail perspective, scheduled e-mails and ad hoc / scripted e-mails are separate concepts. With scheduled e-mails, you can trigger e-mails to lists at specific times. For ad hoc / scripted e-mails, the main concept is that of "Workflows", which involves sending e-mails to individual users.
In Marketo, the scheduling options are robust, so there is no problem scheduling not just weekly e-mails, but bi-weekly e-mails and e-mails on multiple days of the week.
In HubSpot, it is possible to schedule a weekly newsletter. However, the scheduling options are limited beyond that, so it is actually not currently possible to pick a bi-weekly schedule.
Thus we had to trigger ad hoc / scripted e-mails on our end (via a cronjob) for bi-weekly e-mails, the same way as we would for e-mail alerts and daily newsletters. This is not ideal as we would rather have the e-mail settings fully managed in HubSpot.
For daily newsletters, we have a nice tool in the content management system that enables editors to hand-pick the articles to populate each day's newsletter.
Once they "publish" the daily newsletter, we need to send the newsletter contents, based on the feed, to the marketing system and trigger the e-mails. At the integration level, this is the same as how we trigger ad hoc alert e-mails; the main difference is that the alerts are prompted by an article with a certain flag going live, whereas the daily newsletter has a separate interface.
In Marketo, you must create a campaign and define "tokens" for each dynamic part of the e-mail. A token can represent an individual part of the e-mail body or the entire body.
Once the tokens are defined, they can be used in the email template:
Then it is possible to schedule a campaign using the Marketo API and send it the token values. When a campaign is scheduled, Marketo sends an email to all contacts associated with the given campaign. You can check our blog post that has an example on how to schedule a Marketo campaign using the SOAP API.
A scripted e-mail in HubSpot is sent through a "Workflow". First, you need to create and enable the workflow, setting "Can the same contact enroll in this workflow more than once?" to "Yes".
When you trigger this workflow via the API, you must enroll one contact at a time, instead of simply specifying a list. (You can technically disable and then enable the workflow in the interface, which will trigger the automatic enrollment of the contacts of a chosen list; however, this means that an editor would have to manually do this each time they want to send a newsletter.)
The last element is to make the e-mail content sent by the workflow dynamic. While it is possible to update an e-mail template via the API, the template will not actually get saved until you "publish" it in the user interface. This is not feasible for a scripted e-mail. Thus, as a workaround you have to store the message subject and HTML contents of the e-mail in a property of each contact. Then, you update those contact properties using the HubSpot contacts API. If you use this workaround to send multiple types of scripted e-mails, you should consider using separate contact properties for each e-mail. This is because if you trigger different e-mails back-to-back, HubSpot might not finish sending the first e-mail before a given property is updated by the script for the second e-mail -- resulting in the first e-mail's contents never being sent and the second e-mail's contents being sent twice.
In general, we found the Marketo API more straightforward, intuitive, and better documented. The process for sending e-mails to individual users through a HubSpot "workflow" is full of workarounds, but it does work in the end. One main technical advantage to using HubSpot is that you can send and track e-mails to individual users (seemingly at the expense of not being able to schedule e-mails to entire lists), whereas in Marketo, the campaigns are entirely list-based. The HubSpot features for a marketing professional seem more powerful and intuitive, so we have high hopes that its technical part catches up!