Advertising Statistics API
Overview
Note: The following documentation applies to the current API version; aspects of the domain and functionality are subject to change for general release.
The Statistics API is an HTTP interface that allows advertisers to retrieve acquisition statistics data in CSV format.
Contact
If you have any questions or feedback regarding the API you can reach out to us at unityads-support@unity3d.com.
Migrating from the previous version of the API
This version (V2) of the API introduces several key updates:
- It has a new URL for access, and it incorporates the use of the core organization ID.
- An overhauled authentication method.
- Changes in the query parameters may affect how data is retrieved and processed.
New URL and organization ID
https://services.api.unity.com/advertise/stats/v2/organizations/:organization_id/reports/acquisitionsWhere identifies your organization.
organization_idTo look up the organization ID, please use the following steps:
- Open the Unity Ads User Acquisition dashboard.
- Select Settings from the navigation.
- On the settings page, you will see two separate Organization ID fields. Pick the value from the Organization core ID field.
Authentication
A service account is required to access the API. Please see the related authentication section.
Query parameters
V1 | V2 |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Not supported |
| Not supported |
| Not supported |
| Not supported |
SKAdNetwork (SKAN) data
SKAN data is available in its own endpoint.
Refer to the endpoint documentation section later for detailed information on this endpoint.
Authentication
Using the Unity Advertising Statistics API requires a service account.
You can find information on how to create a service account here.
Once you've created a service account, you must assign the Advertise Stats API Viewer role to it, which you will find under the 'Growth' category.
Note that if your MMP asks you to create a service account for them, you must give a service account with the Advertise Stats API MMP Viewer role instead.
Note: You can also assign the Advertise Stats API Viewer to your existing service accounts.
You can use the service account to authenticate with the API:
-
In your service account detail page, click the Create key button. There will be a modal that consists Key ID and Secret key. Remember to save the secret key as it will not be shown again.
-
Place the Key ID and Secret key in theheader of the GET request, prefixed with
Authorization. For example:Basic
curl -H "Authorization: Basic <key id>:<secret key>" https://services.api.unity.com/advertise/stats/v2/organizations/:organization_id/reports/acquisitions
Rate Limits
The API enforces a rate limit based on two criteria: organization ID and IP address.
The rate limit is 1 request per second and 30 requests per 30 minutes, applied to each organization ID and each IP address separately.
The limit is reached when either the request rate for an organization ID or the request rate for an IP address reaches these thresholds, whichever occurs first.
The API responds with HTTP status code if the rate limit is exceeded.
429Handling Large Data Queries
Excessive data breakdown, especially using the dimension, can significantly increase response size and complexity.
Please note that the maximum allowed request duration is 10 minutes.
Requests exceeding this limit may result in an incomplete response, potentially leading to data loss.
sourceAppIdWe recommend querying data one day at a time to prevent large-sized responses or timeouts when breaking down data by , , or other dimensions with numerous unique values.
This approach ensures manageable data sizes and reliable retrieval.
sourceAppIdcountryData
The API will show up to 2 years of data, starting from May 21, 2024. Hourly data will be available for the most recent six months, while older data will be aggregated daily. The data is updated once an hour at an unspecified time.
The data provided is historical. For instance, if the campaign name was altered during the specified time period, the name presented will correspond to what it was on that particular day.
The pre-install metrics are updated with a delay of 85 minutes, and they are reported in Universal Time Coordinated (UTC). To illustrate, the complete updates for the pre-install metrics from 11-12 are available at 13:25 UTC.
Report Format
Data is available in CSV (default) or JSON format. To retrieve JSON, append to the URL.
format=jsonResponse Compression
The API supports response compression.
Responses are compressed when the request includes the or header.
Accept-Encoding: gzipAccept-Encoding: deflateResponse Status and Error Codes
This API follows the Unity Services Web Response status and error codes.
If a response is empty and no data exists for the requested filters, the response will lead to an HTTP response status code 204 (no content).
API Lifecycle
This API follows the Unity Services Web API Lifecycle.
Change log
- June 23, 2026:
- New post-install metrics added: ,
d[x]Payer,d[x]PayerRated[x]CostPerPayer
- New post-install metrics added:
- May 21, 2026:
- Added new "unity app id" field to the response when using the parameter with the
breakdownsvalue.app - "appIds" filter option now supports both legacy app id and unity app id.
- Added new "unity app id" field to the response when using the
- Jan 30, 2026:
- Added query parameter for CSV responses. When enabled, appends an end-of-file marker row to indicate complete downloads, allowing clients to detect partial or truncated CSV data.
eofMarker
- Added
- June 10, 2025:
- Added d21 and d28 window support for ,
d[x]AdRevenue,d[x]AdRevenueRoas,d[x]IapRevenue,d[x]IapRoas,d[x]Purchases,d[x]UniquePurchasers,d[x]Retained,d[x]RetentionRate,d[x]TotalRoas,d[x]LevelComplete,d[x]CostPerLevelCompletemetrics.d[x]LevelCompleteRate
- Added d21 and d28 window support for
- February 20, 2025: Response Compression Support.
- February 19, 2025: Added support for JSON format.
- February 14, 2025:
- Data is available up to 2 years, starting from May 21, 2024.
- Hourly data is available for the most recent six months, while older data is aggregated daily.
- August 19, 2024:
- New metrics added to the list
- ,
d[x]LevelComplete,d[x]CostPerLevelCompleted[x]LevelCompleteRate
- New breakdown options added: ,
eventTypeeventName - New filter options added: ,
eventTypeseventNames
- New metrics added to the list
- August 05, 2024:
- More post-install days support added.
- Supported days now include: 0, 1, 3, 7, and 14.
- Added more post-install days support for the following metrics: ,
d[x]AdRevenueRoas, andd[x]IapRoas.d[x]TotalRoas
- New metrics added to the list.
- ,
d[x]AdRevenue,d[x]IapRevenue,d[x]Purchases,d[x]UniquePurchasers,d[x]Retainedd[x]RetentionRate
- More post-install days support added.
- May 16, 2024: "Handling Large Data Queries" section added.
- January 24, 2024: SKAN endpoint added.
- January 18, 2024: Added data freshness note to documentation.
- November 21, 2023: Unity Advertiser Statistics API version 2 released.
Glossary
Metrics
Basic
Metric | Description | Note |
|---|---|---|
| starts | The number of times a user starts your ad. | Starts are also known as impressions. |
| views | The number of times users watched your entire ad. | |
| clicks | The number of times a user clicks the call-to-action button in your ad. | |
| installs | The number of users who install your app after watching the ad. | |
| spend | The advertising budget spent. | Spend is calculated by multiplying the number of installs by the cost per install (CPI). |
| cpi | Cost per install (CPI): the average cost to the advertiser per install. | CPI is calculated by dividing the Spend amount by the number of installs. |
| ctr | Click through rate (CTR): the percentage of users who clicked the call-to-action button after watching your ad. | CTR is calculated by dividing the number of clicks by the number of starts. |
| cvr | Conversion rate (CVR): the percent of users who installed your app after watching the ad. | CVR is calculated by dividing the number of installs by the number of starts. |
| ecpm | The estimated cost in dollars per 1,000 starts (effective cost per mille). |
Post-install
Post-install metrics are provided for specific timeframe after a user installs the app and are represented using the "Dx" format, where:
- "d" stands for "day".
- "x" is a placeholder for the number of days after install.
Example: "d7AdRevenue" represents the ad revenue generated within the 7-day timeframe.
Metric | Description | Supported Days | Note |
|---|---|---|---|
| d[x]AdRevenue | Revenue from your ad campaign. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]AdRevenueRoas | Ad revenue return on ad spend. | 0, 1, 3, 7, 14, 21, 28 | Ad revenue roas is calculated by dividing the revenue earned by the amount spent on advertising. |
| d[x]IapRevenue | Revenue from users purchasing in-app items. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]IapRoas | In-app purchase revenue return on ad spend. | 0, 1, 3, 7, 14, 21, 28 | IAP roas is calculated by dividing the IAP revenue earned by the amount spent on advertising. |
| d[x]Purchases | In-app transactions made in your app. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]UniquePurchasers | The number of first-time in-app purchasers within the selected time interval. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]Retained | The number of users continuing to engage with your app for the selected time period. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]RetentionRate | The percentage of users who continue engaging with an app over time. | 0, 1, 3, 7, 14, 21, 28 | Retention rate is calculated by dividing the number of retained users by the number of installs. |
| d[x]TotalRoas | The total return on ad spend (ROAS) within the selected dx timeframe. | 0, 1, 3, 7, 14, 21, 28 | Total roas is calculated by adding IAP revenue and ad revenue, then dividing by your spend. |
| d[x]LevelComplete | The number of users who completed a specified level. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]CostPerLevelComplete | The average cost for a user who completed a specified level. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]LevelCompleteRate | The percentage of users who completed a specified level per install. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]Payer | The number of users who made a payment. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]PayerRate | The percentage of payers per install. | 0, 1, 3, 7, 14, 21, 28 | |
| d[x]CostPerPayer | The average cost for a user who made a payment. | 0, 1, 3, 7, 14, 21, 28 |
Download OpenAPI specification:
Acquisitions Report
This endpoint returns Acquisitions reports in CSV format that are under the given organization.
Authorizations
ServiceAccount (advertise.stats.get)
HTTP: ServiceAccount
To get started with authentication, visit the Service Account Authentication section.
HTTP Authorization Scheme: basic
Required scopes: advertise.stats.get
Path parameters for "Acquisitions Report"
Unique identifier for an Organization.
Please use the following steps to look up the organization ID:
- Open the Acquire Dashboard
- Select Settings from the navigation
- On the settings page, you will see two separate Organization IDs. For the Advertising statistics API, pick the value that is labeled as .
Organization core ID
Query parameters for "Acquisitions Report"
You can specify comma-separated fields to display in your report.
Options
- starts
- views
- clicks
- installs
- spend
- cpi
- ctr
- cvr
- ecpm
- d0AdRevenue
- d1AdRevenue
- d3AdRevenue
- d7AdRevenue
- d14AdRevenue
- d21AdRevenue
- d28AdRevenue
- d0AdRevenueRoas
- d1AdRevenueRoas
- d3AdRevenueRoas
- d7AdRevenueRoas
- d14AdRevenueRoas
- d21AdRevenueRoas
- d28AdRevenueRoas
- d0IapRevenue
- d1IapRevenue
- d3IapRevenue
- d7IapRevenue
- d14IapRevenue
- d21IapRevenue
- d28IapRevenue
- d0IapRoas
- d1IapRoas
- d3IapRoas
- d7IapRoas
- d14IapRoas
- d21IapRoas
- d28IapRoas
- d0Purchases
- d1Purchases
- d3Purchases
- d7Purchases
- d14Purchases
- d21Purchases
- d28Purchases
- d0UniquePurchasers
- d1UniquePurchasers
- d3UniquePurchasers
- d7UniquePurchasers
- d14UniquePurchasers
- d21UniquePurchasers
- d28UniquePurchasers
- d0Retained
- d1Retained
- d3Retained
- d7Retained
- d14Retained
- d21Retained
- d28Retained
- d0RetentionRate
- d1RetentionRate
- d3RetentionRate
- d7RetentionRate
- d14RetentionRate
- d21RetentionRate
- d28RetentionRate
- d0TotalRoas
- d1TotalRoas
- d3TotalRoas
- d7TotalRoas
- d14TotalRoas
- d21TotalRoas
- d28TotalRoas
- d0LevelComplete
- d1LevelComplete
- d3LevelComplete
- d7LevelComplete
- d14LevelComplete
- d21LevelComplete
- d28LevelComplete
- d0CostPerLevelComplete
- d1CostPerLevelComplete
- d3CostPerLevelComplete
- d7CostPerLevelComplete
- d14CostPerLevelComplete
- d21CostPerLevelComplete
- d28CostPerLevelComplete
- d0LevelCompleteRate
- d1LevelCompleteRate
- d3LevelCompleteRate
- d7LevelCompleteRate
- d14LevelCompleteRate
- d21LevelCompleteRate
- d28LevelCompleteRate
- d0Payer
- d1Payer
- d3Payer
- d7Payer
- d14Payer
- d21Payer
- d28Payer
- d0PayerRate
- d1PayerRate
- d3PayerRate
- d7PayerRate
- d14PayerRate
- d21PayerRate
- d28PayerRate
- d0CostPerPayer
- d1CostPerPayer
- d3CostPerPayer
- d7CostPerPayer
- d14CostPerPayer
- d21CostPerPayer
- d28CostPerPayer
You can specify a comma-separated list of dimensions by which to split data. Each breakdown should be a valid keyword, such as app, campaign, platform, etc. Do not include spaces after the commas.
While metrics give you the overall numbers, breakdowns allow you to see those numbers by different segments. In practice, using a metric
like "installs" combined with a breakdown by "country" would detail how many installs came from each specific country.
Options
- app
- campaign
- country
- creativePack
- creativePackType
- osVersion
- platform
- sourceAppId
- store
- targetGame
- eventType
- eventName
Split data
Split data results in three fields:
app- app id
- app name
- unity app id (this id can be empty for customers who have not been migrated to the new Unity Dashboard experience. Migrations are happening in May - July 2026)
Split data results in two fields:
campaign- campaign id
- campaign name
Split data results in two fields:
creativePack- creative pack id
- creative pack name
Split data results in three fields:
targetGame- target id
- target store id
- target name
Note: Splitting data by too many dimensions may impact response times for querying the API.
We recommend querying data one day at a time to prevent large-sized responses or timeouts when breaking down data by , , or other dimensions with numerous unique values.
sourceAppIdcountryWhen set to , appends an end-of-file marker row to CSV responses to indicate that the download is complete.
This allows clients to distinguish between complete and partial (truncated) CSV downloads.
trueThe marker row has the format followed by empty columns to match the CSV column count.
If the EOF marker is present, the download is complete. If it's missing, the download may be partial or incomplete.
#__EOF__,rows=NThe marker row is only added when:
- The response format is CSV (not JSON)
- The response contains data (not empty)
Example: For a CSV with 5 columns and 10 data rows, the EOF marker row would be:
#__EOF__,rows=10,,,Use case: When downloading large CSV files, clients can verify download completeness by checking for the EOF marker at the end of the response.
Code samples for "Acquisitions Report":
Request example
curl -X GET \ -H "Authorization: Basic <YOUR_CREDENTIALS>" \ "https://services.api.unity.com/advertise/stats/v2/organizations/{organizationId}/reports/acquisitions"
Response example
{ "data": [ { "timestamp": "2020-10-01", "campaignId": "50ed569d57fe1f324a15fbf7", "campaignName": "Campaign #5", "country": "AU", "clicks": 71, "installs": 30, "spend": 45 }, { "timestamp": "2020-10-01", "campaignId": "50eeb7339e10c9d21c0225cb", "campaignName": "Campaign #6", "country": "AT", "clicks": 39, "installs": 19, "spend": 28.5 } ]}
SKAN Report
This endpoint returns SKAN reports in CSV format under the given organization.
Authorizations
ServiceAccount (advertise.stats.get)
HTTP: ServiceAccount
To get started with authentication, visit the Service Account Authentication section.
HTTP Authorization Scheme: basic
Required scopes: advertise.stats.get
Path parameters for "SKAN Report"
Unique identifier for an Organization.
Please use the following steps to look up the organization ID:
- Open the Acquire Dashboard
- Select Settings from the navigation
- On the settings page, you will see two separate Organization IDs. For the Advertising statistics API, pick the value that is labeled as .
Organization core ID
Query parameters for "SKAN Report"
You can specify a comma-separated list of dimensions by which to split data. Each breakdown should be a valid keyword, such as app, campaign, etc.
Do not include spaces after the commas.
While metrics give you the overall numbers, breakdowns allow you to see those numbers by different segments.
In practice, a metric like "installs" combined with a breakdown by "app" would detail how many installs came from each specific app.
Options
- app
- campaign
- conversionValue
- targetGame
The conversion value is the fine-grained conversion value.
Please note that breakdown with conversion value does not work with pre-install data (e.g., clicks).
Split data
Split data results in three fields:
app- app id
- app name
- unity app id (this id can be empty for customers who have not been migrated to the new Unity Dashboard experience. Migrations are happening in May - July 2026)
Split data results in two fields:
campaign- campaign id
- campaign name
Split data being split by the conversion value
conversionValueSplit data results in three fields:
targetGame- target id
- target store id
- target name
Note: Splitting data by too many dimensions may impact response times for querying the API.
When set to , appends an end-of-file marker row to CSV responses to indicate that the download is complete.
This allows clients to distinguish between complete and partial (truncated) CSV downloads.
trueThe marker row has the format followed by empty columns to match the CSV column count.
If the EOF marker is present, the download is complete. If it's missing, the download may be partial or incomplete.
#__EOF__,rows=NThe marker row is only added when:
- The response format is CSV (not JSON)
- The response contains data (not empty)
Example: For a CSV with 5 columns and 10 data rows, the EOF marker row would be:
#__EOF__,rows=10,,,Use case: When downloading large CSV files, clients can verify download completeness by checking for the EOF marker at the end of the response.
Code samples for "SKAN Report":
Request example
curl -X GET \ -H "Authorization: Basic <YOUR_CREDENTIALS>" \ "https://services.api.unity.com/advertise/stats/v2/organizations/{organizationId}/reports/skan"
Response example
{ "data": [ { "timestamp": "2024-01-15", "appId": "30ed569d57fe1f324a15fbe7", "appName": "App #1", "unityAppId": "7f2c8a91-4d3b-4e1f-9a2c-6b5d4e3f2a10", "starts": 2894, "installs": 40, "spend": 62.5 }, { "timestamp": "2024-01-15", "appId": "30ed569d57fe1f324a15fbe8", "appName": "App #2", "unityAppId": "3b9e1c7f-8a2d-4f6e-b4c1-0d9e8f7a6b5c", "starts": 1258, "installs": 16, "spend": 23.95 } ]}