> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking AppLovin as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/applovin > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://us.posthog.com` or `https://app.posthog.com` (app host for links). ## On this page - [Prerequisites](#prerequisites) - [Adding a data source](#adding-a-data-source) - [Sync modes](#sync-modes) - [Configuration](#configuration) - [Supported tables](#supported-tables) - [Troubleshooting](#troubleshooting) ![](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 The AppLovin connector syncs MAX mediation revenue, per-user ad revenue, campaign data, and more into the PostHog data warehouse, so you can analyze them alongside your product data. ## Prerequisites - **Report Key** (required) - For syncing report tables. Find it in the AppLovin dashboard under your account menu > **Keys**. - **Campaign Management API key** and **Account ID** (optional) - For syncing campaign tables. AppLovin issues this key separately from the Report Key. Find both under your account menu in the AppLovin dashboard. ## Adding a data source 1. In PostHog, go to the [Sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section. 2. Click **\+ New source** and click **Link** next to this source. 3. Enter your credentials (see [Configuration](#configuration) below) and click **Next**. 4. Select the tables you want to sync, choose a sync method and frequency, then click **Import**. Once the syncs are complete, you can start querying this data in PostHog. Connect your AppLovin account to pull MAX mediation revenue, per-user ad revenue, campaign spend, and cohort reporting. Find your **Report Key** in the AppLovin dashboard: click your account in the top right, then **Keys**. To sync campaigns, creative sets, and campaign operation logs, also add your **Campaign Management API key** (under **Keys**) and your **Account ID** (under **Go to settings**, the number after your account name). AppLovin only serves the last 45 days of report data and the last 30 days of campaign operation logs, so anything older than that can't be backfilled. You'll be asked for: - **Report Key** - Required for all tables - **Campaign Management API key** - Optional, for campaign tables only - **Account ID** - Optional, required together with the Campaign Management API key ## Sync modes Each table can be synced in one of several modes, depending on what the source supports: - **Webhook** (when available) – the source pushes changes to PostHog in real time. Fastest freshness, lowest ongoing cost, and the only mode that reliably captures updates and deletes. - **Incremental** – only new or updated rows are synced on each run, using a cursor field (such as an `updated_at` timestamp). Cheaper than a full refresh, but deletes aren't captured. - **Append only** – new rows are appended using a cursor field; existing rows are never updated. Ideal for immutable, append-only tables like event logs. - **Full refresh** – the whole table is reloaded on every sync. Use it when a table has no reliable cursor or when you need deletions reflected. See [sync methods](https://posthog.com/docs/data-pipelines/sources.md#sync-methods) for a full explanation of how each mode works and how to choose between them. Sync behavior varies by table: - **Report tables** (`max_ad_revenue`, `max_ad_unit_revenue`, `publisher_report`, `user_ad_revenue`) - Incremental sync on `day`. Report rows restate as metrics settle, so each sync merges recent data. - **Campaign operation logs** - Incremental sync on `operation_time`, covering the last 30 days. - **Campaigns** and **Creative sets** - Full refresh. The API has no server-side time filter for these tables, so each sync replaces the full table. ## Configuration | Option | Type | Required | | --- | --- | --- | | `Report Key` | password | Yes | | `Campaign Management API key` | password | No | | `Account ID` | text | No | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `max_ad_revenue` | Estimated MAX mediation revenue and delivery, broken down by day, app, ad unit and the ad network that filled the impression. | Incremental, Full refresh | day | day, package\_name, platform, country, device\_type, ad\_format, max\_ad\_unit\_id, network | | `max_ad_unit_revenue` | Estimated MAX mediation revenue and delivery per ad unit, without the network breakdown. This is the only grain at which AppLovin reports ad requests. | Incremental, Full refresh | day | day, package\_name, platform, country, device\_type, ad\_format, max\_ad\_unit\_id | | `publisher_report` | Publisher-side AppLovin monetization: revenue, impressions and clicks earned by your apps, broken down by day, app, placement and geography. | Incremental, Full refresh | day | day, package\_name, platform, country, device\_type, ad\_type, placement\_type, size, bidding\_integration | | `advertiser_report` | Advertiser-side AppLovin campaign performance: spend, installs and attributed sales by day, campaign, traffic source app and geography. | Incremental, Full refresh | day | day, campaign\_id\_external, app\_id\_external, platform, country, device\_type, ad\_type, size | | `max_cohort_ad_revenue` | MAX cohort revenue: how much revenue users generate in the days after they install, keyed on the install day. | Incremental, Full refresh | day | day, package\_name, platform, country | | `max_cohort_impressions` | MAX cohort ad impressions: how many impressions users see in the days after they install, keyed on the install day. | Incremental, Full refresh | day | day, package\_name, platform, country | | `max_cohort_sessions` | MAX cohort engagement: retention, session counts and time spent in the days after users install, keyed on the install day. | Incremental, Full refresh | day | day, package\_name, platform, country | | `user_ad_revenue` | MAX ad revenue per user, ad unit and placement for each app and day, from the aggregated User-Level Ad Revenue API report. | Incremental, Full refresh | day | day, package\_name, platform, ad\_unit\_id, placement, idfa, idfv, user\_id, custom\_data | | `campaigns` | AppLovin campaigns on the account, with status, budget, goal, tracking and country targeting. Archived campaigns are not listed. | Full refresh | — | id | | `creative_sets` | Creative sets on the account: the assets, languages and countries each set serves with. | Full refresh | — | id | | `campaign_operation_logs` | History of operations on campaigns: creation, updates, status changes and archiving. | Incremental, Full refresh | operation\_time | operation\_id | ## Troubleshooting - If the connection fails with an authorization error, the Report Key is wrong, expired, or has been revoked. Create a new one, then reconnect the source. - If campaign tables fail with an authorization error, the Campaign Management API key or Account ID is incorrect. Check both under your account menu in the AppLovin dashboard, then update the source. - If campaign tables show a message asking for credentials, add both the **Campaign Management API key** and **Account ID** to the source. You must provide both or neither. - If a table syncs no rows, the credential may not have access to that data. Check its permissions, then reconnect the source. If your sync is failing or data looks wrong, see the [Data warehouse troubleshooting guide](https://posthog.com/docs/data-warehouse/troubleshooting.md). If that doesn't help, [contact support](https://us.posthog.com/#panel=support%3Asupport%3Adata_warehouse%3A%3Atrue) – we're happy to help.