This article is based on the WWDC 2020 presentation and provides guidance on a subscription app’s entitlement architecture. It would be useful for engineers, server-side teams, and data analysts.
![Architecting Subscription Entitlement Engine](https://framerusercontent.com/images/8T3Sy80Qv9wb1Zr0vbTSf0EhwlA.jpg)
Understanding the subscriber journey
Subscription Entitlement Engine
Access to content is the fundamental basis of subscription entitlement. And access may vary depending on the level of service, geography, and other factors. As was shown above, a subscription can have several states. The entitlement process needs to account for all of the potential subscription states.
To be able to manage user access, power tailored communication with your users, win lapsed users back, and so on, you need to build server-side logic that digests all subscription state data. Apple refers to this as the Entitlement Engine. (Note: Apple provided the sample Entitlement Engine code in node.js.)
The data digested by the Entitlement Engine is used to calculate the user’s entitlement. The Engine needs to calculate the correct entitlement info using the receipt data, app insights, and server-to-server notifications. The output of the Entitlement Engine is a simple JSON payload that you can use to entitle service and update your user database.
![](https://framerusercontent.com/images/JRVctBLkavCZW8v2YDhMFGEHxuk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-entitlement-process.png)
Key processes of the Entitlement Engine:
Prepare data: The app receipt is the source of truth for transactional data. So you need to fetch the most up-to-date info for the receipt from App Store to make sure it’s not outdated. Get server-to-server notifications.
Synthesize data: Digest transactional data, detect where the user is in the subscriber journey. Add data from the app, for example, hours watched, upcoming events a user is interested in, etc.
Condense the data into actionable insights, that will be used in the response.
Build the Response Object
![](https://framerusercontent.com/images/XMnbzRVfuuj7b6oikeDgnz0ks.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-engine-response-object.png)
Entitlement Engine Response Object
Distinguish cohorts of subscribers based on the subscription state and sub-state as shown below.
You can assign positive values for cases where you would unlock access and negative values for cases where access would not be provided. Add substates using the decimal values to enhance the entitlement process. By combining state and substate you can have a value to represent the exact state of the product. You can send this value to the client. It can be used as a simple signal to unlock the service when it’s positive.
![](https://framerusercontent.com/images/uAva7tzK3GANsSa5kEOm66RPhD4.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-states-vs-sub-states.png)
Subscription states and sub-states – Entitlement Code Example
For example, entitlement code 4.1 represents a subscriber who is currently in a trial period and has disabled auto-renewal:
![](https://framerusercontent.com/images/SwKN7q6B7iq0i3vVBfaxgHpg7Bk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-code.png)
Another example, based on 4.0 code (user with standard subscription turned-off auto-renewal) you can trigger a retention message and link the user to a specific product offer.
![](https://framerusercontent.com/images/WGA8L7RapKhgbrDvzrFP6L1fvM.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/sub-retention.png)
Entitlement code example: trigger promotional offer
Conclusions
A highly available entitlement engine will allow you to manage user access, tailor your customer communication, increase your app retention, and win lapsed subscribers back. Additionally building the server-side entitlement engine will allow you to support cross-platform entitlement logic for your web or Android apps. Yet it’s a lot of work to build and support such infrastructure.
If you want to focus on building your product, instead of building a complex server-side engine to handle the subscription logic of your app, there is a solution for that. We at Qonversion.io provide a cross-platform entitlement engine for your app out of the box. Qonversion handles receipt validation, receives server-to-server notifications, and provides you with simple output to handle user access and power your subscriber communication. On top of that, you get comprehensive subscription analytics, real-time app monitoring dashboards, integrations with 3rd party platforms like AppsFlyer, Amplitude, Facebook Ads, and more.
This article is based on the WWDC 2020 presentation and provides guidance on a subscription app’s entitlement architecture. It would be useful for engineers, server-side teams, and data analysts.
![Architecting Subscription Entitlement Engine](https://framerusercontent.com/images/8T3Sy80Qv9wb1Zr0vbTSf0EhwlA.jpg)
Understanding the subscriber journey
Subscription Entitlement Engine
Access to content is the fundamental basis of subscription entitlement. And access may vary depending on the level of service, geography, and other factors. As was shown above, a subscription can have several states. The entitlement process needs to account for all of the potential subscription states.
To be able to manage user access, power tailored communication with your users, win lapsed users back, and so on, you need to build server-side logic that digests all subscription state data. Apple refers to this as the Entitlement Engine. (Note: Apple provided the sample Entitlement Engine code in node.js.)
The data digested by the Entitlement Engine is used to calculate the user’s entitlement. The Engine needs to calculate the correct entitlement info using the receipt data, app insights, and server-to-server notifications. The output of the Entitlement Engine is a simple JSON payload that you can use to entitle service and update your user database.
![](https://framerusercontent.com/images/JRVctBLkavCZW8v2YDhMFGEHxuk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-entitlement-process.png)
Key processes of the Entitlement Engine:
Prepare data: The app receipt is the source of truth for transactional data. So you need to fetch the most up-to-date info for the receipt from App Store to make sure it’s not outdated. Get server-to-server notifications.
Synthesize data: Digest transactional data, detect where the user is in the subscriber journey. Add data from the app, for example, hours watched, upcoming events a user is interested in, etc.
Condense the data into actionable insights, that will be used in the response.
Build the Response Object
![](https://framerusercontent.com/images/XMnbzRVfuuj7b6oikeDgnz0ks.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-engine-response-object.png)
Entitlement Engine Response Object
Distinguish cohorts of subscribers based on the subscription state and sub-state as shown below.
You can assign positive values for cases where you would unlock access and negative values for cases where access would not be provided. Add substates using the decimal values to enhance the entitlement process. By combining state and substate you can have a value to represent the exact state of the product. You can send this value to the client. It can be used as a simple signal to unlock the service when it’s positive.
![](https://framerusercontent.com/images/uAva7tzK3GANsSa5kEOm66RPhD4.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-states-vs-sub-states.png)
Subscription states and sub-states – Entitlement Code Example
For example, entitlement code 4.1 represents a subscriber who is currently in a trial period and has disabled auto-renewal:
![](https://framerusercontent.com/images/SwKN7q6B7iq0i3vVBfaxgHpg7Bk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-code.png)
Another example, based on 4.0 code (user with standard subscription turned-off auto-renewal) you can trigger a retention message and link the user to a specific product offer.
![](https://framerusercontent.com/images/WGA8L7RapKhgbrDvzrFP6L1fvM.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/sub-retention.png)
Entitlement code example: trigger promotional offer
Conclusions
A highly available entitlement engine will allow you to manage user access, tailor your customer communication, increase your app retention, and win lapsed subscribers back. Additionally building the server-side entitlement engine will allow you to support cross-platform entitlement logic for your web or Android apps. Yet it’s a lot of work to build and support such infrastructure.
If you want to focus on building your product, instead of building a complex server-side engine to handle the subscription logic of your app, there is a solution for that. We at Qonversion.io provide a cross-platform entitlement engine for your app out of the box. Qonversion handles receipt validation, receives server-to-server notifications, and provides you with simple output to handle user access and power your subscriber communication. On top of that, you get comprehensive subscription analytics, real-time app monitoring dashboards, integrations with 3rd party platforms like AppsFlyer, Amplitude, Facebook Ads, and more.
This article is based on the WWDC 2020 presentation and provides guidance on a subscription app’s entitlement architecture. It would be useful for engineers, server-side teams, and data analysts.
![Architecting Subscription Entitlement Engine](https://framerusercontent.com/images/8T3Sy80Qv9wb1Zr0vbTSf0EhwlA.jpg)
Understanding the subscriber journey
Subscription Entitlement Engine
Access to content is the fundamental basis of subscription entitlement. And access may vary depending on the level of service, geography, and other factors. As was shown above, a subscription can have several states. The entitlement process needs to account for all of the potential subscription states.
To be able to manage user access, power tailored communication with your users, win lapsed users back, and so on, you need to build server-side logic that digests all subscription state data. Apple refers to this as the Entitlement Engine. (Note: Apple provided the sample Entitlement Engine code in node.js.)
The data digested by the Entitlement Engine is used to calculate the user’s entitlement. The Engine needs to calculate the correct entitlement info using the receipt data, app insights, and server-to-server notifications. The output of the Entitlement Engine is a simple JSON payload that you can use to entitle service and update your user database.
![](https://framerusercontent.com/images/JRVctBLkavCZW8v2YDhMFGEHxuk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-entitlement-process.png)
Key processes of the Entitlement Engine:
Prepare data: The app receipt is the source of truth for transactional data. So you need to fetch the most up-to-date info for the receipt from App Store to make sure it’s not outdated. Get server-to-server notifications.
Synthesize data: Digest transactional data, detect where the user is in the subscriber journey. Add data from the app, for example, hours watched, upcoming events a user is interested in, etc.
Condense the data into actionable insights, that will be used in the response.
Build the Response Object
![](https://framerusercontent.com/images/XMnbzRVfuuj7b6oikeDgnz0ks.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-engine-response-object.png)
Entitlement Engine Response Object
Distinguish cohorts of subscribers based on the subscription state and sub-state as shown below.
You can assign positive values for cases where you would unlock access and negative values for cases where access would not be provided. Add substates using the decimal values to enhance the entitlement process. By combining state and substate you can have a value to represent the exact state of the product. You can send this value to the client. It can be used as a simple signal to unlock the service when it’s positive.
![](https://framerusercontent.com/images/uAva7tzK3GANsSa5kEOm66RPhD4.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-states-vs-sub-states.png)
Subscription states and sub-states – Entitlement Code Example
For example, entitlement code 4.1 represents a subscriber who is currently in a trial period and has disabled auto-renewal:
![](https://framerusercontent.com/images/SwKN7q6B7iq0i3vVBfaxgHpg7Bk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-code.png)
Another example, based on 4.0 code (user with standard subscription turned-off auto-renewal) you can trigger a retention message and link the user to a specific product offer.
![](https://framerusercontent.com/images/WGA8L7RapKhgbrDvzrFP6L1fvM.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/sub-retention.png)
Entitlement code example: trigger promotional offer
Conclusions
A highly available entitlement engine will allow you to manage user access, tailor your customer communication, increase your app retention, and win lapsed subscribers back. Additionally building the server-side entitlement engine will allow you to support cross-platform entitlement logic for your web or Android apps. Yet it’s a lot of work to build and support such infrastructure.
If you want to focus on building your product, instead of building a complex server-side engine to handle the subscription logic of your app, there is a solution for that. We at Qonversion.io provide a cross-platform entitlement engine for your app out of the box. Qonversion handles receipt validation, receives server-to-server notifications, and provides you with simple output to handle user access and power your subscriber communication. On top of that, you get comprehensive subscription analytics, real-time app monitoring dashboards, integrations with 3rd party platforms like AppsFlyer, Amplitude, Facebook Ads, and more.
This article is based on the WWDC 2020 presentation and provides guidance on a subscription app’s entitlement architecture. It would be useful for engineers, server-side teams, and data analysts.
![Architecting Subscription Entitlement Engine](https://framerusercontent.com/images/8T3Sy80Qv9wb1Zr0vbTSf0EhwlA.jpg)
Understanding the subscriber journey
Subscription Entitlement Engine
Access to content is the fundamental basis of subscription entitlement. And access may vary depending on the level of service, geography, and other factors. As was shown above, a subscription can have several states. The entitlement process needs to account for all of the potential subscription states.
To be able to manage user access, power tailored communication with your users, win lapsed users back, and so on, you need to build server-side logic that digests all subscription state data. Apple refers to this as the Entitlement Engine. (Note: Apple provided the sample Entitlement Engine code in node.js.)
The data digested by the Entitlement Engine is used to calculate the user’s entitlement. The Engine needs to calculate the correct entitlement info using the receipt data, app insights, and server-to-server notifications. The output of the Entitlement Engine is a simple JSON payload that you can use to entitle service and update your user database.
![](https://framerusercontent.com/images/JRVctBLkavCZW8v2YDhMFGEHxuk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-entitlement-process.png)
Key processes of the Entitlement Engine:
Prepare data: The app receipt is the source of truth for transactional data. So you need to fetch the most up-to-date info for the receipt from App Store to make sure it’s not outdated. Get server-to-server notifications.
Synthesize data: Digest transactional data, detect where the user is in the subscriber journey. Add data from the app, for example, hours watched, upcoming events a user is interested in, etc.
Condense the data into actionable insights, that will be used in the response.
Build the Response Object
![](https://framerusercontent.com/images/XMnbzRVfuuj7b6oikeDgnz0ks.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-engine-response-object.png)
Entitlement Engine Response Object
Distinguish cohorts of subscribers based on the subscription state and sub-state as shown below.
You can assign positive values for cases where you would unlock access and negative values for cases where access would not be provided. Add substates using the decimal values to enhance the entitlement process. By combining state and substate you can have a value to represent the exact state of the product. You can send this value to the client. It can be used as a simple signal to unlock the service when it’s positive.
![](https://framerusercontent.com/images/uAva7tzK3GANsSa5kEOm66RPhD4.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/subscription-states-vs-sub-states.png)
Subscription states and sub-states – Entitlement Code Example
For example, entitlement code 4.1 represents a subscriber who is currently in a trial period and has disabled auto-renewal:
![](https://framerusercontent.com/images/SwKN7q6B7iq0i3vVBfaxgHpg7Bk.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/entitlement-code.png)
Another example, based on 4.0 code (user with standard subscription turned-off auto-renewal) you can trigger a retention message and link the user to a specific product offer.
![](https://framerusercontent.com/images/WGA8L7RapKhgbrDvzrFP6L1fvM.png)
![](https://qonversion.io/blog/wp-content/uploads/2021/10/sub-retention.png)
Entitlement code example: trigger promotional offer
Conclusions
A highly available entitlement engine will allow you to manage user access, tailor your customer communication, increase your app retention, and win lapsed subscribers back. Additionally building the server-side entitlement engine will allow you to support cross-platform entitlement logic for your web or Android apps. Yet it’s a lot of work to build and support such infrastructure.
If you want to focus on building your product, instead of building a complex server-side engine to handle the subscription logic of your app, there is a solution for that. We at Qonversion.io provide a cross-platform entitlement engine for your app out of the box. Qonversion handles receipt validation, receives server-to-server notifications, and provides you with simple output to handle user access and power your subscriber communication. On top of that, you get comprehensive subscription analytics, real-time app monitoring dashboards, integrations with 3rd party platforms like AppsFlyer, Amplitude, Facebook Ads, and more.
Start Now for Free
Or book a demo with our team to learn more about Qonversion
Start Now for Free
Or book a demo with our team to learn more about Qonversion
Start Now for Free
Or book a demo with our team to learn more about Qonversion
Read more
Read more
![Trash Panda App partners with Qonversion](https://framerusercontent.com/images/fIjbGE1BlBzu0OZK7vCihIvo.webp)
Trash Panda Maximizes App Revenue after Setting the Best Subscription Price with A/B Tests
Jul 8, 2024
Jul 8, 2024
![StyleDNA with Qonversion](https://framerusercontent.com/images/0CYKPTzYfOn6vdokDrwSoFR4c.webp)
How StyleDNA Saved 20% Development Time and Unlocked New Features
Jun 19, 2024
Jun 19, 2024
![WWDC 24 updates](https://framerusercontent.com/images/OFmq7UmE6o7QKdnnbRBNKtgo.png)
WWDC24 Updates for App Developers | What's new in Storekit 2 and App Store Server API?
Jun 17, 2024
Jun 17, 2024
![Parenting by Iben Sandahl uses Qonversion](https://framerusercontent.com/images/qJ2twjlmMxXqQ2MggeZqrVbB580.webp)
How A/B Testing with Qonversion Helped Iben Sandahl’s Parenting App Double Their Sales
Jun 13, 2024
Jun 13, 2024
![Trash Panda App partners with Qonversion](https://framerusercontent.com/images/fIjbGE1BlBzu0OZK7vCihIvo.webp)
Trash Panda Maximizes App Revenue after Setting the Best Subscription Price with A/B Tests
Jul 8, 2024
Jul 8, 2024
![StyleDNA with Qonversion](https://framerusercontent.com/images/0CYKPTzYfOn6vdokDrwSoFR4c.webp)
How StyleDNA Saved 20% Development Time and Unlocked New Features
Jun 19, 2024
Jun 19, 2024
![WWDC 24 updates](https://framerusercontent.com/images/OFmq7UmE6o7QKdnnbRBNKtgo.png)
WWDC24 Updates for App Developers | What's new in Storekit 2 and App Store Server API?
Jun 17, 2024
Jun 17, 2024