Skip to main content
← Back to blog
Felix Cameron··10 min read

How to Track App Installs Without an MMP

MMPs like AppsFlyer, Adjust, and Branch are built for enterprises spending millions on ads. Here's how to track installs per link without one.

What is an MMP?

MMP stands for Mobile Measurement Partner. These are platforms like AppsFlyer, Adjust, Branch, Kochava, and Singular. Their primary job is to tell you which ad campaign drove which install, across dozens or hundreds of ad networks.

MMPs sit between your app and ad networks (Meta Ads, Google Ads, TikTok Ads, etc.). When a user sees or clicks an ad and then installs your app, the MMP determines which ad network gets credit for that install. This is how large app companies know that their $50,000 Meta Ads campaign drove 3,200 installs at a cost of $15.62 per install.

MMPs also handle fraud detection, SKAdNetwork integration, cohort analysis, and multi-touch measurement. They're powerful tools — designed for companies spending serious money on paid user acquisition.

For the broader question of how to actually do per-link install tracking once you've decided an MMP is overkill, see the full guide on tracking app installs with links.

The problem for most developers

Most indie developers and small studios don't run large paid ad campaigns. They promote their app through organic channels: social media posts, YouTube videos, blog content, creator partnerships, Reddit communities, email newsletters, and link-in-bio pages.

For these use cases, MMPs are the wrong tool.

ProblemDetails
CostMMPs start at $500-$2,000/month on contract. Some require annual commitments. AppsFlyer's cheapest paid tier is designed for apps with 10K+ monthly installs
ComplexityIntegration takes days or weeks. You need to configure postbacks, set up ad network integrations, manage partner credentials, and learn a complex dashboard
OverkillIf you're not running paid ads, 80% of MMP features are irrelevant to you. You don't need SKAdNetwork support, fraud detection for ad clicks, or multi-touch measurement
SDK bloatMMP SDKs are large. They track advertising identifiers, support dozens of ad network integrations, and add significant weight to your app bundle
Setup overheadEvery ad network integration requires separate configuration. Each one adds a potential point of failure
If you're spending $100K/month on ads across Meta, Google, and TikTok — yes, you need an MMP. If you're sharing links on Twitter and giving creators unique URLs to put in their YouTube descriptions, you don't.

What you actually need

For organic and creator-driven installs, the requirements are much simpler:

    • Create unique links for each campaign, channel, or creator
    • Track clicks on each link
    • Track installs from each link — see which links drive actual downloads
    • Track revenue per link — see which links drive paying users
    • See it all in real time in a dashboard
That's it. No ad network integrations. No SKAdNetwork configuration. No fraud detection for click flooding. No multi-touch attribution models.

MMP features vs what you actually need

Here's a clear breakdown of what MMPs offer versus what most indie developers actually use:

FeatureMMP (AppsFlyer, Adjust, etc.)What you actually need
Ad network integrations100+ networks (Meta, Google, TikTok, etc.)None — you're sharing links, not running ads
SKAdNetwork / Privacy SandboxFull support with conversion value mappingNot needed for organic installs
Fraud detectionAdvanced (click flooding, SDK spoofing, device farms)Basic protection is sufficient
Multi-touch measurementLast-click, first-click, linear, time-decay modelsLast-click is fine — one link per install
Cohort analysisFull LTV prediction, retention cohortsNice to have but not essential
Per-link install trackingPossible but requires manual campaign setupBuilt-in — create a link, track installs
Revenue per linkRequires server-to-server integration and configConnect RevenueCat/Stripe and it works
Creator/promoter dashboardsNot availableBuilt-in for creator partnerships
Automatic payouts to creatorsNot availableBuilt-in via Stripe Connect
SDK sizeLarge (multiple MB with all modules)Small (<50KB)
Setup timeDays to weeksMinutes
Pricing$500+/month, often annual contractsFree tier available, $40/month for Growth
The right side of this table describes what Instally does. It's built specifically for this use case.

How tracking works without an MMP

The mechanics are straightforward. No ad network postbacks, no partner configurations, no conversion value schemas.

1. Create tracking links

You create a tracking link for each campaign, channel, or creator. Each link has a unique identifier and redirects to the correct app store based on the user's device.

instally.io/l/youtube-april     → YouTube video description
instally.io/l/twitter-bio       → Twitter profile link
instally.io/l/reddit-fitness    → Reddit r/fitness post
instally.io/l/creator-alexfit   → Creator's personal link

Each link automatically detects iOS vs Android and redirects accordingly. Desktop visitors see a branded download page. All explained in how one-link detection works.

2. Add the SDK to your app

The SDK is a few lines of code. It reports install events when the app is launched for the first time.

Swift example:

import Instally

@main
struct FitnessApp: App {
    init() {
        Instally.configure(appId: "YOUR_APP_ID", apiKey: "ik_live_abc123")
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Kotlin example:

import io.instally.sdk.Instally

class FitnessApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Instally.configure(this, "ik_live_abc123")
    }
}

Flutter example:

