Hi @ma1985v1,
This can be done with some customization and an XT or Experience Targeting activity. An XT activity will allow you to create experiences and then prioritize the order that a visitor qualifies for them. Move experiences to the top for higher priority. Tracking the views of each experience is where the customization comes in. You need to fire a request back to Target so it can "count" views of a particular experience. This way you can increment a profile script that can be used in an audience definition.
Full explanation:
- Create a profile script to count experience views per visitor
- Target > Audiences > Profile Scripts > Create Script
- Name it: expImpCounts
- Code:
if (mbox.name == 'impressionCount') {
var exp = mbox.param('experience');
var cur = user.get("expImpCounts");
try {var cur = cur.split(":")} catch(err) {cur = [];}
if (cur[0] == exp) { return (exp+":"+(parseInt(cur[1])+1))}
else {return (exp+":1")}
} - This will return the experience name (you'll later pass as an mbox parameter) and a count of the view. In my example, I'll call my experiences: expA, expB, expC...so values will end up looking like: expA:1 or expB:3.
- Create audiences for the different experiences based on the priority and max number of impression you want each to see.
- Name your audience. E.g., "Gets Exp C"
- Rule definition: Visitor Profile: user.expImpCounts > equals > expB:3, expC:1 or expC:2
- This means once they've seen experience B 3 times I want them to qualify to see experience C and continue to see it even if they've seen experience C 1 or 2 times previously.
- In the current audiences UI it will look like this:

- Set similar audiences for the other experiences in your activity. The exception is the first experience which needs a slightly different audience rule since it will be the one visitors first qualify for. You could define it like this (making sure it has the lowest priority - so listed last):
Visitor Profile: user.expImpCounts > does not contain (case insensitive) >
expB or expC
- Build your experience and if using the VEC then add a custom code modification to each of them with a simple script tag to fire the "impression" signal back to Target. The custom code modification could look like this:
<script>adobe.target.trackEvent({mbox:'impressionCount', params:{'experience':'expA'}});</script>Adjust the experience value for the current experience.
There are likely other ways to make this happen but this should help you get what you are looking for.