---
title: "Profiles in Adapty Mail"
description: "View every customer in your project — their attributes, purchase state, email engagement, and full activity journey."
---

A **profile** is one customer in your project. The **Profiles** page lists everyone Adapty Mail knows about and shows each person's purchase outcome, email engagement, and full activity journey. Profiles arrive automatically: from emails the Adapty SDK collects, or from data you send through the Adapty Mail API.

:::tip
To group profiles into reusable audiences for flows and A/B tests, see [Segments](mail-segments).
:::

## How profiles get into Adapty Mail

Adapty Mail creates profiles automatically from two sources:

- **Adapty SDK**: The SDK collects emails and purchases from your app. See [Collect user emails](mail-collect-emails).
- **Adapty Mail API**: Your backend sends profiles and transactions server-to-server. See [Send data via the API](mail-send-data-via-api).

Adapty Mail links every email, click, and purchase to a profile by its stable `external_profile_id`. The Profiles page is read-only. You can view profiles and unsubscribe them, but you can't create, edit, or delete them. The source app or the API owns that data.

## The Profiles list

The list shows one row per profile, newest first. Use the search box to find a profile by email, profile ID, or external profile ID.

| Column | Shows |
| --- | --- |
| Profile | The customer's email and the campaign that has sent them the most emails. |
| Status | The profile's purchase state. See [Profile status](#profile-status). |
| Country | The customer's country. |
| Open rate | Opened divided by sent across all emails. A dash means no emails were sent yet. |
| LTV | Lifetime value — total revenue from this profile across all sources. |
| Joined | When the profile first entered Adapty Mail. |
| Last activity | How recently the profile engaged with an email, such as a send, open, or click. |

:::important
**Joined** is the date the profile first entered Adapty Mail, used as the "customer since" date. It is the ingest time, not the original signup date from your app.
:::

### Profile status

The **Status** column shows the profile's purchase state — where the customer stands with subscriptions and one-time purchases.

| Status | Meaning |
| --- | --- |
| Never purchased | The profile hasn't bought anything. |
| Purchased | The profile made a one-time purchase. |
| Active subscriber | The profile has an active subscription. |
| Cancelling | Auto-renew is off; access lasts until the current period ends. |
| Billing issue | A renewal payment failed. |
| Grace period | Payment failed, but access continues during the store's grace period. |
| Churned | The subscription expired and access ended. |
| Refunded | A purchase was refunded. |

:::note
Purchase status is separate from email subscription status. A profile can be an **Active subscriber** yet **Unsubscribed** from your emails, or **Churned** yet still **Subscribed**. The email status appears on the profile page and controls whether Adapty Mail can send to the profile.
:::

## Profile details

Click a profile to open its detail page. The header shows the email, country, platform, and "customer since" date. It also shows three status badges: the purchase status, the open rate, and whether the profile is **Subscribed** or **Unsubscribed**.

Five engagement metrics run across the top:

- **Sent**: Emails sent to the profile.
- **Delivered**: Emails the mailbox provider accepted.
- **Opened**: Emails the profile opened.
- **Clicked**: Emails where the profile clicked a link.
- **Revenue**: Two figures — attributed revenue and lifetime value.

:::note
**Attributed revenue** is revenue driven by your emails: purchases the profile made after engaging with a campaign. **Lifetime value (LTV)** is the profile's total revenue across all sources, whether or not email played a part. The header shows attributed revenue first, then LTV.
:::

The **Profile** card lists the customer's attributes:

- **Platform**: The customer's device platform, such as iOS or Android.
- **Country**: The customer's country.
- **Store country**: The country of the customer's App Store or Google Play account.
- **Gender**: The customer's gender, if known.
- **Age**: The customer's age, if a birthday was provided.
- **Profile ID**: Adapty Mail's internal identifier for the profile.
- **External ID**: The `external_profile_id` from your app or backend.
- **Custom attributes**: Any key-value pairs you sent with the profile.

### Purchase state

The **Purchase state** card shows the profile's revenue and purchase history. Lifetime value appears at the top, followed by up to two sections:

- **Subscription**: Price, store, start date, renewal or expiry date, and product ID for the profile's subscription.
- **One-time purchase**: Price, store, purchase date, and product ID for the most recent one-time purchase.

If the profile hasn't bought anything, the card shows **No purchase yet**.

The **Segments** card lists every segment the profile currently matches, or **Not in any segment** if none apply. Membership is evaluated live, so it always reflects the latest profile data. See [Segments](mail-segments) for how to build them.

## The activity journey

The **Journey** section is a timeline of everything that happened to the profile. It starts with **Profile created** and then interleaves two kinds of events:

- **Email events**: Each email sent to the profile, with its delivery, open, and click activity. Expand an email to see the links the profile clicked and any purchase the email drove.
- **Transaction events**: Subscription and one-time purchase milestones, such as starts, renewals, cancellations, billing issues, expirations, and refunds.

Transaction events map to these journey labels:

| `event_type` | Journey label |
| --- | --- |
| `subscription_started` | Subscription started |
| `subscription_renewed` | Subscription renewed |
| `subscription_renewal_cancelled` | Renewal cancelled |
| `subscription_renewal_reactivated` | Renewal resumed |
| `billing_issue_detected` | Billing issue |
| `entered_grace_period` | Entered grace period |
| `subscription_expired` | Subscription expired |
| `subscription_refunded` | Subscription refunded |
| `non_subscription_purchase` | One-time purchase |
| `non_subscription_purchase_refunded` | Purchase refunded |

These events reach Adapty Mail automatically through the Adapty SDK, or you can send them yourself through the API. See [Send transaction events](mail-send-data-via-api#send-transaction-events) for the event reference.

## Unsubscribe a profile

To stop sending emails to a profile, open its page, click **...**, and select **Unsubscribe**. Adapty Mail marks the profile as unsubscribed and adds it to your suppression list, so campaigns and flows skip it.

The action is idempotent: a profile that is already unsubscribed stays unsubscribed. For the full picture of suppression and how profiles unsubscribe themselves, see [Unsubscribe and suppression](mail-suppression).