AppsFlyer

Mobile attribution and marketing analytics platform. Zeotap sends audience membership updates via the Audiences Import API and server-to-server in-app events via the S2S Events API to AppsFlyer.

Prerequisites

  • An AppsFlyer account with admin or team-member access
  • An AppsFlyer API V2 token (for audience syncs) or a dev key (for S2S events)
  • At least one app registered in your AppsFlyer dashboard
  • For audience syncs: an existing audience with an import key, or permission to create one

Authentication

AppsFlyer uses API Key authentication with two credential types depending on the target.

API V2 Token (Audiences)

  1. In AppsFlyer, navigate to Security Center > API Tokens
  2. Generate or copy your API V2 Token
  3. Enter the token in Zeotap as the API V2 Token

Dev Key (S2S Events)

  1. In AppsFlyer, go to App Settings > Dev Key
  2. Copy the dev key shown on the page
  3. Enter the key in Zeotap as the Dev Key

Configuration

FieldTypeRequiredDescription
PlatformSelectYesThe mobile platform: Android or iOS
App IDTextYesYour AppsFlyer app identifier. For iOS apps, prefix with id (e.g., id123456789)

Target Settings

FieldTypeRequiredDescription
Target TypeSelectYesType of data to send: Audiences (Import API) or S2S Events
Audience Import KeyTextYes (Audiences only)The import key for the target audience. Found in AppsFlyer under Audiences > Import

Supported Operations

Sync Modes

ModeSupported
Upsert
InsertYes
Update
Mirror

S2S events are append-only. Each event is sent as a separate POST request to the AppsFlyer S2S API.

Audience Sync Modes

ModeSupported
AddYes
RemoveYes
MirrorYes
Upsert

Audience syncs use the AppsFlyer Audiences Import API V2 with add, remove, or both (for mirror mode) actions.

Features

  • Field Mapping: Yes
  • Schema Introspection: No

Required Mapping Fields

Target TypeRequired Fields
S2S Eventsappsflyer_id, eventName
Audiencesdevice_id (or one of: gaid, idfa, idfv, cuid)

Default Destination Fields

S2S Events: appsflyer_id, eventName, eventValue, eventCurrency, eventTime, customer_user_id, ip, custom_data

Audiences: device_id, gaid, idfa, idfv, cuid, emails, phone_e164

How It Works

Audiences

  1. Zeotap reads rows from your warehouse model or audience
  2. Rows are chunked into batches of up to 10,000 devices (AppsFlyer’s per-request limit)
  3. Each batch is POSTed to https://hq1.appsflyer.com/api/audiences-import-api/v2/{action}
  4. The {action} path parameter is set to add or remove based on the sync mode
  5. In mirror mode, added/changed rows are sent as add and removed rows are sent as remove
  6. The device_id field is automatically mapped to the platform-specific identifier (gaid for Android, idfv for iOS) if not explicitly provided

S2S Events

  1. Zeotap reads event rows from your warehouse model
  2. Each row is sent as an individual POST to https://api2.appsflyer.com/inappevent/{app_id}
  3. The authentication header carries your dev key
  4. Each payload includes the af_events_api flag to indicate server-to-server origin
  5. The eventValue field is serialized to a JSON string if provided as structured data

Rate Limits

APILimit
Audiences Import API350 requests per minute, 10,000 devices per request
S2S Events API1,000 requests per second
S2S Event PayloadMaximum 1 KB per event

Best Practices

  • Use platform-specific IDs: Map gaid for Android and idfa/idfv for iOS rather than a generic device ID for best match rates
  • Audience updates take 24 hours: AppsFlyer processes audience imports asynchronously. Changes are reflected in partner networks within 24 hours
  • Keep S2S payloads small: The 1 KB payload limit means you should only include essential event properties
  • Use mirror mode for audiences: Mirror mode ensures your AppsFlyer audience stays in sync with your warehouse by handling both adds and removes automatically
  • Prefix iOS app IDs: Always prefix iOS app IDs with id (e.g., id123456789)

Troubleshooting

Authentication failed: invalid API token

Verify your API V2 token in Security Center > API Tokens in the AppsFlyer dashboard. Tokens generated before March 10, 2026, 19:00 UTC have been revoked and need to be regenerated.

Authentication failed: invalid dev key

Confirm the dev key in App Settings > Dev Key. Ensure you are using the dev key for the correct app.

400 Bad Request on audience import

Check that the import_key is correct and the audience exists in AppsFlyer. Also verify that your device identifiers match the platform: Android requires gaid, oaid, imei, or cuid; iOS requires idfv, idfa, or cuid.

Events not appearing in AppsFlyer

S2S events require a valid appsflyer_id. This is the unique AppsFlyer-generated device identifier, not your own user ID. Verify that the appsflyer_id format matches the expected pattern (13 digits, dash, 7 digits).

Rate limit exceeded (429)

The Audiences Import API allows 350 requests per minute. If you are syncing large audiences, Zeotap automatically chunks into 10,000-device batches. For very large audiences (millions of devices), consider scheduling syncs during off-peak hours.

Audience changes not reflected in partner networks

AppsFlyer processes audience imports asynchronously. It can take up to 24 hours for changes to propagate to connected partner networks. Check the audience status in the AppsFlyer Audiences dashboard.

Missing device identifiers

Each device in an audience import must include at least one valid identifier for the platform. For Android: gaid, oaid, imei, or cuid. For iOS: idfv, idfa, or cuid. Rows without a valid identifier will be rejected by the API.

S2S event payload too large

The S2S Events API enforces a 1 KB payload limit per event. If your events contain large eventValue or custom_data fields, reduce the number of properties or move large payloads to a separate data pipeline.