---
title: Lab 4 - Federated Audiences
slug: syd2025/lab-4-federated-audiences
docTags: 
createdAt: 2025-05-12T00:54:37.316Z
---

## Learning Objectives&#x20;

In this exercise you will learn how to create a federated audience composition and save the results of your composition as an audience in Adobe Experience Platform. &#x20;

## Scenario&#x20;

SecurFinancial are a leading retail bank offering personal banking services across a range of loans, credit cards and insurance products.  They have successfully implemented Adobe Experience Platform Real-Time CDP and are actively using it to build and activate audiences. However, as the bank scales its personalisation efforts, it encounters a new challenge: **some critical customer data remains in external systems** due to regulatory, operational, or architectural constraints.

To address this, SecurFinancial has adopted **Federated Audience Composition. &#x20;**

:::hint{type="info"}
**Why SecurFinancial Chose Federated Audience Composition:**

1. **Data Residency & Compliance:**
   Certain customer data (e.g., credit scores, risk profiles, or sensitive financial indicators) must remain in on-prem or third-party systems due to compliance with financial regulations.
2. **Operational Efficiency:**
   Moving large volumes of data into AEP for segmentation was time-consuming and costly. Federated composition allows the bank to **query external data sources** without ingesting them into AEP.
3. **Faster Time-to-Market:**
   Marketing teams can now build audiences that include external attributes without waiting for data ingestion pipelines to complete.
4. **Unified Segmentation Strategy:**
   Enables the creation of **hybrid audiences** that combine real-time CDP data with external data sources like core banking systems, CRM, or risk engines.
:::

**Lab Use Case: High-Value Credit Card Upsell**

**Objective:**
Target customers who are eligible for a premium credit card based on financial criteria.

**Federated Audience Criteria:**

- Credit score above 661.
- Household income over $200,000.
- No failed payments in the last 12 months.

**Activation Channels:**

- Personalised email with pre-approved offer from Adobe Journey Optimizer
- Mobile push notification with “Apply Now” CTA via Adobe Journey Optimizer
- Web personalisation on login dashboard via Adobe Target

## Access

Switch from Customer Journey Analytics to **Adobe Experience Platform** using the solution switcher.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/JUUUWygrUR4J1J5Iocg50_image.png" size="82" width="1728" height="868" position="center" showCaption="false"}

Once loaded, confirm that you are in the right sandbox - it should be **FAC (AUS5)**

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

## 4.1  View the Connection and Mapping

For this exercise the connection to our Snowflake data warehouse has already been established.   You can view the connection by navigating t&#x6F;**&#x20;Federated Data -> Federated Databases:&#x20;**

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

After establishing the connection, we need to map the tables and fields that will be available to AEP users to query.  Click on the **Models&#x20;**&#x6D;enu item under **Federated Data.&#x20;**

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

Each schema outlines a table in the data warehouse along with the fields that are visible to AEP users.    Click on **SECURFIN\_PROFILES&#x20;**&#x74;o view the mapping.  Columns can be hidden from view if desired by editing the schema description.   The schema is generated automatically after selecting the table through the connection - updates to the source schema can also be automatically retrieved when needed.  &#x20;

:::hint{type="warning"}
You have read only access so you won't see the edit options shown in the image below.&#x20;
:::

Once the tables are mapped, we need to define how they relate to each other.   Return to Models and open the **Data model&#x20;**&#x74;ab.&#x20;

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

Here schemas are grouped into data models.   Click to open the **SECURE\_FINANCIAL&#x20;**&#x64;ata model.    Here you can see the schemas that are included and the links that have been defined between them, for example records in SECURFIN\_PROFILES are linked to one or more (1\:N) SECUREFIN\_ACCOUNTS - we will use these link definitions in our composition to easily join tables and change the query from reading one table to another.

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

Click on the **Canvas View** to show an ER diagram view of the mapped data model.&#x20;


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

## 4.2 Create a federated audience

Using federated audience composition we can ask Snowflake to run queries and transfer to Adobe only the resulting list of customer id's.   Keeping sensitive data secure and minimising duplication across systems.  &#x20;

We build the query (or series of queries) that will run in Snowflake through what we call a **federated composition.  &#x20;**

For this exercise, we will create a single query joining profiles and transactions in snowflake to understand customers with a credit score over 661 who have not had any failed payments in the last 12 months.   We'll execute that query in snowflake and return to Adobe a list of CRM Id's only.  &#x20;

From the audience portal click to the **Federated Compositions&#x20;**&#x74;ab.&#x20;

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

Click to **Create Composition**

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

