adstage
TrackingIntegrations

Unity Ads Integration

Beta

The Unity Ads integration is still being verified with real advertiser accounts. If adstage numbers differ from the Unity console, please let us know.

In adstage, you can collect Unity Ads campaign cost, report clicks, installs, and purchases arriving through a tracking link under the unity.ads channel, and send installs and purchases back to Unity. Unity Ads does not use an OAuth sign-in; you connect it by entering a service account key issued in Unity Cloud.

1. Integration Overview

When you connect Unity Ads in Integrations > Ad Channel Integration > Unity Ads, three capabilities work together.

FeatureSupportDescription
Cost collectionSupportedRegister a key in the Cost Integration tab to collect spend, impressions, clicks, and installs per campaign every 4 hours
Click attributionSupportedClicks, installs, and events arriving through a tracking link are reported under the unity.ads channel
Conversion sendingSupportedA Network Postback preset on the link sends installs and purchases to Unity. This is the custom (non-MMP) integration Unity officially allows

Please note

ironSource Ads direct demand shut down on April 30, 2026 (new accounts and campaigns stopped on April 15), and Unity directs advertisers to Unity Ads. adstage does not offer an ironSource Ads integration, so use the Unity Ads integration instead.

2. Getting a Key from Unity

Unity Ads cost is read through Unity's Advertising Statistics API, which authenticates with a service account Key ID and Secret key. The same steps appear in the How to get your Unity Ads key box in adstage, and the Open Unity Ads key page button opens Unity Cloud directly.

  1. In Unity Cloud, go to Manage organization > Administration > Service Accounts and create a service account. Only an organization Owner or Manager can do this.

  2. Add the organization role Growth > Advertise Stats API Viewer to the service account. Without this role, Unity rejects the request when adstage registers the key.

  3. On the service account page, click Create key and copy the Key ID and Secret key. The secret is shown only once; if you lose it, create a new key.

  4. In the Unity User Acquisition (Acquire) dashboard, open Settings and copy the Organization core ID. This is the value for the Organization ID field in adstage.

Please note

  • The Settings page also has a separate Organization ID field. The value adstage needs is the Organization core ID.
  • Unity also documents an Advertise Stats API MMP Viewer role for service accounts created at an MMP's request. adstage uses a service account you create yourself, so add Advertise Stats API Viewer.

3. Registering the Account in adstage

  1. Go to Integrations > Ad Channel Integration > Unity Ads and open the Cost Integration tab.

  2. Turn on the Unity Ads Cost Integration switch. The Add Integration Account button is disabled while the switch is off.

  3. Click Add Integration Account and fill in the fields.

FieldDescription
Account LabelA name to identify this account in adstage. Any text works
Organization IDThe Organization core ID from Settings in the Unity User Acquisition dashboard
Key IDThe Key ID of the service account key
Secret KeyThe Secret key of the service account key. It is masked on screen and stored encrypted
  1. Click Integrate. Before saving, adstage requests one day of reporting from Unity with the key to confirm it is valid (the button shows Verifying...). When this finishes, the message "Unity Ads account has been successfully added." appears and the first collection of the last 30 days starts immediately.

Errors shown while connecting

MessageCauseWhat to do
This account is already registeredThe same organization ID is already registered in this organizationKeep using the existing account
The key was rejected by Unity Ads. Please check the key and its permissions.The Key ID, Secret key, or Organization ID is wrong, or the service account lacks the Advertise Stats API Viewer roleAdd the role and copy the key again
Could not reach Unity Ads to verify the key. Please try again later.A temporary error or a request limit on Unity's sideTry again shortly

4. Managing Connected Accounts

Registered accounts are listed in the Cost Integration tab with the columns Account Name, Status, Last Data Update, and Management.

  • Preparing: the first collection is running right after registration. It usually finishes within a few minutes.
  • Success: the Unity API connection is healthy. If no ads ran and zero rows were collected, the status is still Success as long as the connection works.
  • Failed: Unity rejected the key (key deleted, role removed, and so on). Hover over the badge to see the error. Request limits (429) and temporary errors do not change the status; collection is retried in the next cycle.

If no cost rows are stored for more than 3 days, a warning appears next to the status with an Action Required notice ("No cost data has been collected for N days"). It clears automatically once collection resumes.

