Campaign cost measurement guide

At a glance: Aggregating and viewing campaign cost data.

Campaign cost measurement

AppsFlyer records campaign cost by click, cost API, and by ad spend ingestion (CSV file upload). AppsFlyer supports the cost models used by the partner, for example, CPI, CPA, CPC, and CPM. 

Aggregate campaign costs, including LTV performance metrics, are available in the dashboards and performance reports. The reports include ROI, ROAS, clicks, impressions, campaign ROI, and average effective cost per installation (eCPI) over time.

Principles of operation

This section describes the main principles of cost data aggregation. 

Cost aggregation methods 

Cost data can be aggregated using one or more methods. Each method has a different data freshness rate. If campaign cost is reported by more than one method then the cost prioritization mechanism determines the cost data made available in the platform ensuring that cost data is not inflated.

Method Data freshness Priority 
(from high to low)
Cost API Several times a day on average every four hours Highest
Ad Spend Ingestion Several minutes after ingestion -
Click Real-time Lowest
Cost aggregation methods compared

Campaign name changes

Changing campaign names is permitted in Facebook, Google Ads, Apple Search Ads, and Yahoo Search Ads.

Viewing cost data in the Overview dashboard

In the Overview dashboard, Aggregate Performance Report contains: cost, clicks, impressions, ROI, and average eCPI data. Aggregate reports.

CostReporting.jpg

FAQ, operations, and troubleshooting

Cost aggregation methods

The type and model of cost data reporting depends on the aggregation method used.

Cost aggregation method Cost models supported Data granularity Where is data available
Clicks (attribution link) CPI User-level
  • Dashboard and Performance reports
  • Raw data reports
Cost API All Levels above user level 

Dashboard and Performance reports

Ad Spend Ingestion (file upload) All Ad level

Dashboard and Performance reports

Campaign cost prioritization mechanism

For a given media source, cost can be collected by more than one aggregation method. When this occurs, it results in inflated cost data in the platform. 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: Cost API > Ad Spend Ingestion > Click. If available, use Cost API, as it is the most accurate.

Campaign cost aggregation method prioritization

mceclip3.png

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

 Example

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.

Outcomes:

  • 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. 
Method Description

Cost API

  • Highest priority
  • Most precise [best practice] method
  • Cost API vs. Ad Spend Ingestion: If an integrated partner has Cost API, then Ad Spend Ingestion is disabled. Note! This occurs even if Cost API isn't activated.
  • Enable Cost API: 
    • On any day Cost API is enabled, click cost is ignored. 
    • On the day you enable Cost 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 Cost API: On the day you disable Cost 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 campaign 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 a Cost API, then Ad Spend Ingestion is disabled for that same ad network. 
Click

Lowest priority

Cost aggregation method priority rules

Changing campaign names

AppsFlyer displays campaigns using the campaign ID as the key and not the campaign name. To avoid display anomalies ensure that campaigns have a unique campaign ID assigned to them and that you don't use the same campaign name with different campaign IDs.  

Changing the names of active campaigns, adsets, and ads may cause duplication or missing cost data. Pay attention to the following cases:

  • Google Ads and Facebook: Name changes permitted
  • Cost API/and other SRN networks: avoid changing the names of campaigns, adsets and ads on these networks.
  • Click networks: avoid using macros with the attribution link parameters of campaigns, adsets, and ads, if the results can be dynamic.
    Example: c={campaign} is the correct usage, as it returns the same campaign name.
    In contrast, c={campaign}_{creative_size} returns different results and records as separate campaigns in AppsFlyer.

Costs without installs

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

 Example

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

In 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 messages

