IntegrationsAttributionAppsFlyer Android

AppsFlyer (Android)

Datafly Signal sends in-app events from your Android app to AppsFlyer’s server-to-server in-app events API, with the AppsFlyer ID, Google advertising ID, event time and AppsFlyer predefined event names.

Prerequisites

Find your app ID and dev key

The app ID is the Android package name as it appears in AppsFlyer and Google Play (for example com.example.myapp). The dev key is under App settings.

Pass the AppsFlyer ID from the app

Read the AppsFlyer ID from the AppsFlyer SDK and pass it to Signal with setCollectedId("appsflyer_id", ...). AppsFlyer requires it on every event.

Configure in Signal

Configuration Fields

FieldRequiredDescription
app_idYesThe Android package name exactly as it appears in the AppsFlyer dashboard and Google Play, for example com.example.myapp. Used in the request path /inappevent/{app_id}.
dev_keyYesYour AppsFlyer dev key, found in the AppsFlyer dashboard under App Settings.
api_tokenNoNot used by server-to-server event delivery (the dev key authenticates it). Leave blank.
bundle_idNoSent as bundleIdentifier on every event. AppsFlyer recommends always setting it: many ad networks need it for campaign optimisation.

Management UI Setup

  1. Go to Integrations > Add Integration > AppsFlyer (Android).
  2. Choose a preset: Default (default), Retail (ecommerce), Travel (travel), Media (media), Insurance (insurance).
  3. Fill in the fields above and click Save.

Request format

A purchase:

POST https://api2.appsflyer.com/inappevent/com.example.shop
{"advertising_id":"9c9a82fb-d5de-4cd1-90c3-527441c11828","aie":true,"appsflyer_id":"1234567890123-1234567","bundleIdentifier":"com.example.shop","consent_data":{"manual":{"ad_personalization_enabled":true,"ad_user_data_enabled":true,"gdpr_applies":true}},"customer_user_id":"crm-user-9","email_hashed":"86e0b9e56c17cc4d12387e1949b85053fbe73bc3ce5a1188713a9d300cc6133d","eventCurrency":"GBP","eventName":"af_purchase","eventTime":"2025-09-22 00:13:20.123","eventValue":"{\"af_content_id\":[\"SKU_1\",\"SKU_2\"],\"af_currency\":\"GBP\",\"af_order_id\":\"ORD-1001\",\"af_price\":[120,19.99],\"af_quantity\":[2,1],\"af_revenue\":259.99}","ip":"203.0.113.9","os":"14","phone_number_e164_hashed":"9e1919ad78a34fd67a84bfbcf2fea14074065517bea32e92924771c3f92e5462"}

eventValue is a JSON-encoded string, as AppsFlyer requires; an event with no values sends "".

Event Mapping

Signal eventVendor eventPresets
sign_upaf_complete_registrationDefault, Retail, Travel, Media, Insurance
loginaf_loginDefault, Retail, Travel, Media, Insurance
view_itemaf_content_viewDefault, Retail, Travel, Insurance
searchaf_searchDefault, Retail, Travel, Media
add_to_cartaf_add_to_cartDefault, Retail
begin_checkoutaf_initiated_checkoutDefault, Retail, Travel, Insurance
purchaseaf_purchaseDefault, Retail, Insurance
generate_leadgenerate_leadDefault, Insurance
trial_startedaf_start_trialDefault, Media
subscription_startedaf_subscribeDefault, Media
view_item_listaf_list_viewRetail
add_to_wishlistaf_add_to_wishlistRetail
add_payment_infoaf_add_payment_infoRetail
purchaseaf_travel_bookingTravel
booking_completedaf_travel_bookingTravel
content_viewedaf_content_viewMedia
quote_completedquote_completedInsurance

Identity

appsflyer_id is required; Android events without it (and all web and iOS events) are not sent. Signal also sends advertising_id (GAID) with aie, customer_user_id (your user ID), the IP address, and the email and phone as SHA-256 hashes (email_hashed, phone_number_e164_hashed, phone in E.164 first). No plaintext personal data is sent.

AppsFlyer’s consent_data.manual object carries gdpr_applies (EEA and UK visitors, from geo), ad_user_data_enabled and ad_personalization_enabled (from marketing consent). Assign a consent category to the integration in Signal to gate delivery altogether.

Troubleshooting

ProblemSolution
No events arriveCheck the app passes appsflyer_id with setCollectedId.
AppsFlyer API 3Signal uses the api2 host with the dev key. API 3 (api3 host, S2S token) is planned.

Blueprint

The AppsFlyer (Android) blueprint version is 0.8.0. It was last reviewed against the vendor’s documentation on 2026-09-23.

See also