> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking AppsFlyer as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/appsflyer > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://app.posthog.com` (app host for links). ## On this page - [Adding a data source](#adding-a-data-source) - [Available tables](#available-tables) - [Sync behavior](#sync-behavior) - [Configuration](#configuration) - [Supported tables](#supported-tables) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d) Let AI connect your sources for you Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog. `npx @posthog/wizard warehouse` ![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png) ![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you Enter your AppsFlyer credentials to pull aggregate mobile attribution reports into the PostHog data warehouse. Each source connects to a single AppsFlyer app. ## Adding a data source 1. Go to the [sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section in PostHog. 2. Click **\+ New source** and then click **Link** next to AppsFlyer. 3. In AppsFlyer, go to your **account menu** > **Security center** > **AppsFlyer API tokens** and copy your **API token (V2)**. Your account must have an active Pull API subscription. 4. Find your **App ID** in the AppsFlyer dashboard — for example, `id123456789` for iOS or the Android package name. 5. Back in PostHog, enter the **App ID** and **API token (V2)**, then click **Next**. 6. Select the tables you want to sync, set the sync method and frequency, then click **Import**. Once the syncs are complete, you can start using AppsFlyer data in PostHog. ## Available tables | Table | Description | Sync method | | --- | --- | --- | | `daily_report` | Daily aggregate performance data | Incremental | | `geo_report` | Geographic breakdown of performance data | Incremental | | `partners_report` | Partner attribution data | Incremental | All tables sync incrementally on the `date` field. ## Sync behavior - **Incremental sync with lookback** - AppsFlyer doesn't finalize data until approximately 48 hours after the UTC day. Each incremental sync re-fetches the trailing two days to capture late-arriving data. Duplicates are merged on the dimension key. - **Initial sync** - The first sync can pull up to approximately 1,000 days of historical data, the maximum window supported by the AppsFlyer aggregate Pull API. - **One app per source** - Each source connects to a single AppsFlyer app. To import data from multiple apps, create a separate source for each one. ## Configuration | Option | Type | Required | | --- | --- | --- | | `App ID` | text | Yes | | `API token (V2)` | password | Yes | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `daily_report` | Daily aggregate performance per media source and campaign — installs, clicks, cost, and revenue by date. | Incremental, Full refresh | date | — | | `geo_report` | Daily aggregate performance broken down by country, in addition to media source and campaign. | Incremental, Full refresh | date | — | | `partners_report` | Daily aggregate performance broken down by attribution partner (media source). | Incremental, Full refresh | date | — | | `installs` | One row per attributed (non-organic) install, with the media source, campaign and touch that won attribution. | Incremental, Full refresh | event\_time | — | | `installs_organic` | One row per organic install — users who found the app themselves, the baseline paid campaigns are measured against. | Incremental, Full refresh | event\_time | — | | `installs_retargeting` | One row per retargeting conversion, where an existing user was brought back by a retargeting campaign rather than newly acquired. | Incremental, Full refresh | event\_time | — | | `in_app_events` | One row per in-app event from an attributed user, carrying the event name, value and revenue alongside the install's attribution. | Incremental, Full refresh | event\_time | — | | `in_app_events_organic` | One row per in-app event from an organic user, carrying the event name, value and revenue. | Incremental, Full refresh | event\_time | — | | `in_app_events_retargeting` | One row per in-app event from a user attributed to a retargeting campaign. | Incremental, Full refresh | event\_time | — | | `uninstall_events` | One row per uninstall AppsFlyer measured, with the attribution of the install it ends. | Incremental, Full refresh | event\_time | — | | `blocked_installs` | Protect360 installs blocked as fraud in real time, so they were never attributed. Explains part of the gap between gross and attributed installs. | Incremental, Full refresh | event\_time | — | | `blocked_in_app_events` | Protect360 in-app events blocked as fraud, with the rule that blocked each one. | Incremental, Full refresh | event\_time | — | | `post_attribution_installs` | Protect360 installs that were attributed first and found to be fraudulent later, with the date the fraud was detected. | Full refresh | — | — | | `ad_revenue` | Ad monetization revenue per user for attributed installs, aggregated by monetization network, ad unit and placement. | Incremental, Full refresh | event\_time | — | | `ad_revenue_organic` | Ad monetization revenue per user for organic installs, aggregated by monetization network, ad unit and placement. | Incremental, Full refresh | event\_time | — | | `ad_revenue_retargeting` | Ad monetization revenue per user attributed to retargeting campaigns, aggregated by monetization network, ad unit and placement. | Incremental, Full refresh | event\_time | — | | `master_report` | Master API LTV report: install-day cohorts broken down by agency, media source, campaign and country, with the generic lifetime-value KPIs. | Incremental, Full refresh | install\_time | — |