ROI360—cost aggregation overview


At a glance: Learn about methods for advertisers to aggregate and view marketing cost data.


Related articles: Cost operations | Cost ETLAd Spend Ingestion

Cost aggregation


  • Provides aggregate advertising cost data, and cost-related LTV performance metrics. These are available via dashboards and performance reports. The cost-related metrics available include ROI, ROAS, clicks, impressions, campaign ROI, and average effective cost per installation (eCPI) over time.
  • Supports different cost models used by the partner, for example, CPI, CPA, CPC, and CPM.
  • Records advertising cost by API, ad spend ingestion (CSV file upload), and cost by click.
  • Agencies can access ROI360 cost data for advertisers with an ROI360 subscription.

The following metrics are available to advertisers without an ROI360 subscription:

  • Cost data by click.
  • SRN clicks and impressions data, configured via the SRN integrated partner Cost tab.

Principles of cost data aggregation

This section describes the main principles of campaign cost data aggregation. 

Cost aggregation methods

Cost data is obtained from partners using one or more methods. If cost is reported by more than one method, then the cost prioritization mechanism determines which data is used. This ensures that cost data is not inflated.

After AppsFlyer processes the data, it displays in UTC timezone (default) or as per your app-specific timezone settings.

Cost aggregation method Cost models supported Data granularity Data freshness Remarks
API* All

Level depends on the integration

Intraday Data may change after the cost event as we try to receive data up to 30 days back (depending on the ad network). 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
* API integrations between partners and AppsFlyer are by either Cost API or InCost API (never both). The API used and data granularity provided is partner-dependent.

Cost data availability and reports

The following table indicates where cost data is available.

For the purposes of understanding the table, the following explanations apply, unless otherwise indicated in the table remarks:

  • UA: Cost data for user acquisition campaigns with at least 1 recently-recorded install (meaning in the past approximately 7 days).
  • Unified: Cost data of all campaigns, including those without any recently-recorded installs (meaning in the past approximately 7 days). The table indicates when data is only available for campaigns with at least 1 recently-recorded install.
  • If campaign name changes are not supported, both campaign names display, one with attribution data, and one with cost data. Neither campaign name displayed will include the complete data picture.

Cost data availability and reports

Reporting method View/data type Campaign name change support Remarks
Overview dashboard
  • UA
  • Unified
Yes Retargeting view doesn't display cost. Cost for retargeting displays in the unified view.
Activity dashboard UA Yes  

Cohort dashboard

  • UA
  • Unified
  • Retargeting view doesn't display cost
  • This unified data is only for campaigns with at least 1 recently-recorded install.

Cohort API

  • UA
  • Unified
Yes This unified data is only for campaigns with at least 1 recently-recorded install.

SKAN dashboard

SKAN No SKAN installs display, along with cost data for all installs (including non-SKAN installs).

SKAN Aggregated Performance API

SKAN No SKAN installs display, along with cost data for all installs (including non-SKAN installs).

Pivot dashboard



Master API UA No


Custom dashboard UA No  
Cost ETL Unified Yes

All available cost data displays.

Aggregated Pull API UA No  


Push API

Raw click data (not aggregated)

Not relevant


Raw data Pull API

Raw click data (not aggregated)

Not relevant


Data Locker

Raw click data (not aggregated)

Not relevant

Data Locker Cohort doesn’t support cost.


  • Data granularity can differ based on dashboard/report type. The Cost ETL reporting tool contains the complete set of data. This includes campaign hierarchy details (media source, campaign name, adset, and the dimensions made available by the ad network, including geo, channel. site ID, and keywords).

  • Click cost data is available in raw-data reports. 

Cost prioritization mechanism

For a given media source, cost can be provided by more than one aggregation method. To avoid cost inflation, a campaign cost prioritization mechanism decides which cost data is made available in the platform. Priority is given according to the aggregation method. The priority from highest to lowest is: API > Ad Spend Ingestion > Click. If available, use API, as it is the most accurate.

Campaign cost aggregation method prioritization


  • This mechanism impacts aggregate data reports and dashboards.
  • Click cost data available in raw data reports are not impacted by the prioritization mechanism.


Scenario: An ad network reports cost per click, but you decide to enable the ad network's Cost API.

Result: Cost is aggregated by both click and Cost API. Since Cost API has priority, click costs are ignored.


  • Possible to implement multiple cost-aggregation methods. The actual reported cost is affected by the cost aggregation method priority rules set out in the table below.
  • Change affects agency-generated traffic in the same manner. This includes both transparent and non-transparent agencies. 
  • The change has retroactive impact. Historical aggregate cost data can change. 

Cost aggregation method priority rules

Method Description


  • Highest priority
  • Most precise [best practice]
  • Cost API vs. Ad Spend Ingestion: If an integrated partner has ad cost-aggregating API, then Ad Spend Ingestion is disabled. Note! This occurs even if the API isn't activated.
  • Enable API: 
    • On any day Cost API is enabled, click cost is ignored. 
    • On the day you enable the API, it gets cost data for the entire day; it doesn't matter at what time during the day it was enabled. Click cost is ignored for the entire day.
    • It may take several hours for data to be available after you enable the API. 
  • Disable API: On the day you disable the API, click cost is ignored until the beginning of the next day. Example: On Monday at 14:00 Tokyo time, the API is disabled. On Tuesday from 00:00 Tokyo time, clicks are no longer ignored.
Ad Spend Ingestion
  • At the site ID and keyword level, has priority over click cost data. 
  • Ad Spend Ingestion vs. click cost on a given campaign day:
    • Priority is given to cost recorded by ingestion for that day; click cost is ignored. 
    • Example: abc_campaign on 5 and 10 December
      • Record ingest campaign costs.
      • Click costs are ignored. 
      • No other campaigns or dates are impacted.
  • If an ad network has an ad-cost aggregating API, then Ad Spend Ingestion is disabled for that same ad network. 

Lowest priority

List of ad networks

Ad networks supporting Cost API

The following table lists all ad networks supporting Cost API, with the data granularity available for each:

  • Dimensions
  • Supported features and their characteristics
  • Metrics (as reported by the ad networks)

Download file: CSVXLS

Traits and limitations




  • Agencies can access ROI360 cost data for advertisers with an ROI360 subscription.
  • When transparent agencies run campaigns, advertisers can see the cost displayed in dashboards and reports that support unified view. Learn more
  • If an advertiser ends their relationship with an agency, and disables the agency permissions at the app level, if the agency has cost configured for the app, cost data is still pulled. If the advertiser wants to stop this data being pulled, they must ask the agency to disable their cost integration in AppsFlyer.
  • For some ad networks, agencies must contact the advertiser to activate the integration and are prompted in the AppsFlyer UI to do so. For these networks, agencies and advertisers must ensure that when the ad network sends data it includes the af_prt parameter, required for agency cost attribution.

API data freshness

  • Intraday (except for Moloco)
  • Mintegral data is available via API by the following day, approximately 4 hours after the previous day ended (depending on your Mintegral timezone settings). Meaning, if the event occurred on Day 1, cost data is available by Day 2, at approximately 4:00.

Campaign name changes

Ad spend data displays using the most recent campaign name reported. Note: This is for the display of aggregate data; not the raw data itself.


If an ad network supports just one timezone, and there is a discrepancy between the timezone the ad network supports and the timezone set in your app settings, the timezone that the ad network supports is used.