Profiles/CRM
Profiles is a CRM for your users. With Profiles, you can:
- Find specific users by profile ID, customer user ID, email, or transaction ID.
- Explore the full payment path of a user including billing issues, grace periods, and other events.
- Analyze user's properties such as subscription state, total revenue/proceeds, and more.
- Grant the user a subscription.
Subscription state
In a full table of subscribers, you can filter, sort, and find users. The state describes the user state in terms of a subscription and can be:
| User state | Description |
|---|---|
| Subscribed | The user has an active subscription with auto-renewal enabled. |
| Auto-renew off | The user turned off auto-renewal but still has access to premium features until the end of the subscription period. |
| Subscription cancelled | The user canceled their subscription, and it has fully ended. |
| Billing issue | The user couldn’t be charged due to a billing issue, either after their subscription or trial expired. |
| Grace period | The user is currently in a grace period due to a billing issue that occurred when attempting to charge them after their subscription or trial expired. |
| Active trial | The user has an active subscription that is currently in its trial period. |
| Trial cancelled | The user canceled the trial and does not have an active subscription. |
| Never subscribed | The user has never subscribed or started a trial and remains a freemium user. |
User attributes
You can send any properties that you want for the user.
By default, Adapty sets:
| Property | Description |
|---|---|
| Customer user ID | An identifier of your end user in your system. |
| Adapty ID | Internal Adapty identifier of your end user, called Profile ID. |
| IDFA | The Identifier for Advertisers, assigned by Apple to a user's device. |
| Country | Country of your end user. |
| OS | The operating system used by the end user. |
| Device | The end-user-visible device model name. |
| Install date | The date when the user was first recorded in Adapty:
|
| Created at | The date the user was created. |
For a better understanding of your user, we suggest sending at least your internal user ID or user email. This will help you to find a user.
After installing SDK, Adapty automatically collects user events from the payment queue and displays them in a user profile.
Custom attributes
You can see custom attributes that were set either from SDK or manually assign them to the user using the Add attribute button in the Attributes section on the profile page.
Grant a subscription
In a profile, you can find an active subscription. At any time you can prolong the user's subscription or grant lifetime access.
It's most useful for users without an active subscription so you can grant the individual user or a group of users premium features for some time. Please note that adjusting the subscription date for active subscriptions will not impact the ongoing payments.
Expires at must be a date in the future and can't be decreased ones set.
Profile record creation
Adapty creates an internal profile ID for every user to track their purchases, events, and subscription state. You can optionally set a Customer User ID to identify users in your own system.
Without a Customer User ID, a new profile is created each time:
- A user launches your app for the first time after installation
- A user reinstalls the app
- A user logs out of your app
With a Customer User ID, profile behavior depends on when you identify:
- Identify during SDK activation: Adapty uses the existing profile with that customer user ID (for returning users) or creates a new profile (for first-time users).
- Identify after SDK activation: Adapty creates an anonymous profile on activation. When you later identify the user, it links that customer user ID to the anonymous profile (for first-time users) or switches to the existing profile with that ID (for returning users).
Using a customer user ID gives you several advantages:
- You can track a user across app reinstalls and multiple devices, making it easier to maintain a complete user history.
- You can find users by their customer user ID in the Profiles section and view their transactions and events.
- You can use the customer user ID in the server-side API.
- The customer user ID will be sent to all integrations.
Parent and inheritor profiles
When multiple profiles are connected to the same subscription (through the same Apple/Google ID), Adapty tracks them using a parent-inheritor relationship. This happens when a user reinstalls the app without identifying, or when different identified users restore purchases on the same device.
The parent profile is the one that made the purchase—not necessarily the first profile created. For example, if you install the app, don't buy anything, then reinstall and purchase a subscription, your second profile becomes the parent (it made the purchase), while your first profile becomes the inheritor (it gains access through sharing).
How events are distributed:
- Transactional events (purchases, renewals, cancellations, billing issues, grace periods, refunds): Only appear on the parent profile that made the purchase. All subscription renewals and updates continue appearing on this profile.
- access_level_updated events: Appear on both parent and inheritor profiles whenever the access level state changes, ensuring all connected profiles stay updated about their current access status.
This means the parent profile (the one that purchased) shows the complete transaction history, while inheritor profiles show only their access level updates along with a link to the parent profile in the Access level section.
The Sharing paid access between user accounts setting controls which profiles receive access level updates:
- Enabled (default): Both parent and inheritor profiles receive access_level_updated events as long as access remains shared
- Transfer access to new user: When access is transferred, the new owner becomes the active profile and receives access_level_updated events, while the previous owner stops receiving them
- Disabled: Only the parent profile maintains the access level. Inheritor profiles don't receive access unless explicitly granted
Event timestamps with future dates
Why do events show future timestamps in profiles and integrations? Event timestamps may appear with future dates in profiles and integrations because Apple sends renewal events in advance.
- Why it happens: Apple does this to ensure subscriptions renew automatically before expiring, preventing user service interruptions. For more details, check Apple’s Developer Forum: [Server Notifications for Subscriptions](Server Notifications for Subscriptions).
- Event types affected: Typically, this applies to subscription renewals and trial-to-paid conversions. These events may have future timestamps because Apple notifies systems about them ahead of time. All other events—like additional in-app purchases or subscription plan changes—are recorded with their actual timestamps since they cannot be predicted in advance.
- Impact on Analytics and Event Feed: These events will only appear in Analytics and the Event Feed once their timestamps have passed. Events with future timestamps are not shown in either section.
- Impact on Integrations: Adapty sends events to integrations as soon as they are received. If an event has a future timestamp, it will be shared with your integration exactly as received.
Sharing access levels between profiles
When a Customer User ID tries to restore transactions or extend a subscription that is already associated with a different identified Customer User ID, you can control how Adapty responds by adjusting the Sharing paid access between user accounts dropdown in the Adapty Dashboard -> App settings -> General tab:
Enabled (default)
Identified users (those with a Customer User ID) can share the same access level provided by Adapty if their device is signed in to the same Apple/Google ID. This is useful when a user reinstalls the app and logs in with a different email — they’ll still have access to their previous purchase. With this option, multiple identified users can share the same access level.
Even though the access level is shared, all past and future transactions are logged as events in the original Customer User ID to maintain consistent analytics and keep a complete transaction history — including trial periods, subscription purchases, renewals, and more, linked to the same profile.
Transfer access to new user
Identified users can keep accessing the access level provided by Adapty, even if they log in with a different Customer User ID or reinstall the app, as long as the device is signed in to the same Apple/Google ID.
Unlike the previous option, Adapty transfers the purchase between identified users. This ensures that the purchased content is available, but only one user can have access at a time. For example, if UserA buys a subscription and UserB logs in on the same device and restores transactions, UserB will gain access to the subscription, and it will be revoked from UserA.
If one of the users (either the new or the old one) is not identified, the access level will still be shared between those profiles in Adapty.
Although the access level is transferred, all past and future transactions are logged as events in the original Customer User ID to maintain consistent analytics and keep a complete transaction history — including trial periods, subscription purchases, renewals, and more, linked to the same profile.
After switching to Transfer access to new user, access levels won’t be transferred between profiles immediately. The transfer process for each specific access level is triggered only when Adapty receives an event from the store, such as subscription renewal, restore, or when validating a transaction.
Disabled
The first identified user profile to get an access level will retain it forever. This is the best option if your business logic requires that purchases be tied to a single Customer User ID.
Note that access levels are still shared between anonymous users.
You can "untie" a purchase by deleting the owner’s user profile. After deletion, the access level becomes available to the first user profile that claims it, whether anonymous or identified.
Disabling sharing only affects new users. Subscriptions already shared between users will continue to be shared even after this option is disabled.
Apple and Google require in-app purchases to be shared or transferred between users because they rely on the Apple/Google ID to associate the purchase with. Without sharing, restoring purchases might not work upon subsequent reinstalls.
Disabling sharing may prevent users from regaining access after logging in.
We recommend disabling sharing only if your users are required to log in before they make a purchase. Otherwise, an identified user could buy a subscription, log into another account, and lose access permanently.
Which setting should I choose?
| My app... | Option to choose |
|---|---|
| Does not have a login system and only uses Adapty’s anonymous profile IDs. | Use the default option, as access levels are always shared between anonymous profile IDs for all three options. |
| Has an optional login system and allows customers to make purchases before creating an account. | Choose Transfer access to new user to ensure that customers who purchase without an account can still restore their transactions later. |
| Requires customers to create an account before purchasing but allows purchases to be linked to multiple Customer User IDs. | Choose Transfer access to new user to ensure that only one Customer User ID has access at a time, while still allowing users to log in with a different Customer User ID without losing their paid access. |
| Requires customers to create an account before purchasing, with strict rules that tie purchases to a single Customer User ID. | Choose Disabled to ensure that transactions are never transferred between accounts. |
Access sharing history
When access levels are shared or transferred, you might want to know who granted access to the current user or who the current user shared their access with. To find out, just open the user’s Profile and click the link to view the connected profile.