Hello! I set up my first Program on Friday (12/20) in the hopes that it would identify all of my new customers and add them to a Nurture Program. Our API uploaded new People, but nothing happened to the Smart List. I used "Person is Created" as a trigger in conjunction with a list of filters that establish a qualified lead:
When I replicate all the filters on a Smart List without out a trigger, I get 40/50 names that qualify, and yet in the triggered list, nothing happened.
What am I doing wrong?
Smart Campaign, not Smart List. (It's the SC that is triggered based on somebody qualifying for the SL.)
In any case: are any of those fields you're filtering on set by Marketo actions?
Please show the full Activity Log for someone who didn't trigger the SC, but later appears to qualify for the SL.
Six of the filters are having their data supplied by our API. The last filter is a list that I uploaded to keep out legacy unsubscribes (from when we used to use Constant Contact).
Here's an activity log for someone who appears to fit the bill for my list, but didn't join it or go through the flow:
Does that help?
The constraint on the Static List only makes sense on a merge. Otherwise New Person can't fire for people on an existing list.
Can you get a sample JSON payload for this lead creation process?
None of these new names are in the static list "Constant Contact Unsubscribes. They weren't in our Constant Contact database to begin with; I just set that up as a precaution that I thought would be prudent on all of our campaigns.
Are you saying that filter is preventing the "Person is Created" trigger from functioning (even if there aren't any conflicts)? I would be comfortable with removing it if that's the case.
If you are adding the people to a nurture program, do they need to be added in immediately? Or could you run a recurring batch campaign to find the people who qualify and add them in?
That is the solution that I've come around to. I'll know if it works in the next hour, but I'd still like to figure out why the "Person is Created" trigger didn't work. It seems like it would be one of the simplest ways to trigger things.
If all the fields are set during the single lead creation API call, then you're simply encountering database commit latency.
The workaround would be to redundantly include the same fields, in a fixed order, in the Reason attribute of a Push Lead API call. Then you can constrain on the Reason without using filters. I would use a URL-encoded string in that case, not JSON, with an "&" at both beginning and end to avoid false positives.
What stands out to me are all the filters that you have in place. When a person is created they might not meet those filters, especially the ones that are Member of List. You also have the additional complexity of data being supplied by an API which may not happen at lead creation.
There are many ways to achieve your goal. Without knowing the inner workings of your system, I see a few potential Marketo solutions:
Option A - Recurring batch campaign
--- All filters listed above
--- 1. Add to Nurture
The benefits to this are that it is clean and easy. Because your nurtures can cast daily, you would want to run this each night.
Option B - If you really want a Lead is Created trigger
1. Create a separate smart list that meets your filters above (Customer = True, Marketable = True, etc) named something like "Customer Nurture Audience"
2. Change your "01 - Add to Nurture" campaign structure to this:
--- Trigger > Lead is Created
--- 1. Wait 5 minutes (this will allow the data to catch up)
--- 2. Remove from flow with constraint. If not member of "Customer Nurture Audience", remove from flow. If not, do nothing
--- 3. Add to Nurture
This is a straightforward to use the Lead is Created trigger, but it has 3 drawbacks. First, it has a heavy system load because it will fire for everyone in your database. Second, it has a wait step up front which means it is a lower priority to fire. In this case, I don't think its bad. Lastly, it is using an "Is not" filter against a smart list which is less than ideal.
Option C - Create a helper campaign and static list
1. Create a static list called "Customer Nurture Audience"
2. Create a campaign that adds people to this static list called "Add to Customer Nurture Audience" with a structure like this:
--- Trigger > Lead is Created
--- Trigger > Data Value change "Is Customer", new value = True
--- Trigger > Data Value change "mkto_Emailable", new value = True
[[[ Make a Data Value Change trigger for all the different filters you have above]]]
Is Customer = True
mkto_Emailable = True
[[[ Add all the filters you have above]]]
**This is important because it looks for all the filters that you have above, but it also allows for the data to be updated in different orders. For example, if a person gets updated to a Is Customer = True after the lead is created, it will still add them to the list.
--- 1. Add to List "Customer Nurture Audience"
3. Change your "01 - Add to Nurture" campaign structure to this:
--- Trigger > Is Added to List "Customer Nurture Audience"
--- 1. Add to Nurture
If you want people added to your nurture every time you are created, this is the best way to do it. It is more work to set up and has more moving parts, but it covers the race conditions that come up when data values are updated at difference times.
B won't really work. Commit latency can easily be over 5m; if that's proven to be the problem then an arbitrary Wait won't solve it.
Changing the way the API writes data so a single *constraint* can be applied *to the pending database write request* (not a filter applied to the committed data) is a foolproof solution.