Send AppsFlyer Data to Angler via Push API

Send AppsFlyer Data to Angler via Push API

Overview

AppsFlyer's Push API streams raw attribution event data to a server-side endpoint in real time. You can use it to send mobile install and in-app purchase events directly into Angler, so Angler has a complete, attributed view of your mobile conversions alongside your web events.

This guide covers how to configure the AppsFlyer Push API to send events to your Angler workspace.


Prerequisites

Before you begin:

  • You must be the AppsFlyer account owner — only account owners can create or modify Push API endpoints.
  • You'll need your Angler Push API webhook URL, which includes your workspace ID and API token. Your Angler account manager will provide this, or you can generate a token yourself — see Create API Access Tokens.
  • At least one in-app event must have been recorded in AppsFlyer before you can select it as a Push API event type. If needed, fire a test event from a test device first.

Step 1: Get your Angler webhook URL

Your Angler webhook URL for AppsFlyer Push API events follows this format:

https://webhooks.getangler.ai/v1/appsflyer/data/<WORKSPACE_ID>?token=<YOUR_API_TOKEN>

For example:

https://webhooks.getangler.ai/v1/appsflyer/data/ws-brand-abc123?token=<YOUR_API_TOKEN>

Your workspace ID and token are available in your Angler dashboard. See Create API Access Tokens for instructions on generating a token with CLIENT_EVENTS scope.


Step 2: Configure the Push API endpoint in AppsFlyer

  1. In your AppsFlyer dashboard, go to Reports → API Access.
  2. Scroll down to the Push API section.
  3. Click Add Endpoint.
  4. Set the HTTP method to POST.
  5. Paste your Angler webhook URL (including the ?token=... query parameter) into the Endpoint URL field.
  6. Click Save.

Step 3: Select event types

Under Event Types, select All to forward every event type to Angler. This ensures Angler has complete visibility into your mobile user journey — including installs, re-engagements, and all in-app events — which improves attribution accuracy and model performance.

Note: The in-app events list only shows event types that have already been recorded in AppsFlyer. If an event is missing, fire it from a test device first and then return to this step.


Step 4: Select message fields

The following fields are always included in every Push API message regardless of your selection:

  • app_id
  • event_name
  • event_time
  • idfa (iOS) or advertising_id (Android)

We recommend also enabling these optional fields so Angler can correctly process, attribute, and forward events to downstream ad platforms:

FieldWhy it's needed
customer_user_idMaps the event to a known user in Angler
event_valueContains revenue (af_revenue), currency, and order details
appsflyer_idAppsFlyer's unique device identifier
idfviOS Identifier for Vendor — improves identity resolution and reinstall attribution
platformios or android — needed for cross-platform attribution
device_typeDevice model (e.g. iPhone 14) — required when forwarding events to Meta as app events
device_categoryphone or tablet — used for Meta app event delivery
os_versionOperating system version — required for Meta app events
app_versionApp version at time of event — used for Meta app events and debugging
media_sourcePaid channel attribution (e.g. facebook, googleadwords_int)
campaignCampaign name for channel-level reporting
af_c_idCampaign ID — stable identifier to complement campaign name
af_adset / af_adset_idAd set name and ID — sub-campaign granularity
af_ad / af_ad_idCreative name and ID — creative-level attribution
attributed_touch_typeClick-through vs. view-through attribution context
attributed_touch_timeTimestamp of the last attributed touch
install_timeOriginal install timestamp — used for cohort analysis and LTV modeling
is_retargetingFlags retargeting events — useful for deduplication
is_primary_attributionIdentifies the primary attribution for retargeting duplicate events
country_codeGeographic segmentation
cityCity-level geo data
postal_codePostal code — granular geo context
languageDevice language setting
wifiWhether the device was on WiFi at time of event
ipUsed for identity resolution
user_agentDevice/browser context
💡

AppsFlyer omits null or empty fields from the payload entirely — unselected fields simply won't be present.


Step 5: Test the endpoint

  1. Click Send Test in the Push API configuration panel.
  2. AppsFlyer will POST a test message to your Angler endpoint. It expects an HTTP 200 response within 2 seconds — if it doesn't receive one, the test is marked as failed.
  3. If the test fails, verify that your webhook URL and token are correctly formatted and that the token has CLIENT_EVENTS scope.

Step 6: Save and verify

Click Save. The Push API is now live and will begin forwarding events to Angler in real time.

To verify data is arriving, check the Events Monitor in your Angler workspace and confirm events are appearing as expected.


Notes and limitations

  • One event per request. AppsFlyer sends each event as a separate POST — there is no batching.
  • SKAdNetwork (SKAN). The same Angler webhook URL supports both standard AppsFlyer attribution and SKAN attribution events. When setting up a SKAN endpoint in AppsFlyer, use the same URL.
  • Retargeting duplicates. If both UA and retargeting campaigns are active, purchase events during a re-engagement window may be sent twice — once attributed to the UA source and once to the retargeting source. Use is_primary_attribution to filter to the primary attribution row downstream.

Troubleshooting

SymptomLikely causeFix
Test message failsToken missing, malformed, or wrong scopeVerify the full URL and that the token has CLIENT_EVENTS scope
Events arrive but have no revenueevent_value not selected in message fieldsEnable event_value in the Push API field selector
Event missing from event type listEvent not yet recorded in AFFire it from a test device, then refresh
Delivery timeoutsEndpoint not responding within 2sContact Angler support to check webhook health