Give your composition a unique **Label** (and your name or lab number so you can recognise it again) and select the **SECUR\_FINANCIAL&#x20;**&#x44;ata Model - this controls which federated database we connect with and which tables are accessible within that warehouse.    Then click **Create.&#x20;**

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

Click the plus icon in your composition and add a **Build Audience** activity.

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

The activity properties appear on the right hand side.   For the Build Audience activity we need to select the schema (ie. table) from the data warehouse that we want to query.   Click on the schema field to open the list of mapped tables. &#x20;

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

Choose the **SECUREFIN\_PROFILES** schema and click **Confirm**

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

Once selected, click **Continue&#x20;**&#x74;o configure the query parameters.&#x20;

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

In the query builder, click the + icon to add a **custom condition.&#x20;**

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

Select the **CREDIT\_SCORE&#x20;**&#x61;ttribute and click **Confirm**

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

Change the operate to **greater than&#x20;**&#x61;nd the value to **661&#x20;**&#x74;o find customers with a good credit score. &#x20;

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

You can check the number of qualifying profiles by clicking the **calculate** button at any time.&#x20;

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

Now we want to further filter the audience to include only customers who have not had any failed payments in the last 12 months.   Click the + icon on the lower branch to add another custom condition.

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

Scroll down to where you can see the linked tables.   Select the **TRANSACTIONS&#x20;**&#x74;able and click **Confirm.**

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

This automatically adds the condition that the profile must have linked transactions - we want customers that haven't had specific transactions so change the Operator to **do not exist such as**. &#x20;

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

Now click th&#x65;**&#x20;+** to add a new sub condition to our query.  &#x20;

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

Select the **PAYMENT\_STATUS&#x20;**&#x61;ttribute

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

Set the value to **Failure**

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

Add another custom condition by clicking on the plus.

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

Select the **TRANSACTION\_DATE&#x20;**&#x61;ttribute and set the conditions to **on or after&#x20;**&#x61;nd preset **N Months Ago&#x20;**&#x61;nd value **12.  &#x20;**

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

You can click the **Calculate** link to refresh the count.   Click **Confirm** to finish configuring the query. &#x20;

![](https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/uE-cnuuvb-c-qOvAR8e9g_image.png)

Back in the composition canvas, click to **Save&#x20;**

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

We can continue to add activities to the composition to add additional exclusions or intersections with other data but for this simple use case we are ready to save the result of our query as an audience.   Click the + icon and select the **Save Audience&#x20;**&#x61;ctivity.

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

Give your audience a name like **Lab User XX - Pre-qualified CC Prospects.   &#x20;**

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

Next we have to configure the audience mapping, this is how we control which data fields are transferred from Snowflake to Adobe.   Click the **+ Add Audience Mapping&#x20;**&#x62;utton.

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

In this case the only information we need from Snowflake are the customer id's, none of the raw transaction data or credit information will leave Snowflake.  Click through to the **Targeting Dimension** and then select the **CRMID&#x20;**&#x61;ttribute and click **Confirm.**

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

Once we've selected the identity field in snowflake we need to define which identity namespace it will match to in Adobe Experience Platform.   Set the **Identity Namespace&#x20;**&#x66;ield to **Demo System - CRMID&#x20;**&#x61;nd click **Select.**

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

Your settings should look like this:&#x20;

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

:::hint{type="info"}
If you want, you can add additional audience mapping attributes to send additional data fields from snowflake to AEP as part of the audience context, but this is not required.   These additional attributes can be used for personalisation in AJO or passed to connected destinations via RT-CDP.

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



Click to **Save&#x20;**&#x74;he composition

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

With our composition configured, click **Start&#x20;**&#x74;o run the workflow.  This will execute the query in Snowflake and transfer the results to Adobe.&#x20;

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

You can see the result of the query displayed as the composition executes.&#x20;

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

Click on Audiences beside the composition label to return to the audience portal.&#x20;

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

You should see your audience in the list of audiences with origin Federated Audience Composition.   &#x20;

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

Click on the audience name and you can see the details of the ingestion from Snowflake.

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

Congratulations, you've created your first Federated Audience!     You can now activate them using RTCDP's Destination catalog or target them in a Campaign or Journey in AJO.  &#x20;

Beyond the audience membership, any additional attributes that are passed from the warehouse are also available for activation or personalisation. &#x20;

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

## Summary

Congratulations, you've completed the exercise on Federated Audience Composition.    You learned how SecurFinancial extends its segmentation capabilities by querying external data sources—without ingesting them—enabling faster, compliant, and more flexible audience creation.

We've only barely touched the surface of the types of audiences that can be built with Federated Compositions - we'll dive further into the different use cases supported and some more advanced composition examples after the break today! &#x20;

:::hint{type="info"}
If you still have time available, try one of the other labs!&#x20;
:::

