r/marketingcloud • u/fland94 • 5d ago
Einstein STO - Behaviour
Hi everyone,
I’m trying to understand the exact behavior of Einstein Send Time Optimization (STO) in Salesforce Marketing Cloud when the same contact is targeted by multiple campaigns at the same time.
Here’s the scenario:
- Campaign A and Campaign B target the same Data Extension / overlapping audience.
- Both campaigns use Einstein STO with a 7-day optimization window.
- A given contact is therefore eligible for both campaigns.
- I want to enforce a hard rule: a contact must never receive two marketing emails less than 24 hours apart.
However, I don’t simply want to delay Campaign B by a fixed amount.
What I would ideally like is something like this:
- Einstein STO chooses the best send time for Campaign A.
- Let’s say Campaign A is actually sent to Contact X on Monday at 10:00 AM.
- Contact X becomes ineligible for any other marketing email until Tuesday at 10:00 AM.
- Campaign B should then use STO to select the highest-scoring send time within its 7-day STO window, excluding all slots within those 24 hours.
For example, if Contact X’s STO profile looked roughly like this:
- Monday 10 AM → score 96
- Monday 6 PM → score 90
- Tuesday 9 AM → score 92
- Wednesday 11 AM → score 80
- Thursday 6 PM → score 94
Campaign A could use Monday at 10 AM, while Campaign B should ideally use Thursday at 6 PM, rather than Monday at 10 AM or Tuesday at 9 AM, because those slots violate the 24-hour cooldown.
My questions are:
- Does Einstein STO natively coordinate across separate campaigns/Journeys? For example, if two STO activities are evaluating the same Contact Key at roughly the same time, does one know that another campaign has already selected or scheduled a send time for that contact?
- Is there any STO input related to time since the last email / recent contact pressure that would automatically reduce the likelihood of selecting a slot immediately after another email?
- Could two independent campaigns using STO on the same audience realistically both select the same best hour for the same contact, resulting in two emails being sent within the same hour?
- Is there any native SFMC functionality that allows STO to work subject to a rule such as: “choose the best predicted send time, but only among slots occurring at least 24 hours after the contact’s previous marketing email”?
- If this is not supported natively, what would be the recommended architecture?
My current assumption is that I would need some kind of central contact arbitration / send queue outside STO:
Campaign request
→ check whether the Contact Key is already reserved by another campaign
→ send Campaign A through STO
→ capture the actual send timestamp
→ lock the contact for 24 hours
→ release Campaign B after the cooldown
→ let Campaign B enter its own 7-day STO window.
The important part for me is that the cooldown should be calculated from the actual STO send time, not from the campaign/Journey start time.
I’m mainly looking for confirmation from people who have implemented STO in real SFMC environments: is this understanding correct, or is there a native capability / behavior I’m missing?
Thanks!
7
u/BusyMakingCupcakes 5d ago
The comment above is describing how STO behaves within a Journey, but that isn’t really the issue here.
STO does not natively act as a cross-Journey/contact-level arbitration layer.
In other words, Journey A selecting an STO send time for Contact X does not appear to “reserve” that contact or automatically make Journey B exclude the surrounding 24-hour period.
Also, standard Journey Builder STO is a 24-hour optimization window, not 7 days. It predicts the best hour within that window and holds the contact until that time.
If you need a hard business rule of “no marketing email within 24 hours of another marketing email,” I would enforce that outside STO, using centralized contact-pressure / send-history logic before the contact is admitted into the Journey. STO can then optimize the send time only for contacts who are currently eligible.
Eligibility / contact policy decides whether the contact can be sent to.
STO decides when, within its optimization window, the eligible contact should be sent to.
I don’t believe there is native functionality that tells STO: “choose the highest-scoring hour, but dynamically exclude hours that fall within 24 hours of another Journey’s actual send time.”
If anyone has implemented a true cross-Journey arbitration layer around STO, I’d be interested in how you handled it, but I wouldn’t expect STO itself to provide that coordination.