import 'package:instally/instally.dart';

void main() {
  Instally.configure(appId: 'YOUR_APP_ID', apiKey: 'ik_live_abc123');
  runApp(const MyApp());
}

No IDFA request. No ATT prompt. No Google Advertising ID. The SDK is under 50KB.

3. Match installs to clicks

When the app launches and the SDK fires the install event, Instally matches it to the original click — no advertising identifiers needed.

The match happens in seconds. You see the install in your dashboard, tied to the specific link that drove it.

4. Track revenue (optional)

Connect your payment provider and revenue is automatically associated with the install — and therefore with the link.

ProviderIntegration
RevenueCatWebhook
StripeWebhook
SuperwallWebhook
AdaptyWebhook
Once connected, you see revenue per link in your dashboard. "Creator @alexfit drove 312 installs and $840 in revenue this month" — that's the data you need to decide whether to renew the partnership.

When you DO need an MMP

Let's be honest about when an MMP is the right tool.

You're running paid ads. If you're spending money on Meta Ads, Google Ads, Apple Search Ads, TikTok Ads, or any other ad network, you need an MMP. These platforms require server-to-server integration to report conversions back to the ad network. Without it, the ad network can't optimize your campaigns. Instally doesn't integrate with ad networks. You need fraud detection at scale. AppsFlyer's Protect360 is purpose-built for detecting click flooding, SDK spoofing, device farms, and other fraud techniques. If you're spending enough on ads that fraud could cost you thousands per month, enterprise fraud detection is worth the investment. You need SKAdNetwork or Privacy Sandbox support. Apple's SKAdNetwork and Google's Privacy Sandbox are frameworks for ad measurement with privacy restrictions. MMPs handle the complexity of conversion value mapping and aggregate reporting. If you rely on these frameworks, you need an MMP. You need multi-touch measurement. A user sees your ad on Instagram, clicks a Google ad a week later, then installs from a YouTube video. Which channel gets credit? Multi-touch measurement models (linear, time-decay, position-based) distribute credit across touchpoints. If this level of analysis matters to your business, MMPs provide it.

The in-between: hybrid setups

Some developers use both. An MMP for paid ad tracking and Instally for everything else.

This makes sense if you run paid campaigns but also do organic promotion and creator partnerships. The MMP handles the ad network integrations. Instally handles the per-link tracking for organic channels, with creator dashboards and automatic payouts that MMPs don't offer.

ChannelTool
Meta Ads, Google Ads, TikTok AdsMMP (AppsFlyer, Adjust)
Creator partnershipsInstally
Social media linksInstally
Blog, email, link-in-bioInstally
Reddit, Discord, forumsInstally
The two don't conflict. The MMP SDK and the Instally SDK can coexist in the same app.

Getting started

If you're currently not tracking installs at all — which is the case for most indie developers — starting with a lightweight tool is the right move. You can always add an MMP later if your paid ad spend justifies it.

Instally's free tier gives you 1 app, 1 tracked link, and 1,000 installs per month. Enough to validate that install tracking is useful for your app before you commit to a paid plan.

The setup takes about 10 minutes:

    • Create an account at app.instally.io
    • Register your app with both store URLs
    • Add the SDK to your app (a few lines of code)
    • Create your first tracking link
    • Share it and watch the data come in
For step-by-step guides, see iOS setup, Android setup, or Flutter setup.

FAQ

Can I switch from an MMP to Instally?

Yes, but they serve different purposes. If you're currently using an MMP only for organic link tracking (not paid ads), you can replace it with Instally and save significantly on cost. If you're using an MMP for paid ad tracking, keep the MMP for that and add Instally for organic channels.

Does Instally work with Apple Search Ads?

Not directly. Apple Search Ads has its own measurement framework (AdServices/Apple Ads Attribution API). If Apple Search Ads is a significant channel for you, you'll want an MMP that integrates with it. Instally is for tracking installs from links you share, not from ad networks.

How does Instally handle users who click a link on one device and install on another?

Cross-device tracking is inherently limited without a login-based system. If someone clicks your link on their laptop and then installs on their phone, the install won't match to that click. The install will still be counted as an unmatched install. This is a limitation of all device-signal-based matching, not specific to Instally or any MMP.

Is the matching accurate enough to base business decisions on?

For organic and creator-driven installs, yes. The time between click and install is typically short (minutes to hours), which allows for high-confidence matches. Match rates are typically above 85% for installs that happen within 24 hours of the click.

Can I track installs from QR codes?

Yes. QR codes are just URLs. Create a tracking link in Instally, generate a QR code for it (using any QR code generator), and every scan is tracked as a click. When someone scans the code and installs your app, the install is matched to that link.

What data does the Instally SDK collect?

The SDK collects a minimal, non-identifying payload needed for install matching. It does not collect IDFA, GAID, contacts, photos, location, or any other sensitive data. The full list is documented in Instally's privacy policy.

Ready / v1.0

Stop guessing. Start shipping.

Track clicks, installs, and revenue from every link. Set up in five minutes.

Get started free