Engagement Program Hacks for Variable Cadence and more

One thing I have noticed when creating a more complicated nurture in Marketo, you have to be creative to make things work the way you want them to and the great part about Marketo is that you have a whole arsenal of features available.

This hack works with a lot of use cases, but the specific way I got to making it was when a client wanted a specific nurture for free trials for licenses from their website that would be sending on specific days of the trial.

variable cadence.png

I've seen a lot of questions about variable cadence on the community. I was overjoyed seeing Marketo's announcement of this feature (screenshot above from summit slides) on the Summit this year. There is still some time remaining until that so I figured I will share this method. This has been tested for a few months and is proven to work given the right setup.

I will also share some learnings from setting up this a few different ways which I would strongly not recommend .

Example of 30 day product trial nurture with fixed days for sendouts

If you're looking to nurture leads who signed up for a product trial during a fixed amount of time for the trial, you would probably want to deliver some content on specific days of the trial to try to convert/activate them on milestones. Multiple products will be tougher to nurture as managing dynamic content in one stream can become a lot of work.

Main asset setup


Using similar naming conventions for different products, it allows you to globally maintain sendouts, making it easier if you want to add new streams or make changes on the days you want to cast.

Stream setup


Adding one stream per product and emails for each in the same order will allow for maintaining your casts from the same place. This is of course if you want to be sending the same amount of content and on the same frequency for your products.

Setting stream cadence


In order for the setup to work, casts should be set to recur every day at the same time, in this example 10 am. The space between the days for casts will be maintained by scheduled batch campaigns.

Another point to note before continuing, this can be applied on normal nurturing streams with longer spaces (let's say 2-3 weeks) where you want new leads in nurture to receive content immediately instead of waiting 2-3 weeks if they just missed the last cast. In this type of situation where you don't want to send out on numbered days, you can just choose the weekdays for when to cast, e.g. Tue, Wed, Thu with the same weekly repeating cadence.

Entry to nurture and Custom Object

Smart List

Added to Trial.png

In the example above, a Custom Object has been added for Trials and the trigger for entry to Stream 1 is being added to a trial for Product 1. This works great if you have an external database that confirms a new trial and is scheduled to import daily at a specific time to Marketo.



Once the lead qualifies for the flow, they will be added to the appropriate stream (in this case Product 1).

This is also a great time to send out a welcome to trial email directly. If you're using a Custom Object for the trial you can add information from it by using Velocity Scripting with $TriggerObject values, more on there here: http://developers.marketo.com/email-scripting/marketo-objects/

After that:

  1. Cadence is paused (should be sent on the third day)
  2. Wait step for 2 days
  3. Cadence is resumed to Normal to send out the first email in the stream (-Day3-)

Smart Campaigns for managing cadence

Smart List

Smart Campaign-SL.png

Here is an example of the first batch campaign applying for the first email sent on Day 3, looking almost identical for all days, you set up the first one and then clone and adjust from there.

Filters explained:

  1. Only applies to members of this engagement program
  2. Was Sent (Not delivered*) an email that contains the naming convention (-Day3-) for this email in the past 2 hours (explained next in Schedule)

*The positive aspect of using filters is that there is a sent choice as opposed to triggers that only have "Is Delivered", this is important because if you would use the was delivered option you risk sending your emails daily.



Once a lead qualifies for the flow, their cadence will be paused for a fixed amount of time.

Flow steps explained:

  1. Pause the cadence for the Engagement Program (will not receive casts)
  2. Wait for a fixed amount of time - The time between Day 3 and Day 8 will be 5 days, so taking away a few hours from that will place the person on the cast of their 8th day.
  3. Once the wait is over, cadence is resumed.



Every batch campaign for maintaining cadence will be scheduled to recur daily at the same time. In this case, every cast is scheduled for 10 am and the batch campaigns run at 11 am (after). The Smart Lists specify the email (e.g. -Day3-) delivered in the past 2 hours, so this will ensure the right batch campaign runs.

Repeating setup for all Smart Campaigns

Once the first campaign is set up you can clone it and:

  1. Adjust the name of the Day of the email (ensure to use contains)
  2. Adjust the wait time, so for Day 8 (Next cast is Day 14) it would be 5 days 12 hours to land on the next cast.

Changing streams after nurture is done or lead has purchased


When the nurture is done on the last day, leads can be added to a separate stream without cadence. The main reason for this is that with daily casts setup and no more content to send, you will get a lot of notifications in your Marketo top menu. Also it is better knowing that those inside of a stream are currently in the middle of a trial.

When a lead purchases a paid version of your product you can set up a trigger to pause trial nurturing, add them to the purchased stream (ensure Success Program Status is set up) and send a welcome email or whatever you choose.

Survey after trial

One great use case for globally managing your trials is sending a general survey to request information on what the lead thought about the trial. I have configured custom Marketo based surveys with a rating scale of 0 - 5 composed of Image links to the same Marketo landing page with URL parameters for tracking response on the email click and then asking a couple general questions (picklist it) regarding the product.

If you configure the entry campaign with a Change Data Value flowstep to update the product name, you can personalize one email with tokens.

Necessary Quality Management

To keep quality you will need the following:

  • Bounce management (Soft/Hard): If there is bad email quality, make sure to create Smart Campaigns for removing leads from the stream. You could create an empty inactive stream for Invalid Emails.
  • Communication Limits: If your communication limits are strict and leads are receiving other emails during the nurture you will need to take this into account since it could possibly change the time of delivery.
  • Make sure to test the nurture and double (or triple ) check your smart campaigns. When you're configuring a lot of smart campaigns too quick and don't let the system save before moving on, you may keep the same value twice.
  • Unsubscribed Leads: If you have a subscription center or custom unsubscribe you need to take this into account for removing the leads from nurture and most likely having an Unsubscribed Stream / Status. You can use trigger tokens for changing the data value on a custom field that writes the name of the email asset that triggered the unsubscribe to get information on where you should optimize.
  • Take into account use cases of someone doing a trial for two products and ensure you can manage moving them to the new product trial stream if they've already run through one.

Other use cases

As mentioned above, this does not need to be a fixed day nurture for a trial. You can use this method when you have a 2-3 week nurture where you want to include leads every week so they don't have to wait too long if they have missed the latest cast (they're all run at the same time). So if you were to name all your nurturing emails like NUR-01-, NUR-02-, ..., you can set a weekly cast on a weekday but set a wait step for 2-3 weeks with cadence paused, and of course Schedule set to run every time.

