The /reports/subscriptions provides comprehensive access to subscriptions metrics. Reports can be generated in a variety of formats.
Scope: All of the resources in this route require read access in the private scope (private:read).
Getting subscriptions totals
Request
GET /reports/subscriptions?start_date={start_date}&end_date={end_date}&products={products}&countries={countries}&granularity={granularity}
Arguments
| Argument | Type | Description |
|---|---|---|
| start_date | Date | (yyyy-MM-dd) Date, inclusive, to start reporting from. If you specify a granularity other than daily this will be rounded down to the nearest period. default: a long, long time ago. |
| end_date | Date | (yyyy-MM-dd) Date, inclusive, to stop reporting. If you specify a granularity other than daily this will be rounded up to the nearset period. default: distant future. |
| group_by | List | One or more pivots separated by a comma (,). Available pivots: product, country, date, and store. |
| products | List | (productId | iap_product_id1, iap_product_id2, …) A list of product_ids of in-app purchases (subscriptions) product_ids to include in the response. Default: all active subscriptions in account.
Important: You can submit the product_id of the app and append |
| countries | List | (isoCode | isoCode1;isoCode2;isoCodeN) Countries to limit the report to (can be taken from /data/countries, default: include all countries) |
| granularity | Granularity | (daily | weekly | monthly | yearly) which date granularity to use when grouping-by date. default: daily) |
| format | String | Output format: JSON or CSV. Defaults to JSON.
Note: To prevent excessive repetition, when |
Response
| Field | Type | Description |
|---|---|---|
| all_active_subscriptions | Number | The total number of active subscriptions including free and discounted trials, discounted pay upfront and pay as you go subscriptions, and standard subscriptions. |
| active_subscriptions | Number | The number of active subscriptions that are paying the standard subscription price. |
| active_free_trials | Number | The number of subscriptions that are currently active in free trial. |
| paying_subscriptions | Number | The number of active subscriptions that are paying the standard subscription price or a discounted rate. |
| actual_revenue | Money | The amount of money generated by subscriptions for the selected period, after the store’s fee. |
| mrr | Money | The amount of revenue subscriptions are earning in a month. MRR includes revenue generated from monthly subscriptions, as well as well as the monthly portion of longer term subscriptions. |
| gross_mrr | Money | The amount of revenue subscriptions are earning in a month before the store takes its fee. |
| gross_revenue | Money | The amount of money generated by subscriptions for the selected period, before the store’s fee. |
| activations | Number | The number subscriptions that have been activated in the period, including: activations from new subscriptions, re-activations, trials converting to paying subscriptions, and tier/plan changes. This is an aggregate metric. |
| cancellations | Number | The number subscriptions that were not renewed directly by the customer, or as a result of moving to a different tier or plan. This is an aggregate metric. |
| churn | Number | Subscriptions that have been cancelled as a percent of total active subscriptions. This is a calculated metric. |
| first_year_subscribers | Number | The number of subscriptions that have been active for less than a year. Stores deduct a higher fee for these subscriptions. This metric is only available for iOS and Mac apps. |
| non_first_year_subscribers | Number | The number of subscriptions that have been active for more than a year. Stores deduct a lower fee for these subscriptions. This is a calculated metric, and is only availabel for iOS and Mac apps. |
| active_discounted_subscriptions | Number | The number of active subscriptions that paying a discounted rate. |
| active_trials | Number | The number of subscriptions that are currently active in free trial and discounted. |
| new_trials | Number | The number of new trial subscriptions that have been activated in the selected period. |
| cancelled_trials | Number | The number of trial subscriptions that chose not to convert to a paying subscription. |
| transitions_in | Number | The total number of upgrades, downgrades, and cross-grades that resulted in a subscription activation. This is an aggregate metric. |
| transitions_out | Number | The total number of subscriptions that have been cancelled as a result of the customer upgrading, downgrading, or crossgrading to a different subscription tier/plan. This is an aggregate metric. |
| cancelled_subscriptions | Number | The number of subscriptions that have been cancelled by the customer. |
| new_subscriptions | Number | The number of new subscriptions that were activated by new customers. |
| trial_conversions | Number | The number of subscriptions that have started as a trial and converted to a paying subscription. |
| reactivations | Number | The number of subscriptions that were activated after having expired and not renewed immediately. |
| renewals | Number | The number of subscriptions that automatically renwed successfully. |
| active_grace | Number | The total number of subscribers that could not be charged and are being retried automatically. |
| new_grace | Number | The number of new subscribers that could not be charged and are being retried automatically. |
| grace_drop_off | Number | The number of subscriptions that have been cancelled because they could not be charged. |
| grace_recovery | Number | The number of subscriptions that were charged successfully after failing and are now active. |
| new_trial_grace | Number | The number of new trial subscriptions that upgraded to a paid subscription but couldn’t be charged. |
| trial_grace_drop_off | Number | The number of trial subscriptions that were cancelled because they couldn’t be charged. |
| trial_grace_recovery | Number | The number of trial subscriptions that were charged successfully after failing and are not active. |
Example response
GET /reports/subscriptions?start_date=-30
{
"active_subscriptions": 0,
"active_free_trials": 0,
"new_subscriptions": 0,
"cancelled_subscriptions": 0,
"new_trials": 0,
"trial_conversion_rate": "0.00",
"mrr": "0.00",
"actual_revenue": "0.00",
"renewals": 0,
"first_year_subscribers": 0,
"non_first_year_subscribers": 0,
"reactivations": 0,
"transitions_out": 0,
"trial_cancellations": 0,
"transitions_in": 0,
"activations": 0,
"cancellations": 0,
"trial_conversions": 0,
"churn": "0.0000",
"gross_revenue": "0.00",
"gross_mrr": "0.00",
"active_grace": 0,
"new_grace": 0,
"grace_drop_off": 0,
"grace_recovery": 0,
"new_trial_grace": 0,
"trial_grace_drop_off": 0,
"trial_grace_recovery": 0
}
Getting subscriptions details
Request
GET /reports/subscriptions?group_by={group_by}&start_date={start_date}&end_date={end_date}&products={products}&countries={countries}&format={format}
Arguments
| Argument | Type | Description |
|---|---|---|
| start_date | Date | (yyyy-MM-dd) Date, inclusive, to start reporting from. If you specify a granularity other than daily this will be rounded down to the nearest period. default: a long, long time ago. |
| end_date | Date | (yyyy-MM-dd) Date, inclusive, to stop reporting. If you specify a granularity other than daily this will be rounded up to the nearset period. default: distant future. |
| group_by | List | One or more pivots separated by a comma (,). Available pivots: product, country, date, and store. |
| products | List | (productId | iap_product_id1, iap_product_id2, …) A list of product_ids of in-app purchases (subscriptions) product_ids to include in the response. Default: all active subscriptions in account.
Important: You can submit the product_id of the app and append |
| countries | List | (isoCode | isoCode1;isoCode2;isoCodeN) Countries to limit the report to (can be taken from /data/countries, default: include all countries) |
| granularity | Granularity | (daily | weekly | monthly | yearly) which date granularity to use when grouping-by date. default: daily) |
| format | String | Output format: JSON or CSV. Defaults to JSON.
Note: To prevent excessive repetition, when |
Response
Just like other routes in the /reports family, the response can be grouped by a variety of values either one at a time or combined to produce a nested response. While the breakdown may change, the leaves of the response follow the same format as the totals object from the previous example.
Example response grouped by day
GET /reports/subscriptions/?group_by=dates&start_date=-30
{
"2018-11-22": {
"active_subscriptions": 0,
"mrr": 0,
"churn": 0,
},
...
}
Example response grouped by country
GET /reports/subscriptions/?group_by=country&start_date=-30
{
"US": {
"active_subscriptions": 0,
"mrr": 0,
"churn": 0,
...
},
...
}
Example response grouped by products and country
GET /reports/subscriptions/?group_by=product,date&start_date=-30
{
"2018-11-22": {
"5561990123": {
"active_subscriptions": 0,
"mrr": 0,
"churn": 0,
...
},
...
},
...
}