Profiles in Adapty Mail
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.
To group profiles into reusable audiences for flows and A/B tests, see 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.
- Adapty Mail API: Your backend sends profiles and transactions server-to-server. See Send data via the 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. |
| 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. |
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. |
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.
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_idfrom 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 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 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.