---
title: Lab 4 - Post Purchase Journey
slug: rag/lab-4-post-purchase-journey
docTags: 
createdAt: 2026-03-14T04:30:24.869Z
---

# Learning Objectives&#x20;

In this Lab we'll create a post purchase journey to cross sell products based what the customer just purchased. &#x20;

The journey will be triggered by the purchase event and will use dynamic content to select the right products to promote based on the products in the current purchase event. &#x20;

If the customer does not click on the email for 1 day the journey will follow up with a push notification instead. &#x20;

Re-entry criteria will restrict customers entering the journey more than once a week and   exit criteria will ensure they are removed if a new purchase is made. &#x20;

For paid media channels we'll use separate audiences since you'll need to define different audiences per category while journeys can use context to reduce the configuration effort. &#x20;

# 4.1 Create a journey

Navigate to **Journey Management -> Journeys&#x20;**&#x61;nd click on **Create Journey.**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/03ANzJF1mHzgdIc_fgJDL_image.png)

Give your journey a **name**, add your initials so you can recognise it from other lab participants.    You can also set the success metric for the journey based on the objective.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/y7eVSq6uC02-3kbA5Bjm1_image.png)

Scroll down to manage the **re-entrance&#x20;**&#x63;riteria.   Chances are you don't want people to enter this journey every time they make a purchase - we can limit how frequently it can be entered here. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/-W4jRiffY1tHCvRksg5z6_image.png)

**Save** the properties and move to the **Exit Criteria** tab.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/KS7VGtJpPh5P9oG49PILs_image.png)

We can use either events or audience memberships to exit profiles from the journey after they've entered.  Select the **luma\_purchase&#x20;**&#x65;vent to exit profiles when they make another purchase.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/lihJgUccfOo6JOeSL6ODt_image.png)

**Save** the exit criteria.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/xbXl2UpiyRDXWgykTFT8B_image.png)

Now we'll add the journey logic.   Journeys can be triggered from individual events or when a customer enters or exits a streaming audience.   You can see the events that are configured as journey triggers in the left panel - this list is configurable and will depend on your implementation.   Drag the **luma\_purchase** event into the canvas.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/TViXi6bI-Fb1oaWrYyWlO_image.png)

From the Actions panel, add an **Action&#x20;**&#x61;ctivity after the event. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/5r6Z2gg3Ttx7yizbgSNF1_image.png)

Set the action type to **Email.**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/4xSSAvOBsRUNYRZbznVZB_image.png)

Drag a **Reaction&#x20;**&#x6E;ode from the Events panel and add it after your email.   Add a **Timeout&#x20;**&#x63;ondition.  This will make the journey wait for 1 day, if the customer clicks on any links in the email they will follow the top path otherwise after 1 day they'll follow the timeout path. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/pbrIR1m3Xk2FPPYJ2slMn_image.png)

Lastly add another **Action&#x20;**&#x6E;ode to the timeout path. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/2leqne6rotlWbVjZAH-Zd_image.png)

Set the action type to **Push&#x20;**&#x61;nd click to Add.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/HDMAf4566-eDDGo8Ucs-6_image.png)

Your journey logic is now complete.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/dw7_2P1BNU580zbrshgtW_image.png)

Next we'll add the content.&#x20;

# 4.2 Add Email Content

Select the email activity in your journey and click to **Configure action.**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/kXQ_jcQWYiCcY4Udpm_cO_image.png)

Set the email **configuration** to email-batch.   Note that you can also use send time optimisation to send the message at the most appropriate time per customer. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/j506COI_249oOL0AhYqrU_image.png)

Click to **Edit Content.  &#x20;**&#x49;n order to save time, we've pre-built a dynamic template for you, click to **Apply content template.&#x20;**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/-SBs2QvSoS_Zft7Bvi5gM_image.png)

Select the **Post Purchase Template - Dynamic.**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/Vd8-tHja6B86qdA4JW_MM_image.png)

Click to **Edit email body**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/zWj89RvjY7HJRGRCTgQml_image.png)

We've used dynamic content to change which products are shown in the email depending on the cart details which came in with the purchase event.   Click the block with the products in it.   You'll notice the outline is orange, this indicates that the block has dynamic rules attached.   The panel on the left will automatically change to **Conditional Content.**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/FAoiQQWQHC4ATtbggMxpf_image.png)

You can switch between the variations by clicking on the blocks.   New variants can be added at any time.   Select the **Purchased Pants** variant and click to edit the condition.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/IqT1ULPExTzivB5rpLKTS_image.png)

This opens the rule builder where you can see we have access to all of the profile attributes and audiences but also the **Context&#x20;**&#x6F;f the journey.   This means we can look up the products included in the **luma\_purchase** event that triggered the journey entry. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/5jiJptfdygGNdZ8VwSgtw_image.png)

Conditional content blocks are a great way to personalise communications and ensure each customer receives the most relevant content based on their real time behaviour.

# 4.3 Add Push Content

Select the push action in your journey and click to configure the action.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/y_By7Vs1lsYwixWfifPZL_image.png)

