---
title: [App] Skinny profiles
slug: ikea-summer-2025-hol/app-skinny-profiles
docTags: 
createdAt: 2025-06-30T14:13:36.673Z
---

### Overview

This section is an Appendix; it describes **skinny** profiles created by the **Save audience&#x20;**&#x61;ctivity and how to leverage them with AEP.

When a marketer saves an audience that is made with a federated composition flow, 2 cases happen:

1. When the audience members already exist in AEP:&#x20;
   - The "Save audience" activity references those existing AEP profiles by their identity (e.g., email, CRM ID, etc.).&#x20;
   - It does not create duplicate profiles; the computed segment/segment membership is simply assigned to profiles that already exist, allowing for immediate targeting or activation.
2. When the audience contains members *not* found in AEP:
   - For records that do *not* reconcile with existing AEP profiles, *FAC will create a lightweight or “empty” profile* in AEP, with *only the mapped identity fields and segment membership*.
   - These profiles are persisted temporarily, with a default time-to-live (TTL) of 30 days. These are sometimes referred to as “skinny” or “lightweight” profiles.
   - If more data about the profile is later ingested into AEP (via other pipelines or sources), these empty profiles are enriched into full profiles.

This section describes how to leverage skinny profiles and data put in the audience with AEP.

### Create an audience of customers who have consented to receive marketing emails

The marketer wants to deliver a marketing email to a list of customers. These customers exist in the datawarehouse; some of them exist in AEP and the others doesn't exist.

A data model has been exposed to the marketer with a LUMACUSTOMER table that contains:

- Email address
- Gender, first name, last name...
- Email optin (IBLACKLISTEMAIL field)&#x20;

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

The marketer made a flow to select customers, who have consented to received marketing emails and who have made many purchases this year.

- Look at the flow named [bouessay - Customers  who have made a purchase this year + Email Optin](https://experience.adobe.com/#/@demopotemea/sname\:sandbox59/platform/federated-data/xtkWorkflow/8620)
- Especially the **Query&#x20;**&#x61;nd **Enrichment&#x20;**&#x61;ctivities:

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

- Then look at these 3 other activities to discover how the Count aggregate has been set and used to filter the sets:

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

- The last activity saves data ins AEP (audience membership and attributes):&#x20;



::Image[]{src="https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/u7ZwGKuQA0IbFkBU_r47n_image.png" size="70" width="620" height="743" position="center" showCaption="false"}

### Focus on the data put inside Adobe Experience Platform

The **Save audience** activity has created:

- A schema: [bouessay - 100 Customers who have made a purchase this year + Email Optin](https://experience.adobe.com/#/@demopotemea/sname\:sandbox59/platform/schema/browse/https%3A%2F%2Fns.adobe.com%2Fdemopotemea%2Fschemas%2Fa3e12856e910bb7c892a62b70e4e1c4b525264f082708c21)

::Image[]{src="https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/tcr128qXa3Y1qnJUN3sF8_image.png" size="70" width="549" height="430" position="center" showCaption="false"}

- A dataset: [bouessay - 100 Customers who have made a purchase this year + Email Optin](https://experience.adobe.com/#/@demopotemea/sname\:sandbox59/platform/dataset/browse/686d2026ad63502aef6b7063/activity?initialLoad=true\&limit=50\&page=1\&sortDescending=1\&sortField=created)

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

Then a job in AEP has created the audience memberships.

- Load a profile from this dataset by looking for the email adress; for instance `Email = NmFmC@emailsim.io`
- Go to the attributes section and show the JSON:

```json
{
	"identityMap": {
		"email": [
			{
				"id": "NmFmC@emailsim.io"
			}
		]
	},
	"segmentMembership": {
		"CustomerAudienceUpload": {
			"e3aa1365-1ee6-49d1-af2a-de1ce08bce45": {
				"lastQualificationTime": "2025-07-09T09:58:48Z",
				"status": "realized",
				"payload": {
					"payloadStringValue": "631e29a1fae3eba8c38b532e095c4a0c",
					"payloadType": "String"
				}
			},
			"5156d0ba-d360-4dd3-86f3-8eb64c201b58": {
				"lastQualificationTime": "2025-07-08T13:50:38Z",
				"status": "realized",
				"payload": {
					"payloadStringValue": "3dde7ac9ba158dd76f82dcaec0113ccb",
					"payloadType": "String"
				}
			},
			"d4afac9c-d4cf-4700-b65c-5b0f3c07610c": {
				"lastQualificationTime": "2025-07-07T13:32:11Z",
				"status": "realized",
				"payload": {
					"payloadStringValue": "901b55ca36ca4b0510e3a230cec1c168",
					"payloadType": "String"
				}
			}
		},
		"ups": {
			"50ca8933-4e37-4f10-9890-cb0e30b78a31": {
				"status": "realized",
				"lastQualificationTime": "2025-07-08T00:22:43Z"
			}
		}
	},
	"mergePolicyId": "dea53d09-6584-4a76-b662-5ccbd89b2a30",
	"lastModifiedAt": "2025-07-09T10:05:51Z"
}
```

&#x20;This is a **skinny&#x20;**&#x70;rofile as it contains only 2 sections:

- IdentityMap&#x20;
- segmentMembership

A skinny profile doesn't contain attribute.

### Deliver the messages with the standard Email action

Look at the journey named [\[Example \] Read FAC audience + Send Email III](https://experience.adobe.com/#/@demopotemea/sname\:sandbox59/journey-optimizer/journeys/journey/fa54d6df-0f5a-4c8d-8a9d-33622c08ef12)


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

Click on the **View content** button of the Email activity

Look at the path of the personalization field:&#x20;

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

:::hint{type="info"}
The **Email surface** has been set to find the email adress of the profile inside the identityMap

::Image[]{src="https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/RNHULYDCbkzLu7pU1tBLH_image.png" size="80" width="526" height="91" position="center" showCaption="false"}
:::

### Deliver the messages with a Custom Action

Look at the journey named [\[Example\] Read FAC audience + webhook](https://experience.adobe.com/#/@demopotemea/sname\:sandbox59/journey-optimizer/journeys/journey/5801d243-0f05-497a-946f-4628090b0d1d)



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

Look at the Custom Action named **sendToWebhook&#x20;**&#x65;specially in the **Request parameters** section the way to access the data from the audience:

::Image[]{src="https://api.archbee.com/api/optimize/1Jp0iolWv35Z_mkI7oUiT/fZtI7seK5zLUsEDCjM10M_image.png" size="50" width="249" height="372" position="center" showCaption="false"}

If you create a new journey, the UI show the data available from the audience this way:



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

:::hint{type="success"}
Now, you know :

- What is a "skinny" profile&#x20;
- How to access data from the audience with a standard action like Email
- How to access data from the audience with a custom action like the webhook
:::