To rotate a key or disconnect, delete the account with the delete icon in the Management column. Data already collected is kept; only new data stops. There is no way to edit a stored key on screen.

In Deep Links > Create, select Unity Ads as the ad channel. The campaign and creative fields are filled with Unity macros; leave them as they are and Unity replaces them with real values at click time. Unity has no ad group level, so leave the ad group field empty.

adstage parameterUnity macroValue
campaign{campaign_name}Campaign name
campaign_id{campaign_id}Campaign ID
ad_creative{creative_pack}Creative pack name
ad_creative_id{creative_pack_id}Creative pack ID
sub_channel{source_app_id}ID of the app that showed the ad. Added only if you fill the additional parameter field
ifa_raw{ifa}Advertising ID (IDFA on iOS, GAID on Android). Unity requires this macro in every link
gamer_id{gamer_id}Unity user ID. Returned to Unity as gamerId in the install postback
unity_game_id{game_id}Unity Game ID of the advertised game. Used in the install postback path

ifa_raw, gamer_id, unity_game_id, and the ID macros are always appended, whether or not you typed anything. The generated link looks like this:

https://adg.im/@{org}/track/unity.ads?short_path={link_path}&campaign={campaign_name}&campaign_id={campaign_id}&ad_creative={creative_pack}&ad_creative_id={creative_pack_id}&sub_channel={source_app_id}&ifa_raw={ifa}&gamer_id={gamer_id}&unity_game_id={game_id}

Unity does not provide a per-click ID macro. adstage issues the click ID for the tracking link, and when the network postback is on, gamer_id is used as the matching key with Unity.

Paste the copied link into the app's attribution link settings in the Unity User Acquisition dashboard, one per platform. Unity validates the URL format when you save it. If you cannot find the menu, ask your Unity contact.

Please note

  • Do not remove or edit the {ifa}, {gamer_id}, and {game_id} macros. Unity refuses to save a link without {ifa}, and without the other two values the install postback cannot be sent.
  • Unity requires attribution links to use https, to redirect with HTTP 3xx codes, and not to redirect to the App Store or Google Play. Point the link's redirect settings at a web landing page, not a store.
  • Because Unity fills in the campaign name, cost and conversions merge into the same campaign row. If you typed a name yourself, it must match the Unity campaign name exactly.

6. Sending Conversions to Unity

Unity publishes the install and in-app event postback spec for advertisers who send data directly without an MMP. When you turn on Network Postback on a Unity Ads channel link, the Network Preset Unity Ads — Install & purchase (custom integration) is filled in automatically; if the fields are empty, choose it from Network Preset. See Network Postback for what each setting does.

FieldValue filled in
Install Postback URL Templatehttps://postback.unityads.unity3d.com/games/{unity_game_id}/install?advertisingTrackingId={adid}&gamerId={click_id}&attributed=1
Event Postback URL Templatehttps://ads-secondary-conversion.unityads.unity3d.com/v1/events?ifa={adid}&gamer_id={click_id}&tracking_enabled={tracking_enabled}&campaign_id={campaign_id}&game_id={unity_game_id}&platform={platform}&bundle_id={bundle_id}&install_ts={install_ts}&was_conversion_attributed=1&event={event}&value={revenue}&currency={currency}
Click ID Parametergamer_id
Trigger Eventsinstall, purchase
  • {unity_game_id} and {campaign_id} echo the values Unity put in the link at click time. Nothing needs to be entered.
  • {bundle_id} is read from the Android package name (App Links) and iOS bundle ID (Universal Links) registered in your deep link settings. To use the purchase postback, both must be set in Link Settings.
  • {install_ts} is the install time, and {tracking_enabled} is 1 when the advertising ID is available and 0 otherwise. {revenue} and {currency} carry the purchase amount and currency.
  • install also matches first_open.
  • Unity accepts three in-app event names: purchase, ad_revenue, and session. adstage's purchase is sent with the same name, so leave Event Name Mapping empty. Do not add events Unity does not accept.

Please note

  • The install postback is the basis for CPI billing. Unity counts installs from the install postbacks it receives, so set up both the tracking link and the install postback for installs and cost to appear correctly in the Unity console and in adstage cost reports.
  • Event optimization campaigns (Retention, Payer, and Level Complete) can only run with an MMP Unity designates (Adjust, AppsFlyer, or Singular). They are not available with a custom integration, and Unity notes it may not be able to troubleshoot custom integrations.
  • Unity recommends sharing all installs, including unattributed ones, but the adstage network postback sends only events attributed to that link, marked attributed=1.

7. Collected Data

Cost data is what Unity reports, stored per day and per campaign.

ItemDescription
Collection intervalEvery 4 hours (1, 5, 9, 13, 17, and 21 o'clock Korea Standard Time)
Update rangeThe last 30 days excluding the day of the update (D-30 to D-1), re-fetched every cycle so values stay current
First collectionStarts automatically right after registration. Older data is not collected
Data levelCampaign level (day x campaign)
CurrencyStored as USD and converted to your report currency. Unity does not state a currency, so the advertiser billing currency USD is used
TimezoneUTC (Unity Statistics API)
Channel nameunity.ads

In reports, metric names carry a (Channel) suffix to show they are network-reported values.

Report metricUnity value
Ad Spend (Channel)Spend
Impressions (Channel)Ad starts, which Unity counts as impressions
Clicks (Channel)Clicks
Conversions (Channel)Installs attributed by Unity
Conversion Value (Channel)Not collected. Use purchase revenue measured by the adstage SDK

Days where spend, impressions, clicks, and installs are all zero are not stored. Campaigns are keyed by campaign ID, so renaming a campaign in the Unity console keeps the same history.

8. Cautions

Please note the following.

  • Numbers may differ between Unity Ads and adstage. Unity reports in UTC, and aggregation timing and currency conversion also differ.
  • For CPI campaigns, spend follows the installs Unity counts, so late install postbacks can change figures for past days. Changes are picked up when the last 30 days are re-fetched.
  • The Unity Statistics API allows 1 request per second and 30 requests per 30 minutes per organization ID. If other tools call the API heavily with the same organization ID, collection may be delayed; adstage retries automatically.
  • Deleting the service account key or removing its role stops collection and sets the status to Failed.
  • Turning off the Unity Ads Cost Integration switch stops collection for every Unity account in this organization. The accounts remain, so turning it back on resumes collection. adstage only reads Unity reports and never changes campaign settings.

9. Troubleshooting

If something goes wrong, check the following.

The key cannot be registered

  1. Check the role: confirm the service account has the Growth > Advertise Stats API Viewer role
  2. Check the organization: confirm the value in Organization ID is the Organization core ID from Settings and belongs to the organization where the service account was created
  3. Check the key: confirm the Secret key is exactly the value copied at creation. If it is lost, create a new key
  4. Retry: "Could not reach Unity Ads" is a temporary error, so try again shortly

Status is Success but there is no data

  1. Check spend: compare with the Unity console report to confirm campaigns spent in the last 30 days
  2. Check timing: the first collection starts right after registration, then the last 30 days (excluding today) are refreshed every 4 hours. Today's data arrives with tomorrow's update
  3. Check the install postback: CPI campaigns are billed on the installs Unity receives, so cost may stay at 0 without them

Postbacks do not reach Unity

  1. Check the link: confirm the gamer_id, unity_game_id, and ifa_raw parameters are still in the tracking link
  2. Check the settings: confirm Network Postback is on for that link and Click ID Parameter is gamer_id
  3. Check app info: the purchase postback needs bundle_id, so confirm the Android package name and iOS bundle ID are registered in link settings
  4. Check attribution: postbacks fire only for installs and purchases attributed to that link

If you need further help, contact adstage support.

10. FAQ

Do I need to register adstage as an MMP with Unity?

No. Unity officially allows advertisers to send data through a custom integration, so cost collection, tracking links, and postbacks work without any registration. Event optimization campaigns, however, require a Unity-designated MMP.

I have several Unity organizations.

Create a service account key in each organization and add one account per organization. The same organization ID can be registered only once.

What channel name should I use in a custom link?

unity, unityads, unity_ads, and unity ads are all reported as unity.ads.

Why do Conversions (Channel) and adstage installs differ?

Conversions (Channel) are installs Unity attributed by its own rules, while adstage installs are measured with the tracking link and SDK. Different attribution rules and timezones produce different numbers.

11. References

Table of Contents