Select the **push-batch&#x20;**&#x63;onfiguration and click to **Edit content.&#x20;**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/H9oHt33RC3mTr4JdWdAGo_image.png)

Add a generic **title** then click to open the personalisation editor for the message **body**.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/Hq5ZXCLDANY0iSiQh2Ajr_image.png)

Our saved conditions are available to insert into the push message also.   Click on **conditions&#x20;**&#x74;hen use the **+&#x20;**&#x74;o inject the condition syntax into the content.  &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/v5IwegZ4VpNp5tkC-1Yka_image.png)

Add your message between the code blocks.   You can use \{%else%} to insert default content.   For example:&#x20;

```javascript
Marvel Smart Linen shirts - built for summer dress codes
{%else%}
Elevate your professional wardrobe with our premium collection of men's dress pants and trousers.
```

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/eVOBK3fvCAerN0HC7Wx_V_image.png)

Your push message is now ready.   Return to the journey using the arrow on the top left.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/h4CUAdUe2x6mA1FKJJPIM_image.png)

**Save** the activity and your journey is now complete.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/wnF-PVrq54qAcYpMFIKM1_image.png)

# 4.4 Paid media targeting

For social and paid media we'll use a separate audience to manage the targeting, this is required since each product category will require their own audience.  Context data is not available at the audience level.   &#x20;

Adobe's sequential segmentation engine will allow you to easily create an audience which finds people who have completed a purchase event within a specific category but do not have a second purchase event in the cross sell category.  &#x20;

Click to view the **Luma - Purchased pants no tops&#x20;**&#x61;udience.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/dlkcuDgdXO2cZYLQQIyvZ_image.png)

You can see the sequential logic defined within the audience builder.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/EVQA4rNRC1emxX92DERyy_image.png)

This audience can be activated to paid media destinations the same as shown in Lab 3. &#x20;

# Bonus Exercise

## Decisioning

Dynamic content is a great way to personalise communications but has limitations when it comes to scale.  You don't want to create 50 variants in the email editor!  This is where Adobe's Content Decisioning can help!   &#x20;

Using decisioning the content is chosen from a centralised catalogue based on business rules or predictive AI.  &#x20;

The centralised offer catalog can be found under **Decisioning -> Catalogs.**

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/qKB6XFzcRP3E4YhhqlxTX_image.png)

Offers are grouped into **Collections** which are then applied to **Selection strategies**.  Each offer contains standard attributes like validity dates and tags but also supports custom attributes to hold the content of the offer.  &#x20;

::::Tabs
:::Tab{title="Standard Attributes"}
![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/loKZIbhf6hDfBHd7FRqAV_image.png)
:::

:::Tab{title="Custom Attributes"}
![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/2XR3sXzuRb4esW9qhOyLj_image.png)
:::
::::

Eligibility conditions control which customers are allowed to receive each offer.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/C2oezl3QgbGlOSrmiVKyU_image.png)

Offers are ranked by either a static priority value, a formula (expression) or AI.   This ensures customers eligible for more than 1 offer are shown the most relevant to them. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/f3BuO-EcO988h7J8oGmcS_image.png)

You can enable your email for decisioning by switching the toggle before opening the email designer.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/MwRXIp6JzZsKNYutyh42n_image.png)

Within the Email designer you can now add a **Decision Policy&#x20;**&#x74;o a content block. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/nnT5JtkR0X6D1V4XFDkEo_image.png)

The policy defines the selection strategy to use and how many offers to return.  &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/3OhkIRG08yXz2QA1yDSUg_image.png)

The **Placement** name helps to identify the block in reporting if multiple offer blocks are included in the same communication.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/snkF1zOiFp4YuSpuRNgKw_image.png)

With the policy added you can now leverage the offer attributes to create your content.  I'm using the medium resolution image url from my offer to populate the source field for this banner image.&#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/HTSmbJxA1BEr_0KBvN6uf_image.png)

You can view the variations through the simulation view.

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/dXy79Sg2jRoyxUac27b8R_image.png)

Different customers will receive different content according to the decisioning rules.  As a campaign manager you only need to configure one block.   You can also reuse the selection strategy in other messages and across channels to ensure consistency.&#x20;

::::Tabs
:::Tab{title="Platinum members"}
![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/Rs_R3HhexulTqiZWcVkDW_image.png)
:::

:::Tab{title="Silver members"}


![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/QccZ3pUyiD0CKQemViOna_image.png)
:::
::::

# Summary&#x20;

Real-time journeys in Adobe Journey Optimizer allow brands to react instantly to customer behaviours and signals, delivering timely, relevant messages at the exact moment intent is highest. By orchestrating experiences as events happen, marketers can reduce latency, increase engagement, and create more meaningful, contextual customer interactions across channels.

A centralized decisioning catalog provides a single source of truth for offers, eligibility rules, and constraints, ensuring consistent decisions across channels and journeys. By reusing and governing decisions in one place, teams can scale personalization faster, reduce duplication, and maintain control as use cases grow.

