Expand my Community achievements bar.

Join us for an upcoming in-person Adobe Target Skill Builders event ~~> We're hosting these live learning opportunities to equip you with the knowledge and skills to leverage Target successfully. Learn more to see if we'll be coming to a city near you!

Personalize Adobe Campaign Messages with Adobe Target via I/O Runtime




Author: Bastien Fabing

We have all had the unpleasant experience of receiving an email, SMS, or push notification from one or our favorite brands, promising exciting content to find an unrelated experience when landing on their website. Siloed teams and/or a fragmented MarTech are often the origins of inconsistent experiences across a brand digital property. Serverless technologies such as I/O Runtime help marketers close the gap by streamlining data flows and enhancing native capabilities through bespoke functions.

Note: This post will put aside the organizational aspect to focus on the technology. Also note that even though the configuration differs for Adobe Campaign Classic and Standard, this implementation is possible with both solutions.

If you have Adobe Campaign and Adobe Target, you know they both have decisioning capabilities (Offer Engine for Campaign and pretty much each of Adobe Target features). This dual decisioning brain, often managed by different teams, leads to disjointed experiences and frustration.

What if we could use one of these brains to power, in real time, the experiences across all our channels? It would definitely be a step towards this omnichannel holy grail that we have been all chasing. Fortunately, with Adobe I/O Runtime, it becomes possible for Adobe Target to power the entire content of any message coming from Adobe Campaign. It also enables all Target decisioning features such as A/B testing or multivariate testing to be used in emails, SMS, push messages, and more.

Before we get our hands dirty, let’s review the decisioning features of Adobe Campaign and Adobe Target and the existing native integrations between the two solutions.


Adobe Campaign only supports pre-defined business rules, as opposed to Target that can use a combination of business rules and Adobe Sensei smart algorithms. Regarding the data powering the engines, Adobe Campaign can use any data points available in the data model. However it often lacks of online data, or at least not real time, online data. For Target, this is the opposite, it can use data captured by Adobe Analytics but will lack of offline data, especially when it comes to PII.

And how about the native integration between Target and Campaign? It enables interesting use cases but has limitations. Take a look at this review below:


 In a nutshell, the native integration enables Target to serve images at open-time in emails. It is good for use cases with a time and/or location dimension. This custom integration enables Target to serve text and images across all channels; however the content is fixed once the message has been sent out.

Below is an example of an A/B test powered by Adobe Target in an email:


How we do it

Before getting started, please note this post only aims at giving a high-level view of the solution, to show what is feasible and the role of each component involved.

The overall idea is that each record targeted by an Adobe Campaign message will be enriched by Adobe Target using the Target API. Now, one could say: “Why not just directly call Adobe Target from Adobe Campaign?” To be clear, this is a possible approach. However Adobe Campaign is only able to make API calls in a synchronous fashion and, unfortunately, Adobe Target does not have a batch API. This means AC needs to make one call to AT per record. It takes about a day for a million records. Thanks to the asynchronous capability of I/O Runtime, Adobe Campaign can pass up to 1000 ids in one single call to I/O, which then asynchronously calls the Adobe Target API.

Solution ArchitectureSolution Architecture


 The following components need to be configured:

  • A Target test returning JSON


  • A Runtime I/O endpoint, calling asynchronously Adobe Target for each id in the payload


 Note: For Adobe Campaign Standard, the “Javascript Code” activity is replaced by an “External API” activity. Get more info here.

In our example the result could be as below:



Without I/O Runtime, Adobe Campaign is the bottleneck and will prevent any large scale campaign to use Target to power the messages content. With I/O Runtime, larger scale campaigns are possible but volume limitations remain. Tests have shown it is possible to get about 100K recommendations in five minutes.

I/O Runtime is billed per number of action executions (among other criteria), so make sure you choose wisely the campaigns you run using this solution –prioritize high value/lower scale.

Next steps

Possible implementation roadmapPossible implementation roadmap

Once the initial integration is up and running, one next step could be to listen to Adobe Analytics Triggers events (documentation here) to trigger near real-time Adobe Target powered messages from Adobe Campaign. How cool would it be to A/B/C test abandoned basket emails or SMS? The architecture for this use case is outlined below:


Originally published: May 6, 2020