> For the complete documentation index, see [llms.txt](https://docs.adpage.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.adpage.io/app-tracking/event-data-reference.md).

# Event data reference

Which fields the GA4 App client makes available in the server container, and how to check what actually arrives.

The platform tags build their payload from the event data that the GA4 App client exposes. These are the fields you map, and the fields a tag's auto-mapping looks for.

## Fields from the GA4 App client

| Field               | Contains                                       | Typically used for                       |
| ------------------- | ---------------------------------------------- | ---------------------------------------- |
| `x-ga-platform`     | `ios` or `android`                             | Meta extinfo position 0, TikTok app info |
| `x-ga-os_version`   | OS version of the device                       | Meta extinfo position 4, mandatory       |
| `x-ga-device_model` | Device model                                   | Meta extinfo, device reporting           |
| `app_id`            | Bundle or package name                         | App identification per platform          |
| `app_version`       | App version                                    | Meta extinfo, debugging per release      |
| `language`          | Device language                                | Meta extinfo, locale                     |
| `app_instance_id`   | Firebase instance id of the install            | `external_id` for the platforms          |
| `user_id`           | The client's own user id, when the app sets it | `external_id`, cross-device              |
| `event_name`        | The event, for example `signup`                | Triggers and event mapping               |
| `ga_session_id`     | GA4 session id                                 | GA4 reporting                            |

Parameters the app itself sends with an event, such as a hashed email address or a value, appear under their own names alongside these fields.

{% hint style="warning" %}
Treat this table as the expected situation, not a guarantee. What the client delivers depends on the SDK version and on what the app sends. Always confirm in preview before you build a mapping on one of these fields.
{% endhint %}

## How to check what arrives

App events do not show up in preview by themselves. A request is only routed to a preview session when it carries the `X-Gtm-Server-Preview` header, and the Firebase SDK only adds that header after the device has been bound to the session. A container sitting in preview therefore stays empty while the app fires events perfectly well.

### Bind the device to the preview session

{% stepper %}
{% step %}

## Start preview

Open the **server** container and click Preview. Not the web container: a preview session on the web container never sees app traffic.
{% endstep %}

{% step %}

## Scan the QR code with the device

Use the option to debug an app. The QR code opens the app through the URL scheme `tagmanager.sgtm.c.[bundle-id]` and stores the preview token, after which the SDK sends the preview header with every upload.
{% endstep %}

{% step %}

## Fire the event

The event now appears in the preview session.
{% endstep %}

{% step %}

## Read the event data

Select the **App tracking** client on the incoming event and open the **Event Data** tab. Look up the fields you intend to map.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
This only works when the app supports the scheme: on Android a preview activity such as `GoogleAnalyticsServerPreviewActivity`, on iOS the URL scheme plus the SDK's open-URL handler (`Analytics.handleOpen`). App developers often skip the iOS side because it affects preview only. Preview then stays empty while live traffic runs fine, so ask whether it is implemented before concluding that nothing arrives.
{% endhint %}

### Or send a request yourself

The preview screen shows the value of the preview header. Replay a request with that header from curl or Postman and it lands in the same session. Useful for testing a mapping without waiting for an app build.

### Or skip preview entirely

The container's outgoing requests show what actually left and what each platform answered, without a device or a preview session. For the question "does anything arrive at all", that is the faster and more reliable route. See **Testing and verification**.

## Identifiers are not in this list by default

The advertising id of the device (IDFA or GAID) is **not** forwarded by Firebase on its own, and neither is an email address. Those only arrive when the app explicitly sends them. See **Identifiers and consent in apps**.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.adpage.io/app-tracking/event-data-reference.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