Status Meaning Remarks/action required
Success-active The connection is live and pulling data N/A
No active campaigns Connection established  The data sent by the integrated partner does not match campaigns in AppsFlyer. 
Never sync The setup is complete. AppsFlyer has not yet pulled data using the connection. This message may display for up to five hours after you initially enable the Cost API.
No data The connection was successful.  The ad network did not return any data to our query. This can occur if the partner did not record any traffic/costs during the reporting period. 
No response The integrated partner's server is not responding to AppsFlyer. Wait 60 minutes. If the status message persists contact the integrated partner's support.
Invalid credentials AppsFlyer can't get the data as the credentials are not valid Ensure that the correct credentials are set in the integrated partner's cost tab. You should get the credentials from the integrated partner.
Missing credentials No credentials were provided Ensure that the correct credentials are set in the integrated partner's cost tab.
Something went wrong   If this status persists for a further hour contact AppsFlyer support. 
General error   If this status persists for a further hour contact AppsFlyer support.

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.

    OauthDelete_en-us.png

  5. Click Delete connection.
    A confirmation message displays.

    OauthConfirm_en-us.png

  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 openexchangerates.org
  • Exchange rates are updated hourly
  • Currency conversions are performed using the last known rate

List of ad networks

Ad networks providing cost information

  • Ad networks that report cost on the click
  • Dimensions supported are those contained on the click
Cost aggregated on the the click
Media source name Logo Cost aggregation method

AdAction

Click

Adattraction

Click

AdCommunal

Click

Adcrimson

Click

Adcrops

Click

AdDeals

Click

AddictiveAds

Click

Adison

Click

Adjoe

adjoe_logo.png Click

Adlix

adlix_logo.png Click

Adperio

Encrypted Click

Adpick

Encrypted Click

AdTiming

Encrypted Click

AdTrial

Click

Adxperience

Click

Affilinet

affilinet_logo.png Click

Altrooz

altrooz.png Click

AML

AML.png Click

AOL Platforms

Advertisingcom.png Click

Appa

Click

Appadvice

Click

AppBrain

Click

Appcoachs

Click

Appflood

Click

Appflood Affiliate Network

Click

AppiSocial

Click

APPKIN

Click

AppLike

Click

AppNext

Click

APPSILON

Click

AppThis

AppThis.png Click

APUS

Click

ASB

Click

Aura by ironSource

aura_ironsource.png Click

Bebi Media

Click

Beintoo

beintoo.png Click

Bidmotion

Click

Blind Ferret

blindferret_logo.png Click

BravAds

bravads_logo.png Click

Bubbleye

Click

Camera360

Click

Chartboost

Chartboost.jpg Click

CheBuoni

Click

Cheetah Mobile

Encrypted Click

Click2perform

Click

ClickDealer

ClickDealer.png Click

CommuteStream

Click

Creative Clicks

Click

Crobo

Click

Cross Install

Click

Curate

CurateMedia.png Click

DGM

Click

Digilant

Click

Directagents

DirectAgents.png Click

DirectFocus

Click

Drawbridge

drawbridge_logo.png Click

Digital Sunray

Click

Digital Turbine

Click

Discovry

Click

Display.io

displayio_logo.png Click

dotinapp

Encrypted Click

Ednplus

Click

Edge360

Click

Everyads

Click

Exciteco

Click

Fizzylabs

Click

Fyber

Click

Gamespipe

Click

Glispa Media CPI

Encrypted Click

Glispa Media CPR

Encrypted Click

Groundhog

Click

HangMyAds

Click

HAWK

Click

Headway Digital (MoBrain)

Click

Heyzap

Click

Hopemobi

Click

Iconpeak

IconPeak.png Click

Immersv

Click

Implus Technology

Click

Inflecto

inflectomedia_logo.png Encrypted Click

Infleux

Click

Inneractive

InnerActive.png Click

Intango

Click

ironSource

Encrypted Click

IRONTRAFFIC

Irontraffic.png Click

Jampp

Click

JetFuel

Click

Jump Ramp Games

Click

KickAssOffers

Click

KissMyAds

Click

Kixer

Click

Lemmonet

lemmonet.png Encrypted Click

LifeStreet

LifeStreet.png Click

LoopMe

Click

Lunplay

Lunplay.png Click

Lyto

Click

Madeviral

Click

Criteo DSP (Manage)

Click

MARKETIT

Click

Matchmade

Click

MdotM

MdotM.png Click

Minimob

