# Analytics Overview

Aghanim Connect ships ready-made connectors for marketing attribution and product analytics. One-time setup, no SDK work: get a key from your provider, paste it in the Dashboard, click **Install**.

This page covers what all analytics connectors have in common. Provider-specific steps live in each connector's guide.

* * *

## How it works

There are two kinds of analytics connectors:

*   **Server-to-server** — Aghanim's backend sends monetization events (**purchase**, **refund**) straight to the provider's API. Nothing runs in the player's browser; ad blockers can't affect these events.
*   **Web pixels (client-side)** — the hub loads the provider's script and reports on-site behavior: page views, item views, add-to-cart, checkout starts.

Both are configured the same way: **Dashboard → Aghanim Connect → _connector_ → Install**.

* * *

## Choose your connector

| Connector | Kind | Purchase | Refund | Best for |
| --- | --- | --- | --- | --- |
| [AppsFlyer](https://docs.aghanim.com/integrations/appsflyer.md) | Server-to-server | ✓ | ✓ | Mobile attribution (MMP) |
| [Adjust](https://docs.aghanim.com/integrations/adjust.md) | Server-to-server | ✓ | — | Mobile attribution (MMP) |
| [Singular](https://docs.aghanim.com/integrations/singular.md) | Server-to-server | ✓ | — | Mobile attribution (MMP) |
| [Tenjin](https://docs.aghanim.com/aghanim-connect/tenjin.md) | Server-to-server | ✓ | — | Mobile attribution (MMP) |
| [Google Analytics for Firebase](https://docs.aghanim.com/aghanim-connect/google-analytics-firebase.md) | Server-to-server (GA4 Measurement Protocol) | ✓ | — | Sending hub purchases into your existing GA4 / Firebase property, per platform (web / iOS / Android) |
| [devtodev](https://docs.aghanim.com/aghanim-connect/devtodev.md) | Server-to-server | ✓ | ✓ | Game product analytics (also tracks free item claims) |
| [ThinkingData](https://docs.aghanim.com/aghanim-connect/thinkingdata.md) | Server-to-server | ✓ | ✓ | Game product analytics (revenue also reported in USD) |
| [Google Analytics](https://docs.aghanim.com/aghanim-connect/google-analytics.md) | Web pixel | — | — | On-site behavior in your GA4 property |
| [Google Tag Manager](https://docs.aghanim.com/aghanim-connect/google-tag-manager.md) | Web pixel | — | — | Forwarding hub events to any tool without a native connector |
| [Meta Pixel](https://docs.aghanim.com/aghanim-connect/meta-pixel.md) | Web pixel | — | — | Meta ads optimization on hub behavior |

A typical setup is **one MMP + Google Analytics**. Connectors are independent — install as many as you need.

* * *

## The purchase event

All server-to-server connectors report purchases the same way:

*   **When:** the moment an order is successfully paid.
*   **Revenue:** gross amount in the order's local currency.
*   **Transaction ID:** the Aghanim **order ID** — the same ID you receive in the `item.add` webhook and see in transaction reports, so you can join analytics data with your own records. Sent by AppsFlyer, Google Analytics for Firebase, Singular, devtodev and ThinkingData.
*   **User ID:** your **player ID** — the same one Aghanim verifies in `player.verify`. For AppsFlyer and Google Analytics for Firebase you can override it per player via the `appsflyer_customer_user_id` / `ga4_user_id` player attributes.

* * *

## Excluded Sales Channels

Every server-to-server connector has an **Excluded Sales Channels** field. Purchases from the selected channels are not sent to that provider:

`game_hub` · `checkout` · `checkout_link` · `android_sdk`

Use it when a channel is already tracked elsewhere (for example, in-app purchases through the Android SDK already reported by your game build). It applies to **purchase events only** — leave it empty to track everything.

* * *

## Avoiding double counting with your in-game tracking

If your game already reports purchases to the same provider:

*   **Deduplicate by transaction ID.** Hub purchases carry the Aghanim order ID; your in-game events don't — the two sets never overlap, and the order ID gives you a stable key.
*   **Or exclude the channel.** If both the hub and your game would report the same purchase, exclude that sales channel on one side.
*   **GA4:** the hub reports into _your_ Measurement ID — there is no separate Aghanim property. If your game uses the same property, rely on `transaction_id` for dedup. Session continuity between the hub and checkout is handled automatically.
*   **Attribution continuity from the game:** pass `appsflyer_id`, `adjust_device_id` or `ga4_client_id` as parameters in the game → hub deep link, and Aghanim attaches them to the player.

* * *

## Sandbox

Sandbox hubs send analytics events too:

*   **Adjust** events are tagged `environment=sandbox`.
*   **AppsFlyer** uses dedicated sandbox event names (e.g. `af_purchase_sandbox_s2s`).
*   Other providers receive sandbox events unmarked — point the connector at a **test app / property** while integrating, and switch the key when you migrate to production.

* * *

## Verifying your setup

*   **AppsFlyer** and **ThinkingData** validate your credentials with a test call at install time — a wrong key fails immediately.
*   For the rest, make a sandbox test purchase and check the provider's real-time / live events view.
*   Not seeing events? Contact us at [integration@aghanim.com](mailto:integration@aghanim.com) — we can inspect and resend events on our side.

* * *

## Provider not listed?

Install **Google Tag Manager**: the hub pushes its event stream (`view_item_list`, `add_to_cart`, `buy_click`, `go_to_payment`, `login`, and more) to the `dataLayer`, and you can forward it to any tool with a GTM tag. Or tell us which provider you're missing: [integration@aghanim.com](mailto:integration@aghanim.com).

---
Source: https://docs.aghanim.com/aghanim-connect/analytics-overview