Lessons Learned

From previous experience I have tried a couple different methods that don't work so well and have come up with this custom solution to get a scalable workaround. Some of the things I tried which did not work so well in the past years:

  • Setting this up without an Engagement Program and a whole lot of Smart Campaigns: This becomes very tedious work as using Smart Campaigns will not prevent leads from receiving the same email twice. If you need to make a change in even one Smart Campaign you will need to run batches to remove those who are in wait steps from the flow and manage everyone manually, which I could say is not so much fun.
  • Setting up an Engagement program for one product and using one stream per day: This was a similar setup to the one given here, it worked for the most part but was just a pain to maintain and resulted in a lot of notifications

As always if you want to know more feel free to ask and I'd be happy to help. Also if anyone has anything to add here, do it!

For more tips and tricks, feel free to check out debros.se

Level 5 - Champion Alumni

This is great Erik! We have been holding out for the variable cadence launch before we migrated our free trial nurture to an Engagement stream but I might just have to pinch your idea! (Promise I won't pass it off as my own!)

Level 2

Thank you very much for these tips, Erik. I really appreciate the effort to put this out here.

Level 8

No problem and thank you for the feedback Marshall!

Level 10 - Champion Alumni

This is really interesting! I've only used smart campaigns for trial drips. How would this change if you wanted people to receive time-based emails and also product usage-based emails? At my last company, I used smart campaigns to trigger emails if someone did or didn't do a particular action in the product (based on an SFDC opp field), and it was such a pain to set up!

Level 8

Thanks Amy!

For the product usage based emails part you can use a default program within the nurturing stream that would make sure to include all members of the stream (to avoid endless loop of nothingness) and in the flow have a choice to send out emails based on product usage and otherwise do nothing (so leads can move onto the next cast).

For the triggered / time-based part you can always combine a couple of those outside of the nurturing stream based on how it's built. But I agree all-in-all the production part can be a bit time consuming depending on how you want to make it.


Not applicable

Hi Erik,

Great article.  Very helpful in customizing my nurture program.  Can't wait for the new update.  So I have a question, since you're using pause, to stop an email cast, then unpausing people; what happens if you really need to pause a person. Do you have to do it during the window after you unpause and send out the email?



Level 8

Hey Jeffrey, thanks for the feedback!

I guess that's where it will get quite complicated, but you can manage it a few different ways:

  1. Use the Marketing Suspended field and update it to true (Temporary Unsubscribe)
  2. Same as step 1 but adding a choice on the step changing cadence to Normal with the condition that Marketing Suspended is false.
  3. Moving lead to another stream, e.g. an empty stream bucket with no cadence - If cadence is resumed it shouldn't affect the person getting emails since there would not be any in the empty stream.

It all depends what your use case would be, but I would look at manually updating the Marketing Suspended field through the lead view by checking the box, since it will remain temporarily unsubscribed (to all emails that are not marked operational) until you uncheck it - but of course then you would want to ask the question if those emails are relevant or if they should be moved to another stream.

Hope this helps!



Not applicable

Thanks Erik,

I think I like option #3.  There may be some other communications happening and I wouldn't want to block them from receiving those emails.  So just placing them in an empty stream seems like the best choice for me.

Thanks again,


Level 8

Great, no problem! As always, I'd recommend testing your new setup to ensure it works the way you want it to

Level 2

Hi Erik,

Great article and super helpful.

Just had a quick question regarding set up instructions under the section called "Entry to nurture and Custom Object." Based on your screenshots it looks like the smart list and the flow is being set up in a smart campaign. But could we also do the same thing under the first stream's transition rules/flow? If we have to use a smart campaign, is there anything special we need to do with the first stream's transition rule/flow or just simply leave it at its default?

Seems like both ways work, just wanted know if you chose the smart campaign path for any particular reason.