Mobile attribution tells you which ad, network or channel brought in each app install. Get the setup wrong, and your data lies to you. You end up scaling the wrong campaigns and cutting the ones that actually work.
Adjust and AppsFlyer are two of the most widely used mobile measurement partners (MMPs) on the market. Both track installs, in-app events and ad spend across iOS and Android. But the setup process trips up a lot of teams.
This guide walks you through how to set up Adjust or AppsFlyer, step by step. You’ll also see the small mistakes that quietly break attribution accuracy, even after a “successful” SDK integration.
What Is Mobile Attribution and Why Does Setup Matter?
Mobile attribution connects an app install to its source. It answers one simple question: which campaign, network or creative actually drove this install?
A mobile measurement partner (MMP) like Adjust or AppsFlyer collects this data through an SDK embedded in your app. The SDK records the install, tracks in-app events like sign-ups and purchases and sends conversion data back to your ad networks.
One small error in the SDK integration is enough to break this chain. You might see inflated install counts, missing events or campaigns that look like they’re failing when they’re actually working fine.
Adjust or AppsFlyer: Quick Difference Before You Set Up
Both platforms do the same core job, but they suit different teams.
Adjust offers a simpler setup process and flat-rate pricing. It works well for startups and smaller teams that want predictable costs and a clean SKAdNetwork (SKAN) implementation. Adjust also keeps adding to its dashboard, see our breakdown of its new attribution tier and AppLovin integration for what’s changed recently.
AppsFlyer offers deeper ad network integrations and stronger built-in fraud protection. It suits teams running campaigns across many networks who need automated SKAN ID management.
Pick the platform that matches your team size and network stack first. Then follow the setup steps below.
How to Set Up Adjust for Mobile Attribution
Step 1: Create Your Adjust Account and App Token
Sign up for Adjust and add your app. Adjust generates a unique app token for every app you register and your developer needs this token to initialize the SDK.
Create separate apps for iOS and Android, even if they share a name. Mixing platforms under one app token corrupts your attribution data.
Step 2: Integrate the Adjust SDK
Add the Adjust SDK through Maven on Android or CocoaPods/Carthage on iOS. Initialize the SDK early in your app’s lifecycle on Android, this usually means inside your main Application class.
Pass your app token and environment (sandbox or production) into the SDK configuration. Always test in sandbox mode first, then switch to production before launch.
Step 3: Configure SKAdNetwork for iOS
Apple’s privacy rules limit how much user-level data you can collect on iOS. SKAdNetwork (SKAN) lets you measure ad campaigns without identifying individual users.
Adjust handles SKAN conversion value mapping through your dashboard. Define which in-app events map to which conversion values before you launch any iOS campaigns.
Step 4: Set Up Events and Event Tokens
Create an event for every action you want to track: sign-up, trial start, purchase, subscription renewal. Adjust generates a unique event token for each one.
Add these tokens to your SDK implementation. Test every event in sandbox mode first a missing or mistyped token means that event never gets recorded.
Step 5: Test Before You Launch
Switch your SDK to sandbox mode and run test installs on a real device. Check your Adjust dashboard to confirm the install and test events appear correctly.
Only switch back to production once every event fires correctly. Skipping this step is the single biggest reason attribution data breaks after launch.
How to Set Up AppsFlyer for Mobile Attribution
Step 1: Create Your AppsFlyer Account and Add Your App
Sign up for AppsFlyer and add your app using its store listing or bundle ID. Use separate AppsFlyer apps for your development and production builds.
Mixing development and production data under one app ID is one of the fastest ways to wreck your reporting.
Step 2: Integrate the SDK — Request ATT Permission First
Add the AppsFlyer SDK and initialize it with your dev key. On iOS, request App Tracking Transparency (ATT) permission before you call the SDK’s start() function, not after.
Get this order wrong, and you lose access to the IDFA for every attributed user. That one mistake quietly breaks iOS attribution accuracy for the entire campaign.
Step 3: Add SKAdNetwork IDs to Your Info.plist
If you run paid iOS campaigns, your Info.plist needs the SKAdNetwork IDs for every ad network you use. Without them, SKAN can’t attribute those campaigns at all.
AppsFlyer maintains and updates this ID list, so check your dashboard for the current set before every campaign launch.
Step 4: Set Up In-App Event Tracking
Define the events you want to measure, such as purchases, registrations, or level completions. Use AppsFlyer’s SDK Integration Wizard to confirm each event fires correctly before launch.
Set the customerUserID right after a user logs in. Without it, you can’t connect one user’s activity across multiple devices or sessions.
Step 5: Verify With Test Devices
Add your device as a test device inside the AppsFlyer dashboard. Install the app, trigger your key events and confirm they appear in real time.
Don’t launch paid campaigns until every event you plan to track has been verified this way.
Set Up Deep Linking and Install Referrer Too
Attribution doesn’t stop at the install. Deep linking sends a user straight to the right in-app screen a product page, a promo, a referral offer instead of dropping them on your home screen after they click an ad or share link.
Both Adjust and AppsFlyer support deferred deep linking, which works even if the user didn’t have the app installed yet. AppsFlyer calls this OneLink. Adjust handles it through its own link engine. Set this up alongside your SDK integration, not after.
On Android, also enable the Google Play Install Referrer API. It passes the install source from the Play Store straight to your SDK, which is more reliable than older referrer methods Google has phased out. Skip it and some Android installs may show up as “unknown” or “organic” in your dashboard.
If your backend confirms events directly say, a server validates a purchase instead of the app set up server-to-server (S2S) postbacks. This sends event data straight from your server to Adjust or AppsFlyer. It matters most for apps where some actions happen outside the app itself, like web checkout flows.
Understanding Attribution Windows Before You Launch
An attribution window decides how long after a click or impression an install still counts toward that campaign. Set it wrong, and you either miss real conversions or credit the wrong channel for an install.
Both Adjust and AppsFlyer let you set separate windows for click-through and view-through attribution. A common starting point is 7 days for clicks and 1 day for impressions, but the right number depends on your app category and sales cycle.
Check your attribution window settings against each ad network’s default. A mismatch here is a quiet source of reporting disputes between you and your ad partners, since both sides may be measuring the same install on different timelines.
How to Confirm Your Setup Is Actually Working
Don’t trust a clean dashboard alone. Run a real test before you trust either platform with live budget.
Install the app on a test device, trigger every event you’ve mapped and watch it appear in your dashboard in real time. Then run one small paid test campaign on a single network and confirm the install attributes correctly.
If a test install shows up as organic when it should be paid, stop. Go back through your SDK configuration, ATT permission order and SKAdNetwork IDs before you spend any real budget.
Common Mistakes That Break Attribution Accuracy
Requesting ATT permission after SDK initialization (iOS only). You lose the IDFA for attributed users.
Mixing dev and production app IDs. This corrupts your live data permanently.
Missing or outdated SKAdNetwork IDs in Info.plist. Those campaigns simply can’t get attributed. Converting revenue to USD manually before sending it. Let the MMP handle currency conversion don’t do it twice.
Skipping sandbox testing before launch. This is the most common cause of broken data in week one.
Forgetting to set the customer user ID after login. You lose cross-device and cross-session tracking.
Which One Should You Choose?
There’s no universal winner here. Adjust suits teams that want a fast, low-friction setup with predictable, flat-rate pricing. AppsFlyer suits teams running complex, multi-network campaigns that need deeper fraud protection and broader ad network integrations.
Whichever platform you pick, the same logic applies: get your SDK integration right, map your events correctly and test everything before you spend a single ad dollar on user acquisition.
Need Help With Mobile Attribution Setup?
Getting Adjust or AppsFlyer right takes more than following a checklist. Small configuration errors can quietly cost you weeks of bad data and wasted ad spend.
Attribution setup is only one piece of mobile growth. If you’re also exploring device-level channels, read our guide on OEM advertising in the UAE to see how it fits alongside paid UA.
Our mobile app user acquisition team in Dubai sets up and audits attribution for apps running paid campaigns across iOS and Android. If your attribution data looks off, we can help you find out why.
Frequently Asked Questions
Adjust focuses on a simpler setup and flat-rate pricing, while AppsFlyer offers more ad network integrations and stronger fraud protection. Both measure installs and in-app events accurately when set up correctly.
You still benefit from one. An MMP separates organic installs from paid ones and tracks in-app events, which helps you understand user behavior even without paid campaigns.
SKAdNetwork (SKAN) is Apple’s privacy-first framework for measuring ad campaigns on iOS. It lets you attribute installs and limited in-app events without accessing individual user identifiers.
A basic SDK integration usually takes a developer a few days. Full setup, including event mapping, SKAN configuration and sandbox testing, often takes one to two weeks depending on app complexity.
Yes, but plan for it. Both platforms support running in parallel for a few weeks so you can compare data before fully switching. Historical data stays in your original dashboard even after you migrate, so you don’t lose past reporting.