minimob.png Click

Mintegral

Encrypted Click

MOA

Click

Mobair

Click

Mobcastle

Click

Mobiblade

Click

Mobikaka

  Click

Mobilda

mobilda.png Encrypted Click

Mobile10

Mobile10.png Click

MobilePlay

mobileplay.png Click

MobiteMedia

mobite_logo.png Click

Mobonus

Click

MobPartner

Encrypted Click

Mobsuccess

mobsuccess.png Click

Mobupps

mobupps_logo.png Click

Mobvista

Encrypted Click

Moloco

Click

Moinstall

Click

Motive

Motive.png Click

Msales

Click

Naranya

Click

NativeX

Encrypted Click

Netlion

Click

NIP-Ad

Click

Octro

Click

OfferToro

OfferToro_Logo.png Click

OnSeo

Click

Outmarketing

Click

Performance Revenues

Encrypted Click

Playhaven

playhaven.png Click

PMANetwork

Click

Pocket Media

Click

Promolta

Promolta.png Click

Pubmint

Click

Purple Friends

Click

Pusic

Click

rAPId:ads

Click

ReevAds

Click

RevMob

Click

Rocket10

Click

Rootmedia

Rootmedia.png Click

Roundcubez

Click

Seads

Click

SeccoSquared

Click

SDM

Click

Skrilo

Click

Startapp

Encrypted Click

Supersonic

Click

Surikate

Click

TA Media DSP

Click

Tapcash

Click

TapCommerce

tapcommerce_logo.jpg Click

Tapmyads

Click

Tapsense

Encrypted Click

Taptica

Taptica.png Click

Time One

Encrypted

Tyroo

tyroo_logo.png Click

Unity Ads

Click

Vungle

Vungle.png Click

Wagawin

Click
Wisebirds Click

yeahmobi

Encrypted Click

Yieldmo

Yieldmo.png Click

Webpals

image001__1__-_Inbal_Dovrat.png Click

ZPLAY Ads

Click

Ad networks supporting Cost API

Cost API networks
Media source name Logo Dimensions supported Geo supported

 Aarki

Aarki.png Campaign No

AdColony

Campaign Yes

AdColony Performance Media

Campaign Yes

AdGate Media

Campaign Yes

Adiketeev

(Trademob)

Campaign Yes

Adjoe

Campaign, ad Yes

Apple Search Ads

Yes

Applift

Campaign Yes

AppLike

Campaign, ad Yes

Applovin

Media source, campaign, site ID Yes

Appreciate

Campaign Yes

Aura

Campaign Yes

BlindFerret

Campaign, ad Yes

Bluestacks

Campaign Yes

Chartboost

Campaign Yes

Digital Turbine

Campaign Yes

Facebook

facebook_logo.png Campaign, adset, ad, and channel Yes

Fyber

Campaign Yes

Google

Campaign Yes

Influencemobile

Campaign Yes

ironSource

Campaign, ad, site ID Yes

Jampp

Campaign Yes

JetFuel

Campaign  Yes 

Liftoff

  Campaign, ad, site ID  Yes

Lifestreet

Campaign, ad Yes

Mintegral

Campaign Yes
Mobupps Campaign Yes
Moloco Campaign, ad  Yes 
myTarget mytarget_logo.png Campaign No

Peronal.ly

Campaign, ad Yes

Pinterest

Pinterest_logo.png Campaign, ad set, Ad (promoted pin) No

Snap

snap_in_logo.png Campaign, ad set, and ad. Yes

Smadex

Campaign, ad Yes

TikTok Ads

Campaign, ad set, ad   Yes

Tapjoy

tapjoy_logo.png Campaign, site ID Yes

Taptica

The Taptica's logo Campaign Yes

The Money Manual (The Penny Pincher)

Campaign Yes

TUNE

The TUNE's logo Campaign Yes

Unity Ads

Campaign  Yes

Verizon Meida (Oath Ad Platforms) 

Campaign, ad set, ad, Yes

Vungle

Campaign, ad Yes
Was this article helpful?