Cost operations

At a glance: Aggregating and viewing marketing cost data.


Cost aggregation: OverviewOperations | Cost ETLAd Spend Ingestion

Cost aggregation

  • Xpend:
    • Acquires advertising cost data by API integration, ad spend ingestion (CSV file upload), and cost by click.
    • Supports various cost models used by the partner, for example, CPI, CPA, CPC, and CPM.
    • Cost data is available in AppsFlyer dashboards and cohort analytics, and by export to an S3 bucket (Cost ETL).
Cost aggregation method Cost models supported Data granularity Data freshness Remarks
API* All

Level depends on the integration

Several times a day, on average every four hours Data may change after the cost event as we try to receive data 7 days back. This enables us to take into account retroactive changes made by the ad network. 
Ad Spend Ingestion (file upload) All Level depends on the file uploaded  Up to 4 hours after ingestion Cost reported can be reverted and corrected data submitted for up to 90 days.
Clicks (attribution link) CPI User-level

Minimum: realtime

Maximum: Up to 4 hours after click

No change possible.
* The API connection to partners is by either Cost API or InCost API (never both). The API used and data granularity provided is partner-dependent.

Cost operations

This section discusses campaign cost operations. 

Changing campaign names

AppsFlyer displays campaigns using the campaign ID as the key.

To avoid display anomalies ensure that:

  • Campaigns have a unique campaign ID assigned to them.
  • You don't use the same campaign name with different campaign IDs.  

Costs without installs

Why do I see cost data with no installs? This occurs when cost is provided at an upper-level hierarchy (e.g. campaign level), but the performance information (clicks and installs) is provided at a lower level in the advertising hierarchy (e.g. adset).

AppsFlyer completes the cost data for missing dimensions from an upper-level hierarchy. This guarantees a full view of the cost data at any level and minimizes internal discrepancies.


An advertiser runs a campaign. The advertising hierarchy is as follows:

  • Media source: media_eg
  • Campaign: campaign_eg 
  • Adsetsadest1, adset2

The following information relating to the media source is displayed.

Hierarchy: All Media Sources > media_eg

Campaign Cost Installs
campaign_eg $100 100
campaign_yy $200 1000
campaign_zz $300 2000

Drilling down into campaign_eg, the adset level is shown. 

Hierarchy: All Media Sources > media_eg > campaign_eg 

Adset Cost Installs
None $100  
adset_1 N/A 30
adset_2 N/A 70

SIn this case, the cost of campaign_eg is $100 and is provided at the campaign level. When drilling down to the adset level, which in this case is the component level, the cost cannot be broken down by adset. 

To overcome this, AppsFlyer carries down the cost from the campaign level and displays it in a separate row. In this case, the adset is shown as none and the installs field left blank

Cost API status

The operational status of cost integration is available as follows:

Cost Integration Status page

The Cost Integration Status page contains all your cost integrations and their current operational status.

To view cost integration status: 

  • In AppsFlyer, go to Integration > Cost Integration Status.

Headline cost integration metrics


Total cost integrations: Number of apps/partners for which integration is enabled, irrespective of the status. For example, if you have an Android and iOS app, both integrated with Facebook, the total integrations is two.

Limitation: Integrations are only counted if one of the statuses on the Cost Integration Status page is applicable. For other statuses, see the dedicated Integrated partner page.  

Active: Number of partners with the cost API synced and operational.
Action required: Number of apps and media sources in your account with API issues that need updating.
Waiting for sync: Number of integrations that are connected but waiting for data to be pulled.


  • App
  • Media source
  • Status

Cost integration statuses

Invalid credentials:
  • AppsFlyer can't get data via the API because the credentials are not valid.
  • Reconnect using the correct credentials.
Active: Integrations operating correctly.
Waiting for sync: Integrations that are connected but waiting for data to be pulled. It can take up to 6 hours to see the data in AppsFlyer.


Media source

App: App with cost data API integration.

Cost: Campaign cost for the app per media source for the last 7 days.

Last sync: The most recent time that cost data was received.

Action: Action required to enable cost data, if the API integration has an issue. Clicking Reconnect leads to the required action. 

Integrated partner cost API status

The cost tab in the Integrated Partners section is relevant for networks that support getting cost data via API, and displays:

  • the status of your cost integration.
  • last time AppsFlyer successfully pulled matching cost data.

To view the individual partner cost integration status:

  1. In AppsFlyer, go to Configuration > Integrated Partners.
  2. Select the partner. 
  3. Go to the Cost tab.
    The status and last sync time displays.
Status Remarks/action required
Active Integration is enabled and successfully connected to the network.
Partner API is not returning matching cost data Connection is successful but the API has not returned any cost data matching AppsFlyer campaign attribution data.
Partner API is not responding
  • The integrated partner's server is not responding to AppsFlyer.
  • Wait 6 hours. If the status message persists, contact AppsFlyer support.
Invalid credentials
  • AppsFlyer can't get data via the API because the credentials are not valid.
  • Reconnect using the correct credentials.
Reach out to your network account manager to get access to their reporting API Work with the partner account manager to enable the cost integration in the partner's system.

Enable Cost API

The API connection to partners is by either Cost API or InCost API (never both). The API used and data granularity provided is partner-dependent. 

Look in the partner list to see if the partner you want to enable cost API for uses Cost API or InCost API.


AppsFlyer matches cost data to attribution data. As such, ensure that attribution links include the campaign ID (and ad set and ad IDs for partners that report with more granularity), without which we are unable to aggregate and report cost.

To enable Cost API:

  1. In the integrated partner Cost tab, enable Get Cost Data.
    The credentials required to connect to the partner display.
  2. Get the required credentials from the partner's dashboard or as directed in the AppsFlyer user interface.
  3. Complete the credential fields. 
  4. If the partner’s cost configuration has Site ID mapping, select the desired site ID configuration from the dropdown. 
  5. Click Save Cost.
  6. Click Test Connection.
    • The message API connection verified displays.
    •  The API is active. AppsFlyer collects data from the partner 6 times a day, on average once every four hours. 
    • Cost data sync status and messages

Enabling InCost API

To enable InCost API:

  • In the integrated partner Cost tab, enable Get Cost Data.

Disable Cost API

To disable Cost API: Go to Integrated Partners, select the partner, go to the Cost tab, disable Get Cost Data 

Deleting connected accounts in the Cost tab

Connection to some integrated partners is achieved by logging into the partner from within AppsFlyer and connecting to the account.  You can delete the connection as needed. Once deleted, AppsFlyer is no longer able to pull cost data from the account. Deleting a connection does not impact historical data. 

To delete a connected account:

  1. In AppsFlyer, go to Configuration > Integrated Partners.
  2. Select the integrated partner, for example, Facebook.
  3. Go to the Cost tab.
    The list of connected accounts displays.
  4. In the actions column, hover over an account.
    The Delete connection option displays.


  5. Click Delete connection.
    A confirmation message displays.


  6. Click Delete.
    The account connection is deleted.
    The collection of cost data for the previously connected account stops immediately. There is no impact to historical data.  

Cost currency conversion

If the campaign cost currency provided by the ad network differs from that of the app-defined currency set on the platform, the cost is converted to the app-defined currency as follows:

  • AppsFlyer gets the rates from
  • Exchange rates are updated hourly
  • Currency conversions are performed using the last known rate
Was this article helpful?