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
| Field | Required | Description |
|---|---|---|
app_id | Yes | The 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_key | Yes | Your AppsFlyer dev key, found in the AppsFlyer dashboard under App Settings. |
api_token | No | Not used by server-to-server event delivery (the dev key authenticates it). Leave blank. |
bundle_id | No | Sent as bundleIdentifier on every event. AppsFlyer recommends always setting it: many ad networks need it for campaign optimisation. |
Management UI Setup
- Go to Integrations > Add Integration > AppsFlyer (Android).
- Choose a preset: Default (
default), Retail (ecommerce), Travel (travel), Media (media), Insurance (insurance). - 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 event | Vendor event | Presets |
|---|---|---|
sign_up | af_complete_registration | Default, Retail, Travel, Media, Insurance |
login | af_login | Default, Retail, Travel, Media, Insurance |
view_item | af_content_view | Default, Retail, Travel, Insurance |
search | af_search | Default, Retail, Travel, Media |
add_to_cart | af_add_to_cart | Default, Retail |
begin_checkout | af_initiated_checkout | Default, Retail, Travel, Insurance |
purchase | af_purchase | Default, Retail, Insurance |
generate_lead | generate_lead | Default, Insurance |
trial_started | af_start_trial | Default, Media |
subscription_started | af_subscribe | Default, Media |
view_item_list | af_list_view | Retail |
add_to_wishlist | af_add_to_wishlist | Retail |
add_payment_info | af_add_payment_info | Retail |
purchase | af_travel_booking | Travel |
booking_completed | af_travel_booking | Travel |
content_viewed | af_content_view | Media |
quote_completed | quote_completed | Insurance |
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.
Consent
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
| Problem | Solution |
|---|---|
| No events arrive | Check the app passes appsflyer_id with setCollectedId. |
| AppsFlyer API 3 | Signal 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.