Skip to Content
DocumentationMigration from AppsFlyer

Migration from AppsFlyer

Switching from AppsFlyer to AttributeHQ is straightforward. The SDK APIs are similar, and the core concepts (attribution, events, revenue) are the same.

SDK Method Mapping

AppsFlyerAttributeHQNotes
window.AF('init', {...})init({...})Similar config shape
window.AF('pba', 'event', {...})track('event_name', {...})Simpler API
trackRevenue(amount, currency)Dedicated revenue method
identify(userId)Built-in user identification
getAttribution()Client-side attribution access

Key Differences

FeatureAppsFlyerAttributeHQ
Pricing$0.07/conversion$0.03/conversion
Free tier12K conversions/year10K conversions/year
EnterpriseCustom (negotiated)Custom (negotiated)
Payment currencyUSD onlyNGN (Paystack) + USD (Stripe)
Revenue default currencyUSDNGN (configurable)
Attribution accessCallback-basedSync (getAttribution())
React Native nav trackingManualBuilt-in NavigationTracker
Expo config pluginBuilt-inBuilt-in
Multi-touch modelsEnterprise plan onlyIncluded on Growth tier
Support timezoneGlobal (US-based)Lagos (same timezone)

Postback URL Migration

AppsFlyer postback URLs use different macros. Update your ad network postbacks:

AppsFlyer MacroAttributeHQ Macro
{clickid}{device_id}
{advertising_id}{device_id}
{af_siteid}{media_source}
{campaign}{campaign_id}
{install_time}{install_time}
{click_time}{click_time}

Migration Steps

  1. Create AttributeHQ account and register your apps
  2. Generate API keys for each app
  3. Replace SDK — swap AppsFlyer SDK for AttributeHQ SDK
  4. Update event names — map your custom events (most are 1:1)
  5. Update postback URLs — replace macros in ad network configs
  6. Update webhook URLs — point to new endpoints
  7. Test — use the debug dashboard to verify attribution works
  8. Go live — deploy updated app to stores

Parallel Running

You can run both SDKs simultaneously during migration:

// Both SDKs active during transition import { init as initAHQ, track as trackAHQ } from '@attributehq/web-sdk' import AppsFlyer from 'appsflyer-web-sdk' initAHQ({ apiKey: '...', appId: '...' }) AppsFlyer.init({ devKey: '...', appId: '...' }) // Track to both function trackEvent(name, props) { trackAHQ(name, props) AppsFlyer.logEvent(name, props) }

Run both for 1-2 weeks to compare attribution results, then remove AppsFlyer.