Hi Team ,
Overview :
I’m designing a Marketo program that leverages a custom object tied to CRM Opportunities to automate an annual “Mid-Lease Survey” email. The goal is to collect feedback from customers on how their lease experience is progressing.
Key Logic
Trigger: The program will initiate one year after the lease start date, repeating annually for as long as the lease remains active.
For example, if the lease start date is 20 Jan 2024, the first email would deploy on 20 Jan 2025, the second on 20 Jan 2026, and so on.
Eligibility Filter: Each send will include a check to confirm that the customer still has an active lease. If the lease is no longer active, the record will be excluded from subsequent sends.
Data Handling: The lease start date is stored as a date field in the custom object, allowing accurate anniversary calculations.
Questions :
I’m evaluating two potential approaches for the annual “Mid-Lease Survey” program in Marketo and would like your feedback before I proceed.
In previous campaigns, I’ve used a recurring batch smart campaign that simply collects records from the last 24 hours, waits for a defined period, and then sends the email.
With this method, I can handle the first annual send (e.g., one year after lease start) without any problem.
Challenge: If a lease remains active for multiple years (say, 7 years), I’m unsure how to manage the subsequent annual sends.
I considered an Engagement Program to handle the cadence, but I’m not sure how to align the first cast with the exact anniversary date, or whether Engagement is the right fit.
I’d appreciate your thoughts on whether a recurring batch with smart logic could scale for multiple yearly sends, or if there’s a better alternative.
In this scenario, I need to account for past lease start dates.
Example: A customer with a lease start of 22 Sept 2024 should receive emails on 22 Sept 2025, 22 Sept 2026, and so on—even if the program is set up later.
I’m looking for the best way to identify and send to these contacts each year on their anniversary, ensuring we don’t miss anyone because the program started after their first year.
Could you share your opinion on how best to handle each scenario?
Your feedback will help me choose the right method to move forward confidently.
Regards,
Akshat
Hmm. Your schema really isn’t optimal for such a campaign.
Not a fan of anything that needs to extrapolate anniversaries from a Date/DateTime, as Marketo (outside of Velocity, that is) doesn’t have the ability to roll CO fields forward in time.
I would probably use a webhook-compatible service and a Person field Next Anniversary Date to assist with this. Every day, run everyone with an active Lease and with Next Anniversary Date that’s empty or in the past through the ’hook. The service uses the CRM API to get the value, roll it forward, and return the next anniversary to Marketo. (Note if you were using Marketo Custom Objects you wouldn’t need to call the CRM API, obviously.)
@SanfordWhiteman My apologies for the confusion. The opportunity-level data seems to be an out-of-the-box field rather than a custom object. Details below.
Based on that, is there a way to handle this in Marketo without using a webhook?
If you have any related documentation or best-practice guides, that would be really helpful.
Also, considering that the maximum lease period might be around 5–6 years, would it make sense to set up an Engagement Program with six streams—each stream holding for a year after the last send—so the lead moves to the next stream annually?
If you have any other recommended approaches or suggestions, Please let me know
Regards,
Akshat
Just a quick FYI: We do care about historical data. For example, if someone had a lease start date last September, we would like to send them an email this September and in subsequent years as well. It doesn’t need to be on an exact date—month-wise targeting would also work if feasible.
I’m fairly certain other clients have leveraged birthday or anniversary campaigns in the past. Do you know how they were able to achieve this? Any suggestions or feedback on handling this use case would be greatly appreciated.
Regards,
Akshat
Yes, anniversary programs have been built by various people, but as far as I know - and that's how we did it too - they rely on a very specific feature of the wait step:
But you can't do that with a date field in a Custom Object or in the Opp object. This only works for date fields in the lead database. If you are able to transport your date from the object onto the lead database, you might probably be able to use this feature.
@Michael_Florin Do you know any other ways or approaches that can be leveraged ?
@SanfordWhiteman Do you have any insights on my previous message ?
Thanks guys for your response ..looking forward to your feedback
Really appreciate !!
Regards,
Akshat
⚠️ This post has been edited by a moderator for accuracy.
It’s our responsibility as a community to not provide AI-hallucinated and/or untested answers.
@Michael_Florin @SanfordWhiteman
I did some additional research and found that there could be a few different approaches, but I wanted to double-check with you to confirm the best path forward. Here are the options I considered:
Option 1:
Create a new field called “Next Anniversary Date” and set it to the same day and month as the lease start date, but with a static year (e.g., 1990).
This could exist at the opportunity level, since we’re updating the year directly from CRM—no need to make it a person-level field.
Marketo would treat it as a “birthday” type date, allowing us to use smart list filters like Next Anniversary Date in the next X days.
Because the year is static, the filter would ignore the year and focus on the month and day, making it reusable every year.
Option 2:
Create a Next Anniversary Date field at the person level, but leave it blank initially.
For the first send, use a smart list to check if the lease start date falls within the next X days, then send the email.
Use a “Change Data Value” flow step to update Next Anniversary Date to {{system.date + 1 year}}.
This field would update annually, allowing the campaign to trigger each year as the next anniversary approaches.
Option 3 (No new field):
Use a smart list to check if the lease start date is in the next X days and send the first anniversary email.
For subsequent sends, run another batch smart campaign that waits 365 days after the previous email and then sends the next anniversary email.
This process repeats every 365 days, as long as the lease remains active.
I wanted to get your thoughts:
Do you think Option 3, which doesn’t require a new field, would work reliably?
Do you see any advantages or potential issues with Option 1 or 2?
Any other insights you might have would be appreciated.
@Darshil_Shah1 Do you have any feedback on the above ?
Looking forward to your response
Regards,
Akshat
Option 1:
Create a new field called “Next Anniversary Date” and set it to the same day and month as the lease start date, but with a static year (e.g., 1990).
This could exist at the opportunity level, since we’re updating the year directly from CRM—no need to make it a person-level field.
Marketo would treat it as a “birthday” type date, allowing us to use smart list filters like Next Anniversary Date in the next X days.
Because the year is static, the filter would ignore the year and focus on the month and day, making it reusable every year.
Why would it treat the “static year” any differently from another Date? That’s just a Date in 1990. Unless you mean updating the value from the SFDC side every year, which of course would work. But the field itself isn’t special.
This is something that was promotedby ChatGPT, so I wasn’t entirely sure and wanted to double-check if it’s even a viable option — it seems like it isn’t.
In that case, do you think Option 2 or Option 3 would work better? What’s your opinion?
Well, please don’t post ChatGPT hallucinations here. You must test to see if they’re even close to the truth. Can’t have a community polluted by false info.
In this case, even without testing, can’t see how this passes the smell test. Is the year of someone’s Date of Birth field no longer filterable in a Smart List because it’s “in the past”? Can you not tell how old someone is using Date of Birth?