> 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/meta-ads-app-events.md).

# Meta Ads app events

Send app conversions to Meta through the Conversions API, with the device information Meta requires.

{% hint style="info" %}
**Status: outline.** Sections 1, 3 and 6 are confirmed by a live implementation. The open points are marked.
{% endhint %}

## 1. What Meta needs for app events

An event with action source `app` is only accepted when it carries an `app_data` object containing:

* `extinfo`: an array of 16 values. Position 0 is the extinfo version, `i2` for iOS and `a2` for Android. Position 4 is the OS version. Both are mandatory, the other positions may be empty strings.
* `advertiser_tracking_enabled` and `application_tracking_enabled`.

Without that object Meta answers with HTTP 400, code 100, subcode 2804043, "wrong extinfo version or OS version". The event does not appear in Events Manager, not even under Test Events.

## 2. What you set up on the Meta side

* Access to the ad account and to Events Manager, to verify.
* **Open:** confirm whether app events should go to the existing pixel dataset with action source `app`, or to a separate app dataset registered in Events Manager. Record the consequence for reporting and for campaign optimisation.

## 3. Tag configuration

| Field         | Value                                                           |
| ------------- | --------------------------------------------------------------- |
| Tag type      | Facebook Conversion API (Stape)                                 |
| Trigger       | `Client Name` equals the App client, plus the event name        |
| Action source | `app`                                                           |
| App data      | Automap on, or `extinfo` and both tracking flags mapped by hand |
| User data     | The identifier agreed with the app developer                    |

With a current version of the tag template, **Automap App Data** builds `extinfo` from `x-ga-platform`, `app_id`, `app_version`, `x-ga-os_version`, `x-ga-device_model` and `language`. Two conditions apply: the template must be up to date, and the tag must fire on the App client, because those fields do not exist on the web client.

If the template is older, the App Data section has no automap option and sends an empty object. Update the template, or map `extinfo` yourself. The value field is text, so an array has to come from a variable: either a gallery variable such as Object Builder or JSON Converter, or a variable custom template of your own. A server container has no Custom JavaScript variable type.

{% hint style="warning" %}
Setting the action source to `other` makes Meta accept the event without device information. Use it only as a temporary step while the app is being fixed, never as the final state, because app campaigns need `app` for attribution.
{% endhint %}

## 4. Identifiers this platform accepts

`madid`, `anon_id`, `external_id`, and hashed `em`, `ph`, `fn`, `ln`. See **Identifiers and consent in apps**. Note that the user data variables of a web tag point at web dataLayer paths and are empty for app events, so they have to be remapped.

## 5. How to test

* Events Manager, under Test Events, using a `test_` prefixed event name during the test phase.
* The container's outgoing requests, which show both the payload and Meta's answer. This is the faster route, and it works without access to the client's ad account.

## 6. Known errors

| Response                       | Cause                                                   | Fix                                                                 |
| ------------------------------ | ------------------------------------------------------- | ------------------------------------------------------------------- |
| 400, code 100, subcode 2804043 | `app_data` empty, or the platform or OS version missing | Update the template and switch on automap, or map `extinfo` by hand |

**Open:** extend as we see more of them.

## 7. Limits

* Without an identifier the event is accepted but barely attributable.
* On iOS the advertising id is only available with tracking permission, which caps app attribution on that platform.
* **Open:** describe how these events behave in campaign optimisation once a client has run on it for a while.


---

# 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/meta-ads-app-events